KB: Brekz PrestaShop – Testomgeving actualiseren vanuit Productie¶
Voer deze procedure uit vóór een testsessie om de Brekz PrestaShop Testomgeving te synchroniseren met actuele Productiedata.
De procedure bestaat uit twee onderdelen:
- Database synchronisatie — kopieer de Productie-database naar de Testomgeving
- Static assets synchronisatie — kopieer de static assets van Productie naar de Testomgeving
Test database wordt volledig overschreven
Na het uitvoeren van deze procedure bevat de Testomgeving een kopie van de Productiedatabase. Testdata die eerder in de Testomgeving stond gaat verloren (tenzij een backup is gemaakt in stap 1).
Onderdeel 1 – Database synchronisatie¶
Scripts: brekz-group/brekz-prestashop – db-dev/update-test-by-prod
Servers¶
| Server | Rol | Gebruik |
|---|---|---|
FL10SQL002 |
Read-only replica Productie | Alleen dumps |
FL09SQL001 |
Master Read/Write Testomgeving | Dumps + imports |
Testomgeving URLs¶
| Land | URL |
|---|---|
| NL | https://brekznl.ftest.nl |
| BE | https://brekzbe.ftest.nl |
| DE | https://brekzde.ftest.nl |
| FR | https://brekzfr.ftest.nl |
| AT | https://brekzat.ftest.nl |
| IT | https://brekzit.ftest.nl |
| DK | https://brekzdk.ftest.nl |
| CH | https://brekzch.ftest.nl |
Eenmalige setup¶
Stap 1 – SSH config instellen voor FL09SQL002¶
FL09SQL002 is geen publiek resolvebare hostnaam en moet daarom als host toegevoegd worden aan je eigen ~/.ssh/config. Verbinding loopt via Cloudflare Warp.
nano ~/.ssh/config
Voeg toe:
Host FL09SQL002
HostName <1password>
User <user>
IP-adres
Het IP-adres van FL09SQL002 staat gedocumenteerd in Brekz Hosting Dedicated Servers.
Stap 2 – Scripts deployen naar de server¶
Voer dit uit vanaf je workstation vanuit de root van de brekz-prestashop git repo:
./db-dev/server-deploy.sh fkwakkenbos FL09SQL002
Dit synct de scriptsets update-accept-by-prod/ en update-test-by-prod/ naar je home-directory op FL09SQL002.
Stap 3 – MySQL client credentials configureren op FL09SQL002¶
ssh FL09SQL002
nano ~/.my.cnf
Gebruik db-dev/my.cnf.template als basis. Wachtwoorden zijn beschikbaar in 1Password: "Brekz - FL09SQL002 - \<naam> Admin".
[client]
user=<naam>
password=<wachtwoord>
[mysqldump]
quick
[mysqldump@BR-7160-prod]
host=127.0.0.1
user=<naam>
password=ZIE-1PASSWORD
[client@BR-7160-prod]
host=127.0.0.1
user=<naam>
password=ZIE-1PASSWORD
[mysqldump@BR-7160-test]
host=127.0.0.1
user=<naam>
password=ZIE-1PASSWORD
[client@BR-7160-test]
host=127.0.0.1
user=<naam>
password=ZIE-1PASSWORD
Stel daarna de juiste permissies in:
chmod 600 ~/.my.cnf
Verificeer de verbindingen:
mysql --defaults-group-suffix=@BR-7160-prod -e "SELECT 'Connection OK';"
mysql --defaults-group-suffix=@BR-7160-test -e "SELECT 'Connection OK';"
Scripts updaten na een git pull¶
./db-dev/server-deploy.sh fkwakkenbos FL09SQL002
Uitvoeren¶
SSH naar FL09SQL002 en start de orchestrator:
ssh FL09SQL002
bash ~/presta-db-update-test-by-prod/presta-db-update-test-by-prod.sh
Het script is interactief en vraagt per stap om bevestiging:
| Stap | Omschrijving | Verplicht |
|---|---|---|
| 1 | Volledige backup van de Test database | Optioneel (sterk aanbevolen) |
| 2 | Dump van config-tabellen van Test die bewaard blijven | Ja |
| 3 | Dump alle tabellen van Productie + import naar Test | Ja |
| 4 | Update URLs en herstel config-data in Test | Ja |
Bevestiging bij overschrijven
Voordat de Test database daadwerkelijk wordt overschreven, vraagt het script om de tekst JA ZEKER in te voeren als extra bevestiging.
Wat bewaart het script van de Testomgeving?¶
De volgende configuratietabellen worden vóór de import gedumpt en daarna teruggezet, zodat testomgeving-specifieke instellingen bewaard blijven:
ps_configurationps_configuration_kpips_configuration_kpi_langps_configuration_langps_shop_urlps_ddp_account_config
Welke Productietabellen worden genegeerd?¶
Tabellen met persoonsgegevens of grote datatabellen die niet relevant zijn voor testen worden overgeslagen:
addresses,cart_products,carts,order_products,orders,products,products_channable- Archief- en tijdelijke tabellen:
_archive_carts,_archive_customers,_archive_orders,_tmp_product_special_note
Welke tabellen worden leeg (structuur-only) geïmporteerd?¶
Tabellen met klant-, bestelling-, en sessiondata worden wél aangemaakt maar leeg gelaten. Dit omvat o.a.:
ps_customer,ps_address,ps_cart,ps_ordersps_order_detail,ps_order_history,ps_order_invoiceps_guest,ps_connections,ps_log,ps_maildpd_pakketten,dpd_delisprint,copernica_profiles- En diverse andere log-, sync- en statistieketabellen
Anonimisatie¶
Na de import worden company reviews geanonimiseerd:
UPDATE `ps_trustpilot_company_reviews` SET `consumer_displayname` = 'John Doe';
Noodherstel¶
Als er iets fout gaat ná de import, biedt het orchestrator-script automatisch aan om de backup terug te zetten. Je kunt ook handmatig herstellen:
bash ~/presta-db-update-test-by-prod/presta-db-update-test-by-prod-restore.sh ~/brekz_backups/<backup_file>.sql
Of direct via MySQL:
mysql --defaults-group-suffix=@BR-7160-test brekz_prestashop_test < ~/brekz_backups/<backup_file>.sql
Backups worden opgeslagen in ~/brekz_backups/ op FL09SQL002.
Losse scripts¶
| Script | Doel |
|---|---|
presta-db-update-test-by-prod-backup.sh |
Volledige backup van de Test database |
presta-db-update-test-by-prod-restore.sh |
Herstel backup naar Test database |
presta-db-update-test-by-prod-data-from-test-to-keep.sh |
Dump config-tabellen van Test |
presta-db-update-test-by-prod-dump-from-prod.sh |
Dump Productie database per tabel |
presta-db-update-test-by-prod-update-test.sh |
Importeer Productie dumps + update URLs in Test |
Onderdeel 2 – Static assets synchronisatie¶
Scripts: brekz-group/brekz-fail-over-setup – prestashop-test-static-assets
De brekz (Productie) user pusht periodiek de static assets naar de Hetzner Storage Box. Dit script haalt de Productie static assets op van de Storage Box en zet ze in de Testomgeving:
Hetzner Storage Box Active host (FL09BRE002)
brekz/domains/www.brekz.nl/shared/web/ → /home/brekz-test/domains/brekznl.ftest.nl/shared/web/
Active host
Deze procedure moet altijd worden uitgevoerd op de Active host. Op dit moment is dat: FL09BRE002
Bij een fail-over naar FL10BRE001 moeten de eenmalige setup-stappen herhaald worden op die server.
Eenmalige setup¶
Voer de eenmalige setup uit als user brekz-test op de Active host (FL09BRE002).
Configuratie¶
| Parameter | Waarde |
|---|---|
| User | brekz-test |
| Home directory | /home/brekz-test/ |
| SSH config host | hetzner-storagebox |
| Storage Box username | u400407-sub4 |
| Storage Box hostname | u400407.your-storagebox.de |
Stap 1 – SSH key pair aanmaken¶
Log in op de Active host als user brekz-test:
ssh-keygen
Wanneer gevraagd:
- Path:
/home/brekz-test/.ssh/hetzner-storagebox - Passphrase: leeg laten
Stap 2 – SSH config instellen¶
nano ~/.ssh/config
Voeg toe:
Host hetzner-storagebox
User u400407-sub4
HostName u400407.your-storagebox.de
IdentityFile /home/brekz-test/.ssh/hetzner-storagebox
Port 23
Stap 3 – Permissies instellen¶
chmod 0700 ~/.ssh
chmod 0600 ~/.ssh/*
Stap 4 – SSH public key toevoegen aan Hetzner Storage Box¶
cat ~/.ssh/hetzner-storagebox.pub | \
ssh -p23 u400407-sub4@u400407.your-storagebox.de install-ssh-key
Voer het Storage Box wachtwoord in wanneer gevraagd. Hierna is wachtwoordloze SSH-toegang actief.
Stap 5 – Repository clonen¶
git clone git@github.com:brekz-group/brekz-fail-over-setup.git
Uitvoeren¶
Na de eenmalige setup kan het script op elk gewenst moment worden uitgevoerd als user brekz-test op de Active host:
bash ~/brekz-fail-over-setup/prestashop-test-static-assets/rsync-pull-brekz-test.sh
Logs worden weggeschreven naar /var/log/rsync/brekz-test/ (bewaarperiode: 30 dagen).
Handmatig rsync uitvoeren¶
rsync -avz --delete --mkpath --stats \
--exclude="config/settings.inc.php" \
--exclude="config/defines_custom.inc.php" \
--exclude="phinx.yml" \
--exclude="shell/queue_worker/.env" \
--exclude="shell/queue_worker/config/beanstalk.php" \
--exclude="shell/queue_worker/config/db.php" \
--exclude="shell/queue_worker/config/logistics.php" \
hetzner-storagebox:brekz/domains/www.brekz.nl/shared/web/ \
/home/brekz-test/domains/brekznl.ftest.nl/shared/web/
Uitgesloten bestanden
De bovenstaande bestanden worden niet overschreven omdat ze omgevingsspecifieke configuratie bevatten die niet door Productiedata mag worden overschreven.