Een back-up maken van een Django site en deze terugzetten

Gegevens kunnen en zullen verloren gaan. In deze tutorial zullen we een back-up maken van de gegevens op onze Django / Wagtail-site en deze terugzetten.

16 juli 2020 15:00
Thema's: Deployment

Een back-up zou geen verdere rechtvaardiging behoeven: het is van cruciaal belang om niet alleen de inhoud van de site, maar ook gebruikersinformatie te bewaren. In deze tutorial zullen we een back-up maken van de inhoud van onze site inclusief alle mediabestanden met het pakket dbbackup en deze herstellen in een lege omgeving.

In deze tutorial maken we een back-up op onze productieomgeving. Je kunt dezelfde stappen volgen om een back-up van je ontwikkelomgeving te maken; het is een goed idee om het proces uit te proberen voordat je het op een live serveromgeving uitvoert. Activeer op je ontwikkelcomputer de virtuele omgeving en installeer dbbackup:

pip3 install django-dbbackup

Voeg het toe aan het requirements.txt-bestand en voeg de app toe aan INSTALLED_APPS:

'dbbackup',
DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage'
DBBACKUP_STORAGE_OPTIONS = {'location': os.path.join(BASE_DIR, '../backups')}

De eerste parameter verwijst naar de klasse die Django gebruikt om opslag van bestanden te implementeren. De tweede parameter stelt de locatie in voor back-ups. Je kunt elk pad gebruiken dat je wilt; de bovenstaande instelling plaatst back-ups in een map op hetzelfde niveau als het project. Maak deze map /backups. Het is niet nodig om de database te migreren. Push de wijzigingen naar je repository, ga naar de server, activeer je virtuele omgeving daar en haal de veranderingen op uit de repository. Maak ook de directory /backups op de server. Installeer het pakket, met dezelfde commando als hierboven, of met

pip3 install -r requirements.txt

Het maken van een back-up van de database van de site en van alle mediabestanden is nu eenvoudig:

python3 manage.py dbbackup
python3 manage.py mediabackup

Je zou nu twee nieuwe bestanden moeten zien met de back-ups in de directory /backups.

Deze bestanden kunnen we terugzetten naar de bestaande database (degene waarvan we een back-up hebben gemaakt) of naar een andere, hetzij op onze ontwikkelcomputer of op onze productieserver. Als je herstelt in een nieuwe omgeving, moet dbbackup daar uiteraard ook geïnstalleerd zijn en moet de locatie voor de back-ups correct zijn ingesteld. Het kopiëren van de back-upbestanden van de externe server naar de huidige directory kan worden gedaan met de scp-opdracht

scp usr_pet@165.22.199.4:/home/usr_pet/backups/\* .

waarbij usr_pet de geautoriseerde gebruiker is voor het project met de homedirectory /home/usr_pet en het IP-adres het adres van de server is. De backslash dient hier als een escape-karakter en is alleen nodig bij zsh.

Om de back-up in een nieuwe omgeving terug te zetten:

  • zorg ervoor dat de versie van PostgreSQL hetzelfde is als op de server. Je kunt de versie achter een psql-prompt controleren met: SELECT version(); Installeer anders de juiste versie (bijvoorbeeld op Mac met Homebrew) en start deze. Je moet dan eerst een databasegebruiker aanmaken (zie eerste tutorial).
  • maak een back-updatabase achter een psql-prompt: CREATE DATABASE db_pet_backup OWNER usr_pet;
  • maak een map aan: mkdir pet_backup && cd pet_backup
  • creëer er een virtuele omgeving in: python3 -m venv env && source env/bin/activate
  • kloon de repository: git clone https://github.com/prijme/pet.git
  • ga de projectmap in en installeer alle requirements: pip3 install -r requirements.txt
  • maak een local.py instellingenbestand met alle benodigde wachtwoorden (of kopieer het van de server); zorg ervoor dat de databasenaam db_pet_backup is
  • migreer de database: python3 manage.py migrate

Je hebt nu een lege site. Zet de directory /backups met de backupbestanden op hetzelfde niveau als de projectdirectory. Zet de gegevens en media terug met:

python3 manage.py dbrestore
python3 manage.py mediarestore

Daarmee is het terugzetten voltooid. Er zijn nog veel meer dingen die we aan onze site kunnen toevoegen, laat een reactie achter als je suggesties hebt!

Reageer op dit artikel (log eerst in of bevestig hieronder met naam en email)