Deployment stratégie pre CMS SilverStripe

Zverejnil Pali dňa 31.03.2011 |

Tagy: , , ,

V článku Automatizácia činností a zdieľanie kódu medzi projektami bolo rozpísané, ako pripraviť projekt na lokálnom PC, no nezaoberal sa tým, ako projekt nahrať na produkčný server. Celé SilverStripe je vysoko modulárne a k inštalácii na produkčný server je v zásade nutné len nahrať všetky súbory na server a "buildnuť" projekt (za predpokladau, že si databázu predom nahráte). Stretol so sa s týmito postupmi:

FTP

FTP bude asi jedinou možnosťou, ak budete nahrávať na klasické zdieľané webhostingy. Aj keď som už počul o možnosti rozbehania GIT-u na zdieľaných hostingoch, nemal som to možnosť vyskúšať.

Jedinou výhodou FTP prenosu je to, že s týmto protokolom pracujete dlhšie a je vám známy. Tu to však končí. FTP prenos je podľa môjho názoru pomalý, updaty projektu sú problematické. Problematické sú preto, lebo pri upgrade nemôžu zostať na serveri súbory, ktoré sa v novej verzii nenachádzajú. Tým pádom je nutné všetky upgradované moduly kompletne zmazať a nahradiť novými. To trvá (sapphire má niekoľko MB), čiže väčšinou je nutná práca v noci, kde sa skryje výpadok v trvaní cca 10 - 20 minút (ak sa upgraduje Core). Existuje cesta, že sa nahrávajú len nové súbory (podľa dátumu) alebo len súbory so zmenenou veľkosťou atď., no tieto nepovažujem za 100% spoľahlivé (stalo sa mi, že som zmenil v config-u 0 na 1, veľkosť sa mi nezmenila a súbor nebol považovaný za nový).

RSYNC

Synchronizácia lokálnej verzie s tou na produkčnom serveri pomocou aplikácie rsync je moja obľúbená a donedávna najviac používaná. K tomu, aby ste mohli rsync používať však potrebujete SSH prístup na server a bežiaci rsync (tak na lokálnom stroji ako aj na serveri). Čiže toto je veľké obmedzenie, nepoznám klasický webhosting, ktorý toto povoľuje, čiže budete potrebovať niečo na mieru (server/špeciálny webhosting). Výhodou je však rýchlosť, spoľahlivosť a pohodlnosť použitia (stačí si zaznamenať príkaz a po zmene na lokále spustiť v termináli...)

Príklad: rsync -ravl --perms --exclude="silverstripe-cache" --exclude="assets" /www/projekty/xyz/public_html/ user@195.XXX.XX.XXX:/home/xyz/public_html/ --delete -n

Príkaz mirroruje obsah adresára /home/xyz/public_html/ na serveri 195.XXX.XX.XXX s obsahom adresára /www/projekty/xyz/public_html/ na lokálnom počítača. Do synchronizácie sa nezahŕňajú adresáre assets a silverstripe-cache, voľba --delete zabezpečí, že sa zmažú súbory zo servera, ktoré nie sú na lokále. Voľba -n vykoná príkaz "nanečisto", vypíše, čo sa vykoná. Ak je všetko OK, môžete príkaz spustiť "naostro", čiže bez "-n".

Treba podotknúť, že takéto niečo funguje len vtedy, ak robíte zmeny na serveri len synchronizáciou s lokálom, nakoľko synchronizujeme len jedným smerom. Akékoľvek zmeny na serveri, ktoré nie sú na lokále, budú stratené!

GIT

Jediným dôvodom, prečo už nepoužívam pohodlný rsync je ten, že sme začali na projektoch pracovať v tímoch a tým pádom prišla rana na GIT. Čiže všetky projekty máme uložené v repozitároch. Aj tu by pre deployment bolo možné použiť rsync, tu by sa však pred deploymentom musel projekt sťahovať z repozitára do lokálu a následne nahrávať na server. GIT nám však umožňuje pull-nuť aktuálnu verziu priamo z produkčného servera.


Komentáre

silverstripesk:

Websupport podporuje rsync na beznych webhostoch a funguje...

komentárový systém: Disqus