Déploiement automatique du portfolio avec GitHub Actions
Mise en place d'un runner GitHub Actions auto-hébergé pour déployer automatiquement un portfolio Next.js sur Debian après chaque push sur la branche main.
Sommaire
- Prérequis
- Création du workflow
- Création de l'utilisateur runner
- Installation du runner GitHub
- Installation du runner comme service
- Accès au dépôt GitHub
- Permissions du déploiement
- Test du déploiement
- Troubleshooting
Prérequis
- Portfolio déjà fonctionnel sur Debian.
- Dépôt GitHub contenant le projet.
- Application disponible dans
/var/www/mprost.fr. - Service systemd
mprost.servicefonctionnel. - Git installé sur le serveur.
Création du workflow
- Créer le dossier GitHub Actions dans le projet :
.github/workflows/
- Créer le fichier :
.github/workflows/deploy.yml
- Ajouter le workflow :
name: Deploy mprost.fr
on:
push:
branches:
- main
jobs:
deploy:
runs-on: self-hosted
steps:
- name: Deploy production
run: |
cd /var/www/mprost.fr
git pull --ff-only origin main
npm ci
npm run build
sudo systemctl restart mprost
- Envoyer le workflow sur GitHub :
git add .
git commit -m "Ajout du déploiement automatique"
git push
Création de l'utilisateur runner
- Créer un compte dédié :
adduser github-runner
- Ajouter le compte au groupe Web :
usermod -aG www-data github-runner
Installation du runner GitHub
- Dans GitHub, ouvrir :
Settings > Actions > Runners > New self-hosted runner
-
Choisir Linux et x64.
-
Passer sur le compte dédié :
su - github-runner
-
Exécuter les commandes Download et Configure fournies par GitHub.
-
Conserver le groupe de runner
Defaultet utiliser comme nom :
mprost-production
- Conserver le dossier de travail proposé par défaut.
Installation du runner comme service
- Revenir en root puis ouvrir le dossier du runner :
cd /home/github-runner/actions-runner
- Installer le service sous l'utilisateur
github-runner:
./svc.sh install github-runner
- Démarrer le runner :
./svc.sh start
- Vérifier son état :
./svc.sh status
Le runner doit apparaître Idle dans GitHub lorsqu'il attend un travail.
Accès au dépôt GitHub
- Passer sur le compte du runner :
su - github-runner
- Créer une clé SSH dédiée :
ssh-keygen -t ed25519 -C "mprost-production-runner"
- Afficher uniquement la clé publique :
cat ~/.ssh/id_ed25519.pub
- Ajouter cette clé dans :
GitHub > Settings > Deploy keys > Add deploy key
Laisser Allow write access désactivé.
- Tester la connexion :
ssh -T git@github.com
- Tester la récupération du dépôt :
cd /var/www/mprost.fr
git pull --ff-only origin main
Permissions du déploiement
- Donner au groupe Web les droits nécessaires sur le projet :
chown -R admin:www-data /var/www/mprost.fr
chmod -R g+rwX /var/www/mprost.fr
- Conserver le groupe sur les nouveaux dossiers :
find /var/www/mprost.fr -type d -exec chmod g+s {} \;
- Autoriser Git à utiliser ce dépôt avec le compte du runner :
sudo -u github-runner -H git config --global --add safe.directory /var/www/mprost.fr
- Créer une règle sudo dédiée :
visudo -f /etc/sudoers.d/github-runner
- Autoriser uniquement le redémarrage du portfolio :
github-runner ALL=(root) NOPASSWD: /usr/bin/systemctl restart mprost
- Sécuriser le fichier sudoers :
chmod 0440 /etc/sudoers.d/github-runner
- Vérifier sa syntaxe :
visudo -c
Test du déploiement
-
Modifier un fichier du portfolio sur le poste de développement.
-
Envoyer la modification :
git add .
git commit -m "Mise à jour du portfolio"
git push
- Le workflow effectue automatiquement :
git pull
npm ci
npm run build
systemctl restart mprost
- Vérifier le résultat dans l'onglet Actions du dépôt GitHub.
Troubleshooting
Le workflow n'apparaît pas dans GitHub Actions
Cause rencontrée : deploy.yml était placé directement dans .github.
Emplacement correct :
.github/workflows/deploy.yml
Git refuse le dépôt
Erreur :
fatal: detected dubious ownership in repository at '/var/www/mprost.fr'
Solution :
sudo -u github-runner -H git config --global --add safe.directory /var/www/mprost.fr
Host key verification failed
Solution : tester une première connexion SSH avec l'utilisateur du runner :
su - github-runner
ssh -T git@github.com
Vérifier l'empreinte SSH affichée avant de l'accepter.
Permission denied (publickey)
Cause rencontrée : le compte github-runner ne possédait pas de clé autorisée sur le dépôt privé.
Solution : créer une clé SSH dédiée au runner et ajouter sa clé publique dans les Deploy keys du dépôt GitHub.
Erreur sudoers sur les permissions
Erreur :
/etc/sudoers.d/github-runner: bad permissions, should be mode 0440
Solution :
chmod 0440 /etc/sudoers.d/github-runner
visudo -c