8.1 KiB
🚀 Guide de Déploiement sur Portainer
📋 Prérequis
- Portainer installé et accessible
- Traefik configuré avec le réseau
portfolio - Git installé sur le serveur Docker
- Accès à votre repository GitHub
🔧 Option 1 : Déploiement via Stack Portainer (Recommandé)
Étape 1 : Connexion à Portainer
- Ouvrez votre interface Portainer (ex: https://portainer.votredomaine.com)
- Connectez-vous avec vos identifiants
Étape 2 : Créer une nouvelle Stack
- Dans le menu de gauche, cliquez sur "Stacks"
- Cliquez sur "+ Add stack"
- Donnez un nom :
portfolio-website
Étape 3 : Configuration de la Stack
Option A - Déploiement depuis Git (Recommandé) :
-
Sélectionnez "Repository" sous "Build method"
-
Remplissez les champs :
- Repository URL :
https://github.com/kinou-p/portfolio-website - Repository reference :
refs/heads/main - Compose path :
docker-compose.yml
- Repository URL :
-
Si votre repository est PRIVÉ :
Méthode 1 - Personal Access Token (Recommandé) :
- ✅ Cochez "Authentication"
- Username :
kinou-p - Personal Access Token : Votre token GitHub (ex:
ghp_xxxxxxxxxxxx)
Pour créer un token :
- GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate new token → Cochez
repo→ Generate
Méthode 2 - SSH Deploy Key (Plus sécurisé) :
- Repository URL :
git@github.com:kinou-p/portfolio-website.git - Authentication : SSH
- Collez votre clé SSH privée
Pour créer une deploy key :
ssh-keygen -t ed25519 -C "portainer" -f ~/.ssh/portainer_deploy # Ajoutez la clé publique (.pub) dans GitHub → Settings → Deploy keys -
Si votre repository est PUBLIC :
- Pas besoin d'authentification
- Laissez "Authentication" décoché
Option B - Copier/Coller le docker-compose.yml :
- Sélectionnez "Web editor"
- Copiez-collez le contenu du fichier
docker-compose.yml
Étape 4 : Variables d'environnement (optionnel)
Cliquez sur "Advanced mode" et ajoutez si nécessaire :
GTM_ID=GTM-5V6TCG4C
NODE_ENV=production
Étape 5 : Déployer
- Vérifiez que le réseau
portfolioexiste - Cliquez sur "Deploy the stack"
- Attendez la fin du build (peut prendre 2-5 minutes)
Étape 6 : Vérification
- Allez dans "Containers"
- Vérifiez que
portfolio-websiteest "running" (vert) - Cliquez sur le container pour voir les logs
- Testez votre site : https://alexandre-pommier.com
🔧 Option 2 : Déploiement via Container Portainer
Étape 1 : Construire l'image en local
# Sur votre machine locale
cd /path/to/portfolio-website
docker build -t portfolio-website:latest .
# Tag pour votre registry (optionnel)
docker tag portfolio-website:latest votre-registry/portfolio-website:latest
# Push vers votre registry
docker push votre-registry/portfolio-website:latest
Étape 2 : Créer le container dans Portainer
- Dans Portainer, allez dans "Containers"
- Cliquez sur "+ Add container"
- Remplissez les champs :
Configuration de base :
- Name :
portfolio-website - Image :
portfolio-website:latest(ouvotre-registry/portfolio-website:latest) - Always pull the image : Coché
- Restart policy :
Unless stopped
Network :
- Network : Sélectionnez
portfolio
Labels (pour Traefik) :
Cliquez sur "+ add label" et ajoutez :
traefik.enable=true
traefik.http.routers.portfolio-website.rule=Host(`alexandre-pommier.com`) || Host(`www.alexandre-pommier.com`)
traefik.http.routers.portfolio-website.entrypoints=websecure
traefik.http.routers.portfolio-website.tls=true
traefik.http.routers.portfolio-website.tls.certresolver=letsencrypt
traefik.http.services.portfolio-website.loadbalancer.server.port=80
traefik.http.routers.portfolio-website-http.rule=Host(`alexandre-pommier.com`) || Host(`www.alexandre-pommier.com`)
traefik.http.routers.portfolio-website-http.entrypoints=web
traefik.http.routers.portfolio-website-http.middlewares=redirect-to-https
traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true
- Cliquez sur "Deploy the container"
🔄 Mise à jour du Portfolio
Via Stack (Option 1)
- Allez dans "Stacks"
- Cliquez sur votre stack
portfolio-website - Cliquez sur "Pull and redeploy" ou "Git pull and redeploy"
- Confirmez l'action
Via Webhook (Automatique - Recommandé)
-
Dans votre stack, allez dans "Webhooks"
-
Cliquez sur "+ Add webhook"
-
Donnez un nom :
github-auto-deploy -
Copiez l'URL générée (ex:
https://portainer.com/api/webhooks/xxx) -
Sur GitHub :
- Allez dans Settings > Webhooks > Add webhook
- Collez l'URL Portainer
- Content type :
application/json - Événements :
Just the push event - Active : Coché
- Cliquez sur "Add webhook"
Maintenant, chaque git push sur main déclenchera automatiquement un redéploiement ! 🎉
📊 Monitoring et Logs
Voir les logs en temps réel
- Allez dans "Containers"
- Cliquez sur
portfolio-website - Cliquez sur "Logs"
- Activez "Auto-refresh"
Statistiques de performance
- Dans le container, cliquez sur "Stats"
- Visualisez CPU, RAM, Network en temps réel
Health Check
Le container inclut un health check qui vérifie :
- Toutes les 30 secondes
- Si Nginx répond sur le port 80
- 3 tentatives avant de marquer comme "unhealthy"
🛠️ Commandes utiles
Reconstruire l'image après changement
# Si vous utilisez Stack avec Git
# Portainer fait tout automatiquement avec "Git pull and redeploy"
# Si vous gérez manuellement
docker-compose build --no-cache
docker-compose up -d
Voir les containers actifs
docker ps
Accéder aux logs
docker logs portfolio-website -f
Redémarrer le container
docker restart portfolio-website
Supprimer et recréer
docker-compose down
docker-compose up -d --build
🔒 Sécurité
Variables sensibles
Si vous avez des secrets (API keys, etc.), utilisez les Secrets de Portainer :
- Allez dans "Secrets"
- Créez un nouveau secret
- Référencez-le dans votre stack avec
secrets:
Limiter les ressources
Dans le docker-compose, ajoutez :
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
✅ Checklist de déploiement
- Portainer accessible et connecté
- Réseau
portfoliocréé - Traefik configuré et fonctionnel
- Repository GitHub accessible
- Docker-compose.yml à jour sur le repo
- Stack créée dans Portainer
- Container démarré avec succès
- Site accessible via HTTPS
- Webhook configuré pour auto-deploy
- Logs vérifiés (pas d'erreurs)
- Health check en vert
🚨 Troubleshooting
Le container ne démarre pas
- Vérifiez les logs :
docker logs portfolio-website - Vérifiez que le réseau
portfolioexiste - Vérifiez que le port 80 n'est pas déjà utilisé
Le site n'est pas accessible
- Vérifiez que Traefik tourne :
docker ps | grep traefik - Vérifiez les labels Traefik dans Portainer
- Vérifiez les logs Traefik :
docker logs traefik - Vérifiez le DNS :
nslookup alexandre-pommier.com
Le build échoue
- Vérifiez l'accès au repository GitHub
- Vérifiez que le Dockerfile est présent
- Vérifiez les logs de build dans Portainer
- Essayez un build manuel :
docker build -t portfolio-website .
Le certificat SSL ne se génère pas
- Vérifiez que les ports 80 et 443 sont ouverts
- Vérifiez la configuration du résolveur Let's Encrypt dans Traefik
- Vérifiez les logs Traefik pour les erreurs ACME
📞 Support
Si vous rencontrez des problèmes :
- Consultez les logs du container
- Vérifiez la documentation Traefik
- Vérifiez la documentation Portainer
- Ouvrez une issue sur GitHub
Bonne chance avec votre déploiement ! 🚀