Automatyczna aktualizacja websajtu a Git
Posted on Wed 22 September 2021 in Hacks (wannabe) • 2 min read
Chodzi o to, żeby po wprowadzeniu zmian w repozytorium, zmiany te propagowały się na website na zdalnym serwerze.
Nie jest zupełna automatyzacja bo połączenie VPN nawiązywane jest ręcznie. Korzystam już od dawna ze skryptu, który podnosi VPN-a ale w tym rozwiązaniu jeszcze tego nie zaimplementowałem.
W całym tym bałaganie korzystam z hooka i repozytorium pośredniczącego. Hook, jakby ktoś nie wiedział, to skrypt odpalający jakieś akcje przed lub po wykonaniu czegoś w repozytorium, w tym przypadku będzie to post-receive czyli aktualizacji repo.
Na serwerze docelowym w homedirze swojego użytkownika (tu: paczor) tworzę folder o nazwie np. "intersite" i inicjuję w nim repozytorium pośredniczące git-a:
mkdir ~/inersite cd ~/intersite git init --bare
Na tym samym serwerze pliki website'u znajdują się w defaultowej lokalizacji Apache'a na Ubuntu czyli /var/www/html, w tym przypadku niech będzie to folder o nazwie "website":
sudo mkdir /var/www/html/website
Dodaję swojego użytkownika do grupy www-data:
sudo usermod -a -G www-data paczor
Nadaję grupie www-data uprawnienia do zapisu w folderze website'u:
sudo chmod g+w /var/www/html/website
W repozytorium pośredniczącym tworzę hook post-receive:
cat ~/intersite/hooks/post-receive↲ #!/bin/sh git --work-tree=/var/www/html/website --git-dir=/home/paczor/intersite -f mojwebsite
Jeszcze nadanie bitu wykonywalności dla skryptu:
chmod +x ~/intersite/hooks/post-receive
W lokalnym repozytorium, czyli tym w którym pracuję, czyli np. na laptopie w VIM-ie czy Visual Code - może ich być kilka, na różnych komputerach - muszę dodać to nowe repozytorum pośredniczące:
git remote add mojwebsite ssh://paczor@ip_serwera/home/paczor/intersite
Po wypchnięciu zmian na główne repozytorium (często Github [GitGułag]):
git push
wypycham zmiany na repozytorum pośredniczące:
git push mojwebsite
i wtedy dzieje się cała magia czyli uruchamiany jest skrypt post-receive, który aktualizuje folder /var/www/html/webiste.