# CI/CD pour déployer Kirby Automatiser le déploiement de Kirby CMS avec GitLab CI ou Forgejo Actions (alternatives libres). **🆓 Philosophie :** Ce guide privilégie les solutions **libres et open-source** : - **Forgejo** : Alternative libre à GitHub, auto-hébergeable - **GitLab** : Solution mature avec version Community (libre) - Pas de dépendance aux services propriétaires --- ## 📋 Table des matières 1. [Concepts de base](#concepts-de-base) 2. [GitLab CI (SSH/rsync)](#gitlab-ci-sshrsync) 3. [Forgejo Actions (SSH/rsync)](#forgejo-actions-sshrsync) 4. [Forgejo Actions (FTP)](#forgejo-actions-ftp) 5. [Image Docker optimisée](#image-docker-optimisée-pour-kirby) 6. [Configuration des secrets](#configuration-des-secrets) 7. [Troubleshooting](#troubleshooting) --- ## Concepts de base ### Workflow typique ``` 1. Push sur main/master ↓ 2. CI/CD se déclenche ↓ 3. Stage BUILD - Installer les dépendances (Composer) - Optimiser (autoloader, assets) ↓ 4. Stage DEPLOY - Se connecter au VPS (SSH ou FTP) - Synchroniser les fichiers - Exclure les dossiers sensibles (cache, sessions, accounts) ↓ 5. ✅ Site déployé ``` ### Prérequis VPS - VPS configuré → [vps-setup-rapide.md](vps-setup-rapide.md) - Site Kirby fonctionnel → [kirby-vps-deploy.md](kirby-vps-deploy.md) - Clé SSH configurée (pour déploiement SSH) --- ## GitLab CI (SSH/rsync) ### Avantages - ✅ Rapide (rsync ne transfère que les modifications) - ✅ Sécurisé (SSH) - ✅ Contrôle total (permissions, exclusions) - ✅ Logs détaillés ### Configuration complète **.gitlab-ci.yml** à la racine du projet : ```yaml stages: - build - deploy variables: COMPOSER_ALLOW_SUPERUSER: "1" # ===== STAGE BUILD ===== build_prod: stage: build only: - main # Déclencher uniquement sur la branche main image: composer:2 # Image officielle Composer script: # Installer les dépendances Kirby - composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-gd artifacts: # Fichiers à passer au stage deploy paths: - vendor/ - kirby/ - site/ - assets/ - content/ - media/ - index.php - .htaccess expire_in: 1 hour # Les artifacts expirent après 1h # ===== STAGE DEPLOY ===== deploy_prod: stage: deploy image: alpine:latest only: - main dependencies: - build_prod # Récupère les artifacts du build before_script: # Installer rsync et SSH - apk add --no-cache rsync openssh # Configurer la clé SSH - mkdir -p ~/.ssh - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 - chmod 600 ~/.ssh/id_ed25519 # Configuration SSH (désactiver la vérification de l'host) - | cat > ~/.ssh/config < ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 cat > ~/.ssh/config < /tmp/lftp-script.txt <