csrdelft / csrdelft.nl

De webstek van Civitas Studiosorum Reformatorum, wordt onderhouden door de PubCie.
https://csrdelft.nl
17 stars 11 forks source link

Deploy verbeteren #758

Open qurben opened 4 years ago

qurben commented 4 years ago

Sinds Symfony moet de cache opwarmen bij iedere nieuwe versie en dit moet eigenlijk op Syrinx gebeuren omdat het erg environment specifiek is. Hierdoor duurt deployen langer en is de stek langer offline. Dit kan beter.

De aanpak hier beschreven kan 'Atomaire' updates doen, oftewel in enkele milliseconden een nieuwe versie neerzetten.

Geïnspireerd door o.a.: https://modess.io/2015/01/29/atomic-deploy-for-php-applications/

Het idee is dat er een aantal mappen zijn op Syrinx

  1. builds/ met submappen voor verschillende versies. Hier wordt alle code van een versie neergezet en de cache wordt opgewarmd. De huidige versie en twee of drie oudere versies staan hier.
  2. shared/ hier staat data die altijd beschikbaar moet zijn, foto's, wiki inhoud, sessies, oftewel de data/ map en de htdocs/wiki/data/ map, meuk in htdocs/plaetjes/ enzo en alle .env.local bestanden.
  3. latest/ een symlink naar de laatste versie in de build/ map.

Het deploy proces zou er dan als volgt uit zien

  1. Download de nieuwe versie in builds/<versie>
  2. Warm de cache van deze instance op
  3. Controleer of migraties uitgevoerd moeten worden (php bin/console doctrine:migrations:up-to-date)
    • Zo ja, zet de nieuwe stek in onderhoudsmodus
  4. Switch de latest/ symlink naar de nieuwe versie
  5. Als er geen migraties waren nu klaar
  6. Als er wel migraties zijn voer deze uit en haal de stek uit onderhoudsmodus

Bij het teruggaan naar een oude versie moet er voor het terug gaan gecheckt worden of er migraties gerollbacked moeten worden.

De volgende dingen moeten nog gedaan worden / uitgezocht worden

  1. Uitzoeken hoe je goed een rollback doet afhankelijk van naar welke versie gerollbacked wordt.
  2. Mogelijk maken om alle data mappen los te trekken uit de root van de repo.
  3. De server instellen om een nieuwe map als entrypoint te zien.
qurben commented 4 years ago

Migraties doen:

Check eerst of op de huidige versie alle migraties netjes zijn uitgevoerd (php bin/console doctrine:migrations:up-to-date) als dit niet het geval is is er iets mis en moet er iemand naar kijken.

Vraag aan nieuwe en aan de huidige versie wat de laatste migratie is (php bin/console doctrine:migrations:latest) als hier een verschil tussen is moeten er blijkbaar migraties gerund worden. Zet dan de boel in onderhoudsmodus.

Check of de nieuwe versie zich bevindt in de lijst van de huidige versie, doe dan een rollback naar deze versie (php bin/console doctrine:migrations:migrate <versie>)

Switch naar de nieuwe versie.

Als er net niet migraties gerund zijn doe dan nu migreren naar de laatste versie (php bin/console doctrine:migrations:migrate <versie>)

Haal de boel uit onderhoudsmodus.

qurben commented 4 years ago

Symfony docs: https://symfony.com/doc/current/deployment.html#using-build-scripts-and-other-tools

https://deployer.org/ ziet er nice uit.