Synchronizacja git

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