docker stack via git
This commit is contained in:
parent
88a4fddf17
commit
fa5b9135ae
20
.env.portainer.example
Normal file
20
.env.portainer.example
Normal file
@ -0,0 +1,20 @@
|
||||
# Variables d'environnement pour Portainer
|
||||
# Copiez ces variables dans la section "Environment variables" de votre Stack Portainer
|
||||
|
||||
# Google Tag Manager ID
|
||||
GTM_ID=GTM-5V6TCG4C
|
||||
|
||||
# Environnement (production/development)
|
||||
NODE_ENV=production
|
||||
|
||||
# Domaine principal (utilisé par Traefik)
|
||||
PRIMARY_DOMAIN=alexandre-pommier.com
|
||||
SECONDARY_DOMAIN=www.alexandre-pommier.com
|
||||
|
||||
# Configuration Nginx (optionnel)
|
||||
NGINX_WORKER_PROCESSES=auto
|
||||
NGINX_WORKER_CONNECTIONS=1024
|
||||
|
||||
# Configuration du cache (optionnel)
|
||||
CACHE_STATIC_ASSETS=31536000
|
||||
CACHE_HTML=no-cache
|
||||
315
PORTAINER_DEPLOYMENT.md
Normal file
315
PORTAINER_DEPLOYMENT.md
Normal file
@ -0,0 +1,315 @@
|
||||
# 🚀 Guide de Déploiement sur Portainer
|
||||
|
||||
## 📋 Prérequis
|
||||
|
||||
1. Portainer installé et accessible
|
||||
2. Traefik configuré avec le réseau `portfolio`
|
||||
3. Git installé sur le serveur Docker
|
||||
4. Accès à votre repository GitHub
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Option 1 : Déploiement via Stack Portainer (Recommandé)
|
||||
|
||||
### Étape 1 : Connexion à Portainer
|
||||
1. Ouvrez votre interface Portainer (ex: https://portainer.votredomaine.com)
|
||||
2. Connectez-vous avec vos identifiants
|
||||
|
||||
### Étape 2 : Créer une nouvelle Stack
|
||||
1. Dans le menu de gauche, cliquez sur **"Stacks"**
|
||||
2. Cliquez sur **"+ Add stack"**
|
||||
3. Donnez un nom : `portfolio-website`
|
||||
|
||||
### Étape 3 : Configuration de la Stack
|
||||
|
||||
**Option A - Déploiement depuis Git (Recommandé) :**
|
||||
|
||||
1. Sélectionnez **"Repository"** sous "Build method"
|
||||
2. Remplissez les champs :
|
||||
- **Repository URL** : `https://github.com/kinou-p/portfolio-website`
|
||||
- **Repository reference** : `refs/heads/main`
|
||||
- **Compose path** : `docker-compose.yml`
|
||||
|
||||
3. **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 :
|
||||
```bash
|
||||
ssh-keygen -t ed25519 -C "portainer" -f ~/.ssh/portainer_deploy
|
||||
# Ajoutez la clé publique (.pub) dans GitHub → Settings → Deploy keys
|
||||
```
|
||||
|
||||
4. **Si votre repository est PUBLIC** :
|
||||
- Pas besoin d'authentification
|
||||
- Laissez "Authentication" décoché
|
||||
|
||||
**Option B - Copier/Coller le docker-compose.yml :**
|
||||
|
||||
1. Sélectionnez **"Web editor"**
|
||||
2. 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
|
||||
|
||||
1. Vérifiez que le réseau `portfolio` existe
|
||||
2. Cliquez sur **"Deploy the stack"**
|
||||
3. Attendez la fin du build (peut prendre 2-5 minutes)
|
||||
|
||||
### Étape 6 : Vérification
|
||||
|
||||
1. Allez dans **"Containers"**
|
||||
2. Vérifiez que `portfolio-website` est **"running"** (vert)
|
||||
3. Cliquez sur le container pour voir les logs
|
||||
4. Testez votre site : https://alexandre-pommier.com
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Option 2 : Déploiement via Container Portainer
|
||||
|
||||
### Étape 1 : Construire l'image en local
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
1. Dans Portainer, allez dans **"Containers"**
|
||||
2. Cliquez sur **"+ Add container"**
|
||||
3. Remplissez les champs :
|
||||
|
||||
**Configuration de base :**
|
||||
- **Name** : `portfolio-website`
|
||||
- **Image** : `portfolio-website:latest` (ou `votre-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
|
||||
```
|
||||
|
||||
4. Cliquez sur **"Deploy the container"**
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Mise à jour du Portfolio
|
||||
|
||||
### Via Stack (Option 1)
|
||||
|
||||
1. Allez dans **"Stacks"**
|
||||
2. Cliquez sur votre stack `portfolio-website`
|
||||
3. Cliquez sur **"Pull and redeploy"** ou **"Git pull and redeploy"**
|
||||
4. Confirmez l'action
|
||||
|
||||
### Via Webhook (Automatique - Recommandé)
|
||||
|
||||
1. Dans votre stack, allez dans **"Webhooks"**
|
||||
2. Cliquez sur **"+ Add webhook"**
|
||||
3. Donnez un nom : `github-auto-deploy`
|
||||
4. Copiez l'URL générée (ex: `https://portainer.com/api/webhooks/xxx`)
|
||||
|
||||
5. 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
|
||||
|
||||
1. Allez dans **"Containers"**
|
||||
2. Cliquez sur `portfolio-website`
|
||||
3. Cliquez sur **"Logs"**
|
||||
4. Activez **"Auto-refresh"**
|
||||
|
||||
### Statistiques de performance
|
||||
|
||||
1. Dans le container, cliquez sur **"Stats"**
|
||||
2. 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
```
|
||||
|
||||
### Accéder aux logs
|
||||
|
||||
```bash
|
||||
docker logs portfolio-website -f
|
||||
```
|
||||
|
||||
### Redémarrer le container
|
||||
|
||||
```bash
|
||||
docker restart portfolio-website
|
||||
```
|
||||
|
||||
### Supprimer et recréer
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
1. Allez dans **"Secrets"**
|
||||
2. Créez un nouveau secret
|
||||
3. Référencez-le dans votre stack avec `secrets:`
|
||||
|
||||
### Limiter les ressources
|
||||
|
||||
Dans le docker-compose, ajoutez :
|
||||
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '0.5'
|
||||
memory: 512M
|
||||
reservations:
|
||||
cpus: '0.25'
|
||||
memory: 256M
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist de déploiement
|
||||
|
||||
- [ ] Portainer accessible et connecté
|
||||
- [ ] Réseau `portfolio` créé
|
||||
- [ ] 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
|
||||
|
||||
1. Vérifiez les logs : `docker logs portfolio-website`
|
||||
2. Vérifiez que le réseau `portfolio` existe
|
||||
3. Vérifiez que le port 80 n'est pas déjà utilisé
|
||||
|
||||
### Le site n'est pas accessible
|
||||
|
||||
1. Vérifiez que Traefik tourne : `docker ps | grep traefik`
|
||||
2. Vérifiez les labels Traefik dans Portainer
|
||||
3. Vérifiez les logs Traefik : `docker logs traefik`
|
||||
4. Vérifiez le DNS : `nslookup alexandre-pommier.com`
|
||||
|
||||
### Le build échoue
|
||||
|
||||
1. Vérifiez l'accès au repository GitHub
|
||||
2. Vérifiez que le Dockerfile est présent
|
||||
3. Vérifiez les logs de build dans Portainer
|
||||
4. Essayez un build manuel : `docker build -t portfolio-website .`
|
||||
|
||||
### Le certificat SSL ne se génère pas
|
||||
|
||||
1. Vérifiez que les ports 80 et 443 sont ouverts
|
||||
2. Vérifiez la configuration du résolveur Let's Encrypt dans Traefik
|
||||
3. Vérifiez les logs Traefik pour les erreurs ACME
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Si vous rencontrez des problèmes :
|
||||
|
||||
1. Consultez les logs du container
|
||||
2. Vérifiez la documentation Traefik
|
||||
3. Vérifiez la documentation Portainer
|
||||
4. Ouvrez une issue sur GitHub
|
||||
|
||||
---
|
||||
|
||||
Bonne chance avec votre déploiement ! 🚀
|
||||
102
PORTAINER_QUICK_START.md
Normal file
102
PORTAINER_QUICK_START.md
Normal file
@ -0,0 +1,102 @@
|
||||
# 🚀 Déploiement Rapide sur Portainer
|
||||
|
||||
## ⚡ Méthode Express (3 minutes)
|
||||
|
||||
### 1️⃣ Connectez-vous à Portainer
|
||||
|
||||
Ouvrez votre Portainer : `https://votre-portainer.com`
|
||||
|
||||
### 2️⃣ Créez une Stack
|
||||
|
||||
1. Menu **Stacks** → **+ Add stack**
|
||||
2. Nom : `portfolio-website`
|
||||
3. Sélectionnez **"Repository"**
|
||||
|
||||
### 3️⃣ Configuration Git
|
||||
|
||||
**Pour repository PUBLIC :**
|
||||
```
|
||||
Repository URL: https://github.com/kinou-p/portfolio-website
|
||||
Reference: refs/heads/main
|
||||
Compose path: docker-compose.yml
|
||||
Authentication: ❌ Décoché
|
||||
```
|
||||
|
||||
**Pour repository PRIVÉ :**
|
||||
```
|
||||
Repository URL: https://github.com/kinou-p/portfolio-website
|
||||
Reference: refs/heads/main
|
||||
Compose path: docker-compose.yml
|
||||
Authentication: ✅ Coché
|
||||
Username: kinou-p
|
||||
Token: ghp_votre_token_github
|
||||
```
|
||||
|
||||
**Comment obtenir un token GitHub :**
|
||||
1. GitHub → Settings → Developer settings → Personal access tokens
|
||||
2. Generate new token (classic)
|
||||
3. Cochez `repo` → Generate
|
||||
4. Copiez le token (commence par `ghp_`)
|
||||
|
||||
### 4️⃣ Déployez
|
||||
|
||||
Cliquez sur **"Deploy the stack"** → Attendez 2-5 min → C'est fait ! ✅
|
||||
|
||||
### 5️⃣ Vérifiez
|
||||
|
||||
Allez sur : `https://alexandre-pommier.com` 🎉
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Mise à jour automatique
|
||||
|
||||
### Configurez le Webhook GitHub
|
||||
|
||||
1. Dans Portainer : **Stacks** → `portfolio-website` → **Webhooks** → **+ Add webhook**
|
||||
2. Copiez l'URL générée
|
||||
3. Sur GitHub : **Settings** → **Webhooks** → **Add webhook**
|
||||
4. Collez l'URL Portainer
|
||||
5. Événement : `push`
|
||||
|
||||
Maintenant chaque `git push` met à jour automatiquement votre site ! 🚀
|
||||
|
||||
---
|
||||
|
||||
## 📖 Documentation complète
|
||||
|
||||
Voir [PORTAINER_DEPLOYMENT.md](./PORTAINER_DEPLOYMENT.md) pour :
|
||||
- Guide détaillé étape par étape
|
||||
- Troubleshooting
|
||||
- Configuration avancée
|
||||
- Monitoring et logs
|
||||
|
||||
---
|
||||
|
||||
## 🆘 Problèmes ?
|
||||
|
||||
### Le site ne s'affiche pas
|
||||
|
||||
1. Vérifiez les logs : Portainer → **Containers** → `portfolio-website` → **Logs**
|
||||
2. Vérifiez que Traefik fonctionne : `docker ps | grep traefik`
|
||||
3. Vérifiez le DNS : `nslookup alexandre-pommier.com`
|
||||
|
||||
### Le build échoue
|
||||
|
||||
1. Vérifiez l'accès au repository GitHub
|
||||
2. Vérifiez les logs de build dans Portainer
|
||||
3. Vérifiez que le Dockerfile existe dans le repo
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist
|
||||
|
||||
- [ ] Portainer accessible
|
||||
- [ ] Réseau `portfolio` créé (`docker network create portfolio`)
|
||||
- [ ] Traefik configuré et actif
|
||||
- [ ] Stack créée dans Portainer
|
||||
- [ ] Site accessible en HTTPS
|
||||
- [ ] Webhook configuré (optionnel mais recommandé)
|
||||
|
||||
---
|
||||
|
||||
**Besoin d'aide ?** Consultez la doc complète ou les logs ! 📚
|
||||
291
SECURITY_GUIDE.md
Normal file
291
SECURITY_GUIDE.md
Normal file
@ -0,0 +1,291 @@
|
||||
# 🔐 Sécurisation du Repository pour Portainer
|
||||
|
||||
## ⚖️ Public vs Privé : Que choisir ?
|
||||
|
||||
### ✅ **Repository PUBLIC** (Recommandé pour un portfolio)
|
||||
|
||||
**Avantages :**
|
||||
- ✅ Déploiement plus simple (pas d'authentification)
|
||||
- ✅ Pas de gestion de tokens
|
||||
- ✅ Bon pour votre CV (montre votre code)
|
||||
- ✅ Open source = crédibilité
|
||||
|
||||
**Points d'attention :**
|
||||
- ⚠️ Ne JAMAIS commit de secrets (API keys, mots de passe)
|
||||
- ⚠️ Utiliser des variables d'environnement pour les configs sensibles
|
||||
- ⚠️ Vérifier le `.gitignore` avant de push
|
||||
|
||||
**Fichiers à NE JAMAIS commit :**
|
||||
```
|
||||
.env
|
||||
.env.local
|
||||
.env.production
|
||||
secrets/
|
||||
*.key
|
||||
*.pem
|
||||
config/database.yml
|
||||
```
|
||||
|
||||
### 🔒 **Repository PRIVÉ** (Si vous avez du code propriétaire)
|
||||
|
||||
**Avantages :**
|
||||
- 🔒 Code source non visible publiquement
|
||||
- 🔒 Contrôle d'accès granulaire
|
||||
- 🔒 Adapté aux projets clients
|
||||
|
||||
**Inconvénients :**
|
||||
- Configuration plus complexe
|
||||
- Besoin de gérer des tokens/clés SSH
|
||||
|
||||
---
|
||||
|
||||
## 🔑 **Méthodes d'authentification pour dépôt PRIVÉ**
|
||||
|
||||
### **Méthode 1 : Personal Access Token (PAT) - Plus simple**
|
||||
|
||||
#### Étape 1 : Créer le token sur GitHub
|
||||
|
||||
1. Connectez-vous à GitHub
|
||||
2. Settings → Developer settings → Personal access tokens → Tokens (classic)
|
||||
3. **Generate new token (classic)**
|
||||
4. Configuration :
|
||||
- **Note** : `Portainer Portfolio Deploy`
|
||||
- **Expiration** : `90 days` ou `No expiration` (moins sécurisé)
|
||||
- **Scopes** : Cochez uniquement :
|
||||
- ✅ `repo` (Full control of private repositories)
|
||||
5. **Generate token**
|
||||
6. ⚠️ **COPIEZ le token immédiatement** (commence par `ghp_`)
|
||||
- Vous ne pourrez plus le voir après !
|
||||
|
||||
#### Étape 2 : Utiliser le token dans Portainer
|
||||
|
||||
1. Dans Portainer : Stacks → + Add stack
|
||||
2. Repository URL : `https://github.com/kinou-p/portfolio-website`
|
||||
3. ✅ Cochez **"Authentication"**
|
||||
4. Remplissez :
|
||||
```
|
||||
Username: kinou-p
|
||||
Personal Access Token: ghp_xxxxxxxxxxxxxxxxxxxx
|
||||
```
|
||||
|
||||
#### Étape 3 : Sécuriser le token
|
||||
|
||||
- ⚠️ Ne partagez JAMAIS ce token
|
||||
- 🔄 Régénérez-le régulièrement (tous les 3 mois)
|
||||
- 📝 Stockez-le dans un gestionnaire de mots de passe (1Password, Bitwarden)
|
||||
|
||||
---
|
||||
|
||||
### **Méthode 2 : SSH Deploy Key - Plus sécurisé**
|
||||
|
||||
#### Étape 1 : Générer une paire de clés SSH
|
||||
|
||||
Sur votre serveur Docker :
|
||||
|
||||
```bash
|
||||
# Générer une clé SSH dédiée
|
||||
ssh-keygen -t ed25519 -C "portainer-deploy-portfolio" -f ~/.ssh/portainer_portfolio
|
||||
|
||||
# NE METTEZ PAS de passphrase (appuyez sur Entrée 2 fois)
|
||||
|
||||
# Vérifier que les clés sont créées
|
||||
ls -la ~/.ssh/portainer_portfolio*
|
||||
# Vous devez voir :
|
||||
# portainer_portfolio (clé privée)
|
||||
# portainer_portfolio.pub (clé publique)
|
||||
```
|
||||
|
||||
#### Étape 2 : Ajouter la clé publique sur GitHub
|
||||
|
||||
```bash
|
||||
# Afficher la clé publique
|
||||
cat ~/.ssh/portainer_portfolio.pub
|
||||
```
|
||||
|
||||
Copiez la sortie (commence par `ssh-ed25519 AAAAC3...`)
|
||||
|
||||
1. Sur GitHub : Repository → **Settings** → **Deploy keys**
|
||||
2. **Add deploy key**
|
||||
3. Configuration :
|
||||
```
|
||||
Title: Portainer Deploy
|
||||
Key: [Collez la clé publique]
|
||||
❌ Allow write access (décoché - read-only suffit)
|
||||
```
|
||||
4. **Add key**
|
||||
|
||||
#### Étape 3 : Utiliser la clé dans Portainer
|
||||
|
||||
```bash
|
||||
# Afficher la clé PRIVÉE
|
||||
cat ~/.ssh/portainer_portfolio
|
||||
```
|
||||
|
||||
Copiez TOUTE la sortie (de `-----BEGIN OPENSSH PRIVATE KEY-----` jusqu'à `-----END OPENSSH PRIVATE KEY-----`)
|
||||
|
||||
1. Dans Portainer : Stacks → + Add stack
|
||||
2. Repository configuration :
|
||||
```
|
||||
Repository URL: git@github.com:kinou-p/portfolio-website.git
|
||||
Repository reference: refs/heads/main
|
||||
```
|
||||
3. ✅ Cochez **"Authentication"**
|
||||
4. Sélectionnez **"SSH"**
|
||||
5. Collez la clé privée complète dans le champ
|
||||
|
||||
---
|
||||
|
||||
## 🔒 **Bonnes pratiques de sécurité**
|
||||
|
||||
### **1. Utiliser des variables d'environnement**
|
||||
|
||||
Ne jamais commit de secrets dans le code. Utilisez `.env` :
|
||||
|
||||
```bash
|
||||
# .env (NE JAMAIS COMMIT)
|
||||
GTM_ID=GTM-5V6TCG4C
|
||||
API_KEY=secret_key_here
|
||||
DATABASE_URL=postgresql://user:pass@localhost/db
|
||||
```
|
||||
|
||||
Dans Portainer, ajoutez ces variables dans la Stack :
|
||||
- Stack → Environment variables → + add variable
|
||||
|
||||
### **2. Fichier .gitignore robuste**
|
||||
|
||||
Assurez-vous que votre `.gitignore` contient :
|
||||
|
||||
```gitignore
|
||||
# Secrets
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
*.key
|
||||
*.pem
|
||||
secrets/
|
||||
credentials/
|
||||
|
||||
# Système
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
desktop.ini
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# Build
|
||||
node_modules/
|
||||
dist/
|
||||
build/
|
||||
.cache/
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
logs/
|
||||
```
|
||||
|
||||
### **3. Vérifier avant de commit**
|
||||
|
||||
```bash
|
||||
# Vérifier ce qui va être commit
|
||||
git status
|
||||
|
||||
# Vérifier qu'aucun secret n'est présent
|
||||
git diff
|
||||
|
||||
# Si vous avez commit un secret par erreur :
|
||||
# 1. Supprimez-le du code
|
||||
# 2. Changez le secret (token, API key, etc.)
|
||||
# 3. Faites un commit correctif
|
||||
# 4. Le secret restera dans l'historique Git !
|
||||
# Utilisez git filter-branch ou BFG Repo-Cleaner pour l'effacer
|
||||
```
|
||||
|
||||
### **4. Rotation des secrets**
|
||||
|
||||
- 🔄 Régénérez les tokens tous les 90 jours
|
||||
- 🔄 Changez les clés SSH si elles sont compromises
|
||||
- 🔄 Révoquez immédiatement tout token exposé
|
||||
|
||||
---
|
||||
|
||||
## 🎯 **Recommandation finale**
|
||||
|
||||
Pour un **portfolio personnel** comme le vôtre :
|
||||
|
||||
### ✅ **Gardez le repository PUBLIC**
|
||||
|
||||
**Raisons :**
|
||||
1. Pas de secrets sensibles (juste un site vitrine)
|
||||
2. Plus simple à déployer
|
||||
3. Bon pour votre profil GitHub
|
||||
4. Permet aux recruteurs de voir votre code
|
||||
|
||||
**Configuration sécurisée :**
|
||||
```
|
||||
✅ .gitignore complet
|
||||
✅ Pas de .env committed
|
||||
✅ Variables d'environnement dans Portainer
|
||||
✅ Tokens d'API en variables d'environnement seulement
|
||||
```
|
||||
|
||||
### 🔒 **Passez en PRIVÉ seulement si :**
|
||||
- Vous avez du code propriétaire
|
||||
- C'est un projet client
|
||||
- Vous testez des features non prêtes
|
||||
|
||||
---
|
||||
|
||||
## 📋 **Checklist de sécurité**
|
||||
|
||||
Avant de rendre votre repo public :
|
||||
|
||||
- [ ] Vérifier `.gitignore` complet
|
||||
- [ ] Aucun fichier `.env` committed
|
||||
- [ ] Aucune API key dans le code
|
||||
- [ ] Pas de mots de passe en dur
|
||||
- [ ] Pas de tokens GitHub/AWS/etc.
|
||||
- [ ] Vérifier l'historique Git : `git log -p | grep -i "password\|token\|key"`
|
||||
- [ ] Supprimer les fichiers sensibles de l'historique si nécessaire
|
||||
- [ ] Tester le déploiement Portainer
|
||||
|
||||
---
|
||||
|
||||
## 🆘 **J'ai commit un secret par erreur !**
|
||||
|
||||
### 🚨 Action immédiate :
|
||||
|
||||
1. **Changez le secret** (régénérez la clé API, token, etc.)
|
||||
2. **Supprimez-le du code** et commit
|
||||
3. **Nettoyez l'historique Git** (le secret reste dans l'historique !)
|
||||
|
||||
```bash
|
||||
# Option 1 : BFG Repo-Cleaner (plus simple)
|
||||
# Téléchargez : https://rtyley.github.io/bfg-repo-cleaner/
|
||||
java -jar bfg.jar --replace-text secrets.txt # fichier avec les secrets à remplacer
|
||||
|
||||
# Option 2 : git filter-branch (manuel)
|
||||
git filter-branch --force --index-filter \
|
||||
"git rm --cached --ignore-unmatch chemin/vers/fichier" \
|
||||
--prune-empty --tag-name-filter cat -- --all
|
||||
|
||||
# Force push
|
||||
git push origin --force --all
|
||||
```
|
||||
|
||||
4. **Notifiez l'équipe** si c'est un projet collaboratif
|
||||
|
||||
---
|
||||
|
||||
## 📞 **Besoin d'aide ?**
|
||||
|
||||
- 📖 [GitHub Personal Access Tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
|
||||
- 📖 [GitHub Deploy Keys](https://docs.github.com/en/developers/overview/managing-deploy-keys)
|
||||
- 📖 [Git Secrets Scanner](https://github.com/awslabs/git-secrets)
|
||||
|
||||
---
|
||||
|
||||
Bonne sécurisation ! 🔒✨
|
||||
@ -1,9 +1,12 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
portfolio-website:
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
context: https://github.com/kinou-p/portfolio-website.git#main
|
||||
dockerfile: Dockerfile
|
||||
image: portfolio-website:latest
|
||||
container_name: portfolio-website
|
||||
networks:
|
||||
- portfolio
|
||||
@ -23,7 +26,14 @@ services:
|
||||
- "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"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
portfolio:
|
||||
external: true
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user