name: CD - Déploiement continu # Déploiement continu : après un push sur master, une fois la CI passée, # on se connecte en SSH au serveur de production et on met à jour l'application # (git pull, rebuild des conteneurs, migrations, mise en cache). # # Secrets à définir dans Gitea (Settings > Actions > Secrets du dépôt) : # - SSH_HOST : IP ou domaine du serveur # - SSH_USER : utilisateur SSH # - SSH_PRIVATE_KEY : clé privée SSH autorisée sur le serveur # - SSH_PORT : port SSH (optionnel, 22 par défaut) on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - name: Déploiement sur le serveur via SSH uses: appleboy/ssh-action@v1.2.0 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SSH_PORT }} script: | set -e cd /home/sam/mon-app-laravel # Récupération de la dernière version du code git pull origin master # Reconstruction et redémarrage des conteneurs docker compose up -d --build # Migrations de la base de données (sans interaction) docker exec laravel_php php artisan migrate --force # Mise en cache de la configuration et des routes (performances en prod) docker exec laravel_php php artisan config:cache docker exec laravel_php php artisan route:cache docker exec laravel_php php artisan view:cache # Correction des permissions sur les dossiers écrits par Laravel. # Laravel (www-data) doit pouvoir écrire dans storage/ et # bootstrap/cache, MAIS l'utilisateur SSH doit rester propriétaire # pour que les futurs "git pull/reset" ne soient pas bloqués (sinon # les .gitignore suivis passent à www-data et git échoue). # => propriétaire = utilisateur de déploiement, groupe = www-data, # avec écriture de groupe + setgid (héritage du groupe www-data). DEPLOY_UID=$(id -u) docker exec -u 0 laravel_php sh -c "\ chown -R ${DEPLOY_UID}:www-data /var/www/storage /var/www/bootstrap/cache && \ chmod -R ug+rwX /var/www/storage /var/www/bootstrap/cache && \ find /var/www/storage /var/www/bootstrap/cache -type d -exec chmod g+s {} +"