Między serwerem developerskim -> repozytorium -> serwerem produkcyjnym
Serwer developerski
git add . git commit -m "Nowy moduł Projects" git push -u origin master
Repo dla projektu firma. Userid git:git
/home/git/repos/firma.git
Serwer produkcyjny
cd /var/www/firma git pull origin master
Użycie hook’a – flow produkcyjny
[komputer dewelopera] git push origin master | [serwer git: /home/git/repos/firma.git] hook post-receive odpala się automatycznie | [serwer prod: /var/www/firma] pliki zaktualizowane, serwis zrestartowany
Utworzenie hook’a aktualizującego automatycznie system produkcyjny /var/www/firma.pl
nano /home/git/repos/firma.git/hooks/post-receive
#!/bin/bash WORK_TREE=/var/www/firma GIT_DIR=/home/git/repos/firma.git PHP=/usr/bin/php8.4 echo "==> Aktualizacja plików..." git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f master cd $WORK_TREE echo "==> Instalacja zależności Composer..." composer install --no-dev --optimize-autoloader --no-interaction echo "==> Czyszczenie cache CakePHP..." $PHP bin/cake cache clear_all echo "==> Ustawienie uprawnień..." sudo chown -R www-data:www-data $WORK_TREE sudo chmod -R 755 $WORK_TREE sudo chmod -R 775 $WORK_TREE/tmp sudo chmod -R 775 $WORK_TREE/logs echo "==> Restart PHP-FPM..." sudo systemctl reload php8.4-fpm echo "==> Wdrożenie zakończone pomyślnie."
Dodanie uprawnień do projektu produkcyjnego /var/www/firma
# sudo visudo
git ALL=(ALL) NOPASSWD: /bin/systemctl reload php8.4-fpm git ALL=(ALL) NOPASSWD: /bin/chown -R www-data:www-data /var/www/firma git ALL=(ALL) NOPASSWD: /bin/chmod -R 755 /var/www/firma git ALL=(ALL) NOPASSWD: /bin/chmod -R 775 /var/www/firma/tmp git ALL=(ALL) NOPASSWD: /bin/chmod -R 775 /var/www/firma/logs
System developerski: .gitignore – koniecznie musi być dodane
/vendor/ /tmp/ /logs/ config/app_local.php