# ============================================================ # CD — Déploiement Continu # Déclenche un déploiement uniquement sur push main. # # Le runner Gitea Actions tourne directement sur le serveur. # Aucun SSH nécessaire — les commandes s'exécutent localement. # ============================================================ name: CD on: push: branches: - main jobs: deploy: name: 🚀 Déploiement production runs-on: ubuntu-latest steps: # ── 1. Mise à jour du code ─────────────────────────────── - name: 🔄 Mise à jour du code run: | set -e cd /data/docker/landing-api echo "🔄 Pull depuis Gitea..." git fetch origin main git reset --hard origin/main # ── 2. Build de l'image Docker ─────────────────────────── - name: 🐳 Build image Docker run: | set -e cd /data/docker/landing-api echo "🏗️ Build de l'image de production..." docker compose -f compose.prod.yaml build --no-cache app # ── 3. Démarrage / redémarrage des containers ──────────── - name: 🚀 Déploiement des containers run: | set -e cd /data/docker/landing-api echo "🚀 Redémarrage des services..." docker compose -f compose.prod.yaml up -d --remove-orphans # ── 4. Migrations base de données ──────────────────────── - name: 🗄️ Migrations base de données run: | set -e cd /data/docker/landing-api echo "⏳ Attente que la BDD soit prête..." sleep 5 echo "🗄️ Exécution des migrations..." docker compose -f compose.prod.yaml exec -T app php artisan migrate --force # ── 5. Optimisations Laravel ───────────────────────────── - name: ⚙️ Optimisations Laravel run: | set -e cd /data/docker/landing-api echo "⚙️ Mise en cache des configs, routes, vues..." docker compose -f compose.prod.yaml exec -T app php artisan config:cache docker compose -f compose.prod.yaml exec -T app php artisan route:cache docker compose -f compose.prod.yaml exec -T app php artisan view:cache docker compose -f compose.prod.yaml exec -T app php artisan event:cache echo "🔄 Redémarrage des workers..." docker compose -f compose.prod.yaml exec -T app php artisan queue:restart # ── 6. Nettoyage des anciennes images ──────────────────── - name: 🧹 Nettoyage Docker run: | docker image prune -f # ── 7. Résultat ────────────────────────────────────────── - name: 🎉 Déploiement réussi if: success() run: | echo "✅ Application déployée avec succès !" echo "🔗 Commit : ${{ github.sha }}" echo "👤 Par : ${{ github.actor }}" - name: ❌ Déploiement échoué if: failure() run: | echo "❌ Le déploiement a échoué — rollback recommandé" echo "🔗 Commit : ${{ github.sha }}" # Affiche les logs des containers en erreur pour debug cd /data/docker/landing-api docker compose -f compose.prod.yaml logs --tail=50