Większość z programistów aplikacji webowych wie, że transfer na serwer produkcyjny to często tzw. “pain-in-the-ass” (po polsku: źródło nieszczęścia). W tym poście opowiem trochę, o znanych mi sposobach przesyłania aplikacji na serwer produkcyjny.

1. FTP – File Transfer Protocol – jak wiadomo powszechnie, ftp to zło, i stąd wzięła się moja opinia na temat  tego tematu (patrz: źródło nieszczęscia). FTP jest wolny i niezbyt bezpieczny. Ale niestety niekiedy to jedyny dostępny sposób.

2. SFTP – SSH File Transfer Protocol – dużo szybszy od FTP, przyjemniej się go używa. Problem jest taki, że trzeba mieć dostęp do konta via SSH, a to nie zawsze jest możliwe. Na codzien wykorzystuję tą metodę w linuksowym Krusaderze, pod Windowsem można używać m.in. w WinSCP

3. SCP – Secure copy - uniksowy protokół do transmisji plików, również korzystający z SSH. Używam go dość często do transferu pojedynczych plików (tam i z powrotem). Można też kopiować całe foldery.

4. Rsync – służy do szybkiego przesyłu inkrementacyjnego. Jest to świetne narzędzie do transferu na produkcję (używane m.in. w Symfony, jako pake-task: Symfony sync production). Odtwarza identyczną kopię lokalnego folderu na serwerze, dodając, zmieniając, lub usuwając zbędne pliki. Trzeba jednak dość ostrożnie używać, bo nieopatrznie możemy pozbyć się cennych plików, takich jak np. upload na serwerze (którego nie ma u nas lokalnie). Chroni nas przed tym plik rsync_exclude, w którym podajemy katalogi lub reguły odnośnie wykluczonych z synchronizacji zasobów. Rsync również wymaga dostępu do shella.

5. SVN i inne systemy kontroli wersji – w założeniu nie są to narzędzia do synchronizacji, ale również można je do tego wykorzystać. Posiadając wersjonowane pliki w lokalnej kopii roboczej, bo zakomitowaniu zmian u siebie, robimy update na serwerze i jeśli na serwerze nic nie było zmieniane, to bez problemów zostanie odtworzony stan z naszej wersji roboczej (nie napotkamy na konflikty). Do svn niekonieczny jest SSH, można korzystać z protokołu svn:// lub http://, a na serwerze produkcyjnym używać frontendu webowego. Mimo wszystko jest to rozwiązanie “na około” i najwygodniej te operacje wykonuje się z shella.

To tylko kilka z znanych mi sposobów na bezbolesną synchronizację. Z tych 5 najwygodniejszy jest Rsync oraz SVN. Jestem ciekaw czy macie jakieś inne sposoby na transfer na produkcję i czy są one wydajniejsze i szybsze niż wyżej wymienione.