Portfolio 2026-10-31

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

  1. Prérequis
  2. Création du workflow
  3. Création de l'utilisateur runner
  4. Installation du runner GitHub
  5. Installation du runner comme service
  6. Accès au dépôt GitHub
  7. Permissions du déploiement
  8. Test du déploiement
  9. 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.service fonctionnel.
  • Git installé sur le serveur.

Création du workflow

  1. Créer le dossier GitHub Actions dans le projet :
.github/workflows/
  1. Créer le fichier :
.github/workflows/deploy.yml
  1. 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
  1. Envoyer le workflow sur GitHub :
git add .
git commit -m "Ajout du déploiement automatique"
git push

Création de l'utilisateur runner

  1. Créer un compte dédié :
adduser github-runner
  1. Ajouter le compte au groupe Web :
usermod -aG www-data github-runner

Installation du runner GitHub

  1. Dans GitHub, ouvrir :
Settings > Actions > Runners > New self-hosted runner
  1. Choisir Linux et x64.

  2. Passer sur le compte dédié :

su - github-runner
  1. Exécuter les commandes Download et Configure fournies par GitHub.

  2. Conserver le groupe de runner Default et utiliser comme nom :

mprost-production
  1. Conserver le dossier de travail proposé par défaut.

Installation du runner comme service

  1. Revenir en root puis ouvrir le dossier du runner :
cd /home/github-runner/actions-runner
  1. Installer le service sous l'utilisateur github-runner :
./svc.sh install github-runner
  1. Démarrer le runner :
./svc.sh start
  1. 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

  1. Passer sur le compte du runner :
su - github-runner
  1. Créer une clé SSH dédiée :
ssh-keygen -t ed25519 -C "mprost-production-runner"
  1. Afficher uniquement la clé publique :
cat ~/.ssh/id_ed25519.pub
  1. Ajouter cette clé dans :
GitHub > Settings > Deploy keys > Add deploy key

Laisser Allow write access désactivé.

  1. Tester la connexion :
ssh -T git@github.com
  1. Tester la récupération du dépôt :
cd /var/www/mprost.fr
git pull --ff-only origin main

Permissions du déploiement

  1. 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
  1. Conserver le groupe sur les nouveaux dossiers :
find /var/www/mprost.fr -type d -exec chmod g+s {} \;
  1. 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
  1. Créer une règle sudo dédiée :
visudo -f /etc/sudoers.d/github-runner
  1. Autoriser uniquement le redémarrage du portfolio :
github-runner ALL=(root) NOPASSWD: /usr/bin/systemctl restart mprost
  1. Sécuriser le fichier sudoers :
chmod 0440 /etc/sudoers.d/github-runner
  1. Vérifier sa syntaxe :
visudo -c

Test du déploiement

  1. Modifier un fichier du portfolio sur le poste de développement.

  2. Envoyer la modification :

git add .
git commit -m "Mise à jour du portfolio"
git push
  1. Le workflow effectue automatiquement :
git pull
npm ci
npm run build
systemctl restart mprost
  1. 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