Skip to content

KB: Brekz PrestaShop – Testomgeving actualiseren vanuit Productie

Terug naar klant: Brekz

Voer deze procedure uit vóór een testsessie om de Brekz PrestaShop Testomgeving te synchroniseren met actuele Productiedata.

De procedure bestaat uit twee onderdelen:

  1. Database synchronisatie — kopieer de Productie-database naar de Testomgeving
  2. 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_configuration
  • ps_configuration_kpi
  • ps_configuration_kpi_lang
  • ps_configuration_lang
  • ps_shop_url
  • ps_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_orders
  • ps_order_detail, ps_order_history, ps_order_invoice
  • ps_guest, ps_connections, ps_log, ps_mail
  • dpd_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.