scripts/migrate-docker
2025-07-16 15:11:55 +02:00

69 lines
1.8 KiB
Bash
Executable file

#!/bin/bash
set -e
# shellcheck disable=SC1091
. /etc/weblate-bootstrap
# Set path to include script directory
PATH="$(dirname "$(readlink -f "$0")"):$PATH"
export PATH
# Use same variables as in other scripts even though these are not configurable here
WEBLATE_USERNAME=weblate
USERNAME=weblate
WEBLATE_HOME=$(getent passwd "$USERNAME" | cut -d: -f 6)
WEBLATE_ENV="$WEBLATE_HOME/weblate-env"
WEBLATE_DOCKER="$WEBLATE_HOME/weblate"
# Install docker
install-docker
# Stop services, wait for empty queue
systemctl stop uwsgi
while sudo -u "$WEBLATE_USERNAME" "$WEBLATE_ENV/bin/weblate" celery_queues | grep ': [^0]'; do
sleep 1
done
systemctl stop celery-weblate
systemctl disable celery-weblate
systemctl stop redis
# Prepare Docker environment
install-weblate-docker "$@" --migrate
# Dump PostgreSQL and load it to Docker
# shellcheck disable=SC2024
sudo -u "postgres" pg_dump --no-privileges --no-owner --clean --if-exists weblate > "$WEBLATE_HOME/weblate.sql"
systemctl stop postgresql
cd "$WEBLATE_DOCKER"
docker compose up -d database --wait
sleep 60
docker compose exec -T database psql --username weblate --dbname weblate < "$WEBLATE_HOME/weblate.sql"
# Move redis data
cp /var/lib/redis/dump.rdb "$WEBLATE_HOME/redis"
chown -R 999:1000 "$WEBLATE_HOME/redis"
# Filesystem data is already in correct place
chown -R 1000:1000 "$WEBLATE_HOME/data"
# Cleanup system packages
apt-get purge -y \
redis-server \
uwsgi \
postgresql
# Start Weblate
sudo -u weblate docker compose up -d --wait
# Show logs
sudo -u weblate docker compose logs
# Track deploy to Sentry
if [ -n "$WEBLATE_SENTRY_TOKEN" ]; then
sudo -u weblate docker compose exec --user weblate weblate weblate sentry_deploy
fi
# Check
sudo -u weblate docker compose exec --user weblate weblate weblate check --deploy