Prosty deploy przez GITa
|
Temat wypychania aplikacji na produkcję jest dosyć szeroki. Mamy sporo możliwości, choćby korzystając z takiego oprogramowania jak chyba najpopularniejsze Capistrano, Mina, czy wspomagając się narzędziami typu Ansible. Ale nie zawsze potrzebujemy strzelać z armaty do muchy. Przy mini projektach przesyłanych na naszego VPSa można to zrobić w banalnie prosty sposób przy wykorzystaniu GITa, którego i tak używamy.
Żeby było ciekawiej GITa do deploymentu można użyć na kilka sposobów ale dzisiaj opowiem wam o tym, moim zdaniem, najprostszym z możliwych.
Założenia
Przyjmuję, że mamy na localhoście jakiś mały projekt, który nie potrzebuje żadnych wymyślnych czynności i w zasadzie jego cały deploy sprowadza się do przesłania plików na serwer. Projekt oczywiście jest w gicie - nie wyobrażam sobie, że ktoś jeszcze w obecnych czasach pracuje bez tego. Z drugiej strony mamy swojego VPSa lub hosting z dostępem do SSH i GITa.
I cały proces polega na tym, że na VPS robimy nowe repozytorium GITa, w którym podpinamy pod hooka akcję przenoszącą kod na docelowe miejsce. Z kolei z localhosta wypychamy kod na to repozytorium i tyle. Magia dzieje się w tle 😉 Zobaczmy jakie to jest proste w implementacji.
Konfiguracja na VPS
Tutaj potrzebujemy dwa miejsca: jedno to docelowy katalog odpalany przez serwer. Przyjmijmy, że to jest /home/webmastah/app/public_html
. Drugie to miejsce gdzie założymy sobie nasze nowe repozytorum GITA - /home/webmastah/repo
.
Przechodzimy do tego katalogu i zakładamy owe repo:
cd /home/webmastah/repo
mkdir webmastah.git && cd webmastah.git
git init --bare
Opcja --bare
oznacza, że nie chcemy trzymać w nim bieżącej kopii do pracy - wszak nie będziemy nic tam robić. Polecam dokładniejsze wyjaśnienie na StackOverflow.
Tworzymy hooka
W utworzonym repozytorium GITa znajdziesz katalog hooks
. W środku będzie kilka przykładowych plików dla danych akcji. GIT ma ich kilka, m.in. pre-commit
, pre-rebase
, update
, dokładniejsze wyjaśnienie znajdziesz w dokumentacji. Nas interesuje post-receive
który jak sama nazwa wskazuje jest odpalany w momencie jak zawartość PUSHa w komplecie dotarła do repozytorium.
Ok, wejdźmy do tego katalogu i stwórzmy naszego hooka.
cd hooks
cat > post-receive
Użyj swojego ulubionego edytora lub jeżeli nie wiesz jak to robić użyj powyższego cat > post-receive
. Po klepnięciu entera będziesz mógł wpisać zawartość do tego pliku, a całość zakończyć poprzez skrót control-d
.
Do pliku wstaw:
#!/bin/sh
git --work-tree=/home/webmastah/app/public_html --git-dir=/home/webmastah/repo/webmastah.git checkout -f
Gdzie --work-tree
wskazuje na nasz katalog gdzie odpalana jest aplikacja, a --git-dir
na nasze utworzone przed chwilą repo.
Po wyjściu nie zapomnij nadać odpowiednich praw do tego pliku chmod +x post-receive
Tym sposobem za każdym razem jak to repozytorium otrzyma kod automatycznie przeniesie go na docelowe miejsce z naszą aplikacją.
Konfiguracja na localhoście
Przechodzimy do katalogu z naszym projektem i dodajemy do GITa nasze zewnętrzne repozytorium:
git remote add live ssh://user@mydomain.com/home/webmastah/repo/webmastah.git
live
tutaj jest dowolną nazwą, równie dobrze może to być dev
czy prod
. Zresztą w ten sam sposób możesz skonfigurować sobie środowisko testowe i później w zależności od potrzeb pchać zmiany w odpowiednie miejsce.
I robimy deploya
Działamy standardowo z naszym projektem. W momencie jak będziemy chcieli nasze zmiany wypchnąć na produkcję robimy po prostu git push live
i gotowe. Prawda, że proste?
Wersja Video
Wkrótce video tutorial z całego tego procesu krok po kroku. Chcesz zobaczyć? SUBSKRYBUJ!