name: CD - Déploiement continu # Déploiement continu : après un push sur main, une fois la CI passée, # on se connecte en SSH au serveur de production et on met à jour l'application # (git reset, rebuild des conteneurs, migrations, mise en cache). # # L'application Laravel vit dans le sous-dossier WEB/ (monorepo) ; le conteneur # PHP de production s'appelle « cesizen-app » (cf. WEB/docker-compose.yml). # # 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) # - DEPLOY_PATH : chemin du dépôt cloné sur le serveur (ex: /home/sam/CESIZen) on: push: branches: [main] 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 "${{ secrets.DEPLOY_PATH }}" DEPLOY_UID=$(id -u) # L'utilisateur de déploiement doit posséder storage/ & bootstrap/cache # AVANT toute opération git (un déploiement précédent a pu les passer à # www-data, ce qui bloquerait git). chown via le conteneur (= root). docker exec -u 0 cesizen-app chown -R "${DEPLOY_UID}:www-data" \ /var/www/storage /var/www/bootstrap/cache || true # Récupération propre de la dernière version : on ÉCRASE toute modif # locale parasite (le serveur est une copie de déploiement, aucune # édition manuelle n'est censée y vivre). Les fichiers non suivis # (.env, cert.pem…) ne sont PAS touchés par reset --hard. git fetch origin main git reset --hard origin/main # Reconstruction et redémarrage des conteneurs (compose dans WEB/) cd WEB docker compose up -d --build # Migrations de la base de données (sans interaction) docker exec cesizen-app php artisan migrate --force # Mise en cache de la configuration et des routes (performances en prod) docker exec cesizen-app php artisan config:cache docker exec cesizen-app php artisan route:cache docker exec cesizen-app php artisan view:cache # Correction des permissions sur les dossiers écrits par Laravel. # Propriétaire = utilisateur de déploiement (pour les futurs git reset), # groupe = www-data avec écriture de groupe + setgid (héritage du groupe). docker exec -u 0 cesizen-app 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 {} +"