Ga naar hoofdinhoud

Online zetten: een back-up terugzetten

Een back-up die je nooit terugzette, is een gok. Oefen het daarom op je laptop, in WSL, waar niets stuk kan: je zet de back-up van je server uit les 37 terug in je site op gastenboek.localhost.

Terug in het volume​

De kopie staat in ~/backup-gastenboek op je laptop. Typ in WSL:

cd ~/gastenboek
docker compose stop
docker compose cp ~/backup-gastenboek/data/. gastenboek:/app/data
docker compose start
docker compose exec -u root gastenboek chown -R app /app/data

De /. achter data betekent: de bestanden uit de map, niet de map zelf. Anders komen ze in /app/data/data, waar je site niet zoekt. De databases van de server vervangen die van je laptop: wat je in WSL in je gastenboek had gezet, is daarna weg.

De laatste regel is nodig, en je ziet pas later dat hij ontbreekt. Wat docker compose cp in een container zet, is niet van app. Je site draait als app (les 19) en mag zulke bestanden lezen, maar niet veranderen. exec -u root doet één commando als root in de draaiende container, en chown -R app geeft de databases terug aan app.

Op een server​

Op een server gaat het net zo. Zet de map eerst met scp -r ~/backup-gastenboek sam@203.0.113.10:backup terug op de server, en typ daar dezelfde regels met ~/backup/data/. in plaats van ~/backup-gastenboek/data/.. Op een nieuwe server zet je ook .env terug in ~/gastenboek en de map traefik in je thuismap, in plaats van ze opnieuw te maken.

Controlevraag
Je zet de back-up terug zonder de laatste regel. Je opent je site, en de berichten van de server staan er. Een bezoeker schrijft een nieuw bericht. Wat gebeurt er?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Er gaat iets mis​

attempt to write a readonly database​

sqlite3.OperationalError: attempt to write a readonly database

Oorzaak: je zette een back-up terug, en de databases zijn niet van app. Je site leest ze wel, maar schrijven mag niet.

Oplossing: geef ze terug aan app, terwijl de container draait:

docker compose exec -u root gastenboek chown -R app /app/data

Je site is leeg na het terugzetten​

Oorzaak: de bestanden staan in /app/data/data: je typte ~/backup-gastenboek/data zonder /. erachter.

Oplossing: kijk met docker compose exec gastenboek ls /app/data wat er staat. Zet het opnieuw terug, nu met /., en gooi de map data in de container weg met docker compose exec -u root gastenboek rm -r /app/data/data.

Opdrachten​

Opdracht 1: Run - Terug in de tijd​

Oefen nog een keer, nu met je eigen site in WSL. Registreer op gastenboek.localhost het account voor, en maak een back-up naar ~/proef. Registreer daarna het account na, en zet de back-up terug. Kun je nog inloggen als na? En lukt een nieuw account daarna?

Antwoord
cd ~/gastenboek
mkdir ~/proef
docker compose stop
docker compose cp gastenboek:/app/data ~/proef/data
docker compose start

Registreer nu na in de browser, en zet daarna terug:

docker compose stop
docker compose cp ~/proef/data/. gastenboek:/app/data
docker compose start
docker compose exec -u root gastenboek chown -R app /app/data

Inloggen als voor lukt, als na niet meer: de databases zijn weer zoals op het moment van de back-up. Het account daarna komt erbij. Liet je de laatste regel weg, dan gaf dat een 500.

Door naar les 39: bijwerken en opruimen.