fb pixel

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!

Dodaj na LinkedIn
Mirosław Okoński
Przede wszystkim admin, potem webdeveloper choć kiedyś było odwrotnie. Obecnie Full Stack Engineer, CTO i System Architect. Po godzinach fan dobrych seriali, których nigdy nie ma czasu obejrzeć. Kawożłop. Miłośnik piwa i Metaxy. W czasie pomiędzy kontuzjami biega.