How to back / restore weblate

Bonjour,

Restoring weblate on another machine where a virgin weblate is already installed can be done with:

  • sudo docker-compose exec --user postgres database pg_dump weblate > weblate.dump
  • scp weblate.dump othermachine:/tmp
  • ssh othermachine
  • sudo docker-compose stop weblate
  • sudo docker cp /tmp/weblate.dump weblate_database_1:/srv
  • sudo docker-compose exec --user postgres database psql -c ‘DROP DATABASE weblate’
  • sudo docker-compose exec --user postgres database psql -c ‘CREATEE DATABASE weblate’
  • sudo docker-compose exec --user postgres database psql -f /srv/weblate.dump
  • login as admin, click on admin, Components, go to each component and click Save. This will trigger a git clone to restore the repositories.

Works for me:

ssh weblate.securedrop.club
cd /home/ubuntu/weblate-docker
sudo docker-compose exec --user postgres database pg_dump weblate | gzip > weblate.dump.gz
exit
scp weblate.securedrop.club:/home/ubuntu/weblate-docker/weblate.dump.gz .
scp -i id_rsa weblate.dump.gz debian@$WEBLATE_HOST:~
molecule login -s weblate --host weblate_host
cd /srv/weblate/
sudo docker-compose stop weblate
sudo docker-compose exec --user postgres database psql -c 'DROP DATABASE weblate'
sudo docker-compose exec --user postgres database psql -c 'CREATE DATABASE weblate'

Currently I don’t find a shared directory between host and container.

This is what you need to copy the weblate.dump.gz file inside the container.

Oops, I missed it. ok. So:

zcat /home/debian/weblate.dump.gz > weblate.dump
sudo docker cp weblate.dump weblate_database_1:/srv
sudo docker-compose exec --user postgres database psql -f /srv/weblate.dump
rm /home/debian/weblate.dump.gz /srv/weblate/weblate.dump

So, after struggling a lot, we found the good way to do it. Here is my final Q&D script:

# See molecule/weblate/.molecule/instance_config.yml for getting servers details
WEBLATE_HOST="145.239.155.42"

echo -e \\n dump current weblate, get data\\n
ssh weblate.securedrop.club "cd /home/ubuntu/weblate-docker && sudo docker-compose exec --user postgres database pg_dump --clean --create weblate | gzip > weblate.dump.gz"
scp weblate.securedrop.club:/home/ubuntu/weblate-docker/weblate.dump.gz .

echo -e \\n put it on the test/new weblate\\n
scp -i id_rsa weblate.dump.gz debian@$WEBLATE_HOST:/home/debian/weblate.dump.gz

echo -e \\n stop docker\\n
ssh -i id_rsa debian@$WEBLATE_HOST "cd /srv/weblate/ && sudo docker-compose stop weblate"

echo -e \\n import dump\\n
ssh -i id_rsa debian@$WEBLATE_HOST "zcat /home/debian/weblate.dump.gz > /srv/weblate/weblate.dump"
ssh -i id_rsa debian@$WEBLATE_HOST "cd /srv/weblate/ && sudo docker cp weblate.dump weblate_database_1:/srv"
ssh -i id_rsa debian@$WEBLATE_HOST "cd /srv/weblate/ && sudo docker-compose exec --user postgres database psql -f /srv/weblate.dump"

echo -e \\n start docker\\n
ssh -i id_rsa debian@$WEBLATE_HOST "cd /srv/weblate/ && sudo docker-compose start weblate"

echo -e \\n clean dumps\\n
rm -v weblate.dump.gz
ssh -i id_rsa debian@$WEBLATE_HOST "rm -v /home/debian/weblate.dump.gz /srv/weblate/weblate.dump"
ssh -i id_rsa debian@$WEBLATE_HOST "cd /srv/weblate/ && sudo docker-compose exec database rm -v /srv/weblate.dump"
ssh weblate.securedrop.club rm -v /home/ubuntu/weblate-docker/weblate.dump.gz

Then, goto http://$WEBLATE_HOST/admin/trans/subproject/ and revalidate each project for triggering the git hooks.

1 Like

Be careful to not launching it too early. Wait that http://$WEBLATE_HOST/ answer properly before launching the migration script. If not, I guess you may break django migrations launched at the first starting of the container.

Also, I thought: the script rely on DNS. We should use ip for hostnames. Then weblate.securedrop.club =>$OLD_WEBLATE_HOST

For the record, here is what I ended up doing for the migration:

cat /etc/hosts
54.36.100.196	weblate.securedrop.club
145.239.12.117	old-weblate.securedrop.club
ssh ubuntu@old-weblate.securedrop.club
cd /home/ubuntu/weblate-docker && sudo docker-compose exec --user postgres database pg_dump --clean --create weblate | gzip > weblate.dump.gz
scp ubuntu@old-weblate.securedrop.club:/home/ubuntu/weblate-docker/weblate.dump.gz .
scp weblate.dump.gz debian@weblate.securedrop.club
ssh debian@weblate.securedrop.club
cd /srv/weblate/
sudo docker-compose -f docker-compose-securedrop-club.yml stop weblate
zcat /home/debian/weblate.dump.gz > /srv/weblate/weblate.dump
sudo docker cp weblate.dump weblate_database_1:/srv
sudo docker-compose -f docker-compose-securedrop-club.yml exec --user postgres database psql -f /srv/weblate.dump
sudo docker-compose -f docker-compose-securedrop-club.yml start weblate