Continuous Integration & Delivery s Nette aplikáciou
- romiix.org
- Člen | 343
Pracujem na projekte, do ktorého denne pribúda viacero commitov. Aplikácia beží na jednom vlastnom serveri v DigitalOcean na ubuntu server 14.04 s apache2.
Aktuálny stav deploymentu:
- manuálny update DB
- spustenie bash skriptu:
- aktualizácia composer + bower
- naklonovanie GIT repa
- inštalácia závislostí
- rsync používateľských súborov z bežiacej verzie
- záloha DB
- duplikácia aktuálnej DB
- vygenerovanie
config.local.neon
- výmena symlinku
redis-cli flushall
- reštart apache
Cieľom je, aby bolo možné nahraním commitu do centrálneho repozitára
spustiť testy, zostaviť aplikáciu a sprístupniť ju bez straty spojení a
prihlásení a rozumne zálohovať.
Architektúru plánujem postaviť na dockeri a upraviť do nasledovnej
podoby:
1. server
- load balancer server
- redis session server
- CDN (možno je lepšie použiť KeyCDN)
2. server
- zostavená Nette aplikácia
3. server
- „MariaDB“
Nejaká služba (asi Codeship):
- zostaví aplikáciu
- otestuje
- zostaví docker kontajner s aplikáciou
- zduplikuje sa MariaDB server
- synchronizuje DB servre
- load balancer prestane posielať požiadavky na starú verziu
- starý DB server sa stopne, tým aj synchronizácia
Mám vôbec cieľovú architektúru vymyslenú správne?
Ako riešite migrácie DB štruktúry?
Aké služby a programy odporúčate?
Skúsenosti, odporúčania, úskalia, zdroje, … ?
Vďaka
- Luděk Veselý
- Člen | 29
Ako riešite migrácie DB štruktúry?
Pro migraci DB pouzivam nextras/migrations – funguji vyborne, zjednodusene to funguje tak, ze do jedne slozky nahravas soubory s SQL kodem, spustenim z konzole se spusti soubory, ktere jeste spusteny nebyly. Dalsi alternativy jsou PHINX (pise se PHP kod, me SQL), Doctrine Migrations a dalsi.
Aké služby a programy odporúčate?
Nastroju pro CI/CD je cela rada, zajimavy mi prijde GitLab CI, ktery je zdarma a je integrovan s GitLabem (take zdarma), nemam s nim zatim ale zadne zkusenosti. Alternativou k Codeship muze by Circle CI. Pouzit samozrejme pujde i proverene nastroje typu Jenkins, TravisCI, Bamboo.
Skúsenosti, odporúčania, úskalia, zdroje, … ?
Napisu spis konkretni poznamky k tomu co navrhujes. Pises nejprve otestovat a pak zbuildit kontejnery. Vyhodou Dockeru je prave to, ze muzes mit aplikaci v totoznym prostredi kdekoli, cili bych doporucil vytvorit kontejnery, ty otestovat a nasledne je pushnout pokud jsou testy ok. Duplikace DB mi prijde zbytecna, pokud zacnete pouzivat migrace, neni duvod aby zaloha DB blokovala deploy. Zalohu bych spis poustel nezavisle na buildu v nejakych intervalech a migrace psat tak, aby aplikace mohla bezet i nad budouci verzi databaze – usetrite si tim dost starosti. Totez s uzivatelskymi soubory – spis bych je drzel ve slozce mimo aplikaci, prijde mi zbytecne je neustale nekam kopirovat.
Ja pro orchestraci a deployment pouzivam Tutum, aktualne dostupny jako Docker Cloud, napsal jsem o tom i clanek. Kazdopadne je to slozitejsi tema. Jak zacit – napr nejdriv automaticky spoustet jen ten deploy skript, spustet ho v kontejneru, pak vytvorit Dockerfile jednotlive image.. Odkazy na zajimave clanky souvisejici s Dockerem posilaji newsletteru.