Déployer sur un serveur
NOTE: L’approche proposée repose sur GitHub et Vultr, il serait possible d’ajuster pour un autre fournisseur de serveurs. Dans Vultr, on peut mettre en place un serveur avec Docker (2vCPUs / 4Gb / Shared CPU) pour les besoins d’un prototype.
Pré-requis
- Un dépôt GitHub avec un
docker-compose.yml
- Un serveur Ubuntu (accessible par SSH)
- Docker et Docker Compose installés sur le serveur
- Un utilisateur non root avec les droits Docker sur le serveur (on utilise
deploy
)
Quelques commandes à connaître
On doit se connecter avec root
par terminal sur le serveur.
Ajouter un utilisateur deploy
avec accès à Docker
# Ajouter l'utilisateur 'deploy' au groupe docker
sudo usermod -aG docker deploy
Créer un répertoire pour héberger le projet
# Créer le dossier du projet
sudo mkdir -p /home/deploy/myproject
# Donner les droits à l'utilisateur 'deploy'
sudo chown -R deploy:deploy /home/deploy/myproject
Vous pouvez choisir de déployer dans un autre répertoire, il faudra ajuster les scripts.
Étapes pour créer un déploiement automatique
1. Générer une clé SSH
Sur une machine locale (ou un environnement sécurisé) :
ssh-keygen -t rsa -b 4096 -C "github-actions" -f github-actions-key
❗ Ne pas mettre de passphrase.
2. Copier la clé publique sur ton serveur
ssh-copy-id -i ~/.ssh/github-actions-key.pub deploy@your-server-ip
Vérifie ensuite que tu peux te connecter :
ssh -i ~/.ssh/github-actions-key deploy@your-server-ip
3. Ajouter la clé privée dans GitHub
- Va dans ton dépôt GitHub → ⚙️
Settings
→Secrets and variables
→Actions
- Crée un secret nommé
VPS_KEY
- Colle le contenu de
github-actions-key
(clé privée) - Crée un secret nommé
VPS_USER
- Écris le nom de l’utilisateur choisi (ex:
deploy
) - Crée un secret nommé
VPS_HOST
- Écris l’IP du serveur choisi (celui que l’on retrouve ci-dessus :
your-server-ip
)
4. Créer le workflow GitHub Actions
Dans ton dépôt GitHub, crée le fichier .github/workflows/deploy.yml
:
name: Deploy to VPS
on:
workflow_dispatch:
# push:
# branches:
# - main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Copy files to VPS via SSH
uses: appleboy/scp-action@v0.1.4
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
source: "."
target: "/home/deploy/myproject"
- name: Run Docker Compose on VPS
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_KEY }}
script: |
cd /home/deploy/myproject
docker compose pull
docker compose up -d --build
Remplacez
/home/deploy/myproject
par celui de votre serveur.
Résultat attendu
Je dispose d’une action manuelle qui va déclencher le workflow
. Toutefois si je souhaite automatiser le déploiement suite à une mise à jour sur la branche main
, je peux utiliser le déclencheur:
name: Deploy to VPS
on:
push:
branches:
- main
À chaque besoin, GitHub Actions :
- Se connecte à ton serveur via SSH
- Met à jour le code
- Redémarre proprement les conteneurs avec Docker Compose