diff --git a/.env.portainer.example b/.env.portainer.example new file mode 100644 index 0000000..af12ace --- /dev/null +++ b/.env.portainer.example @@ -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 diff --git a/PORTAINER_DEPLOYMENT.md b/PORTAINER_DEPLOYMENT.md new file mode 100644 index 0000000..9833194 --- /dev/null +++ b/PORTAINER_DEPLOYMENT.md @@ -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 ! 🚀 diff --git a/PORTAINER_QUICK_START.md b/PORTAINER_QUICK_START.md new file mode 100644 index 0000000..b76aedf --- /dev/null +++ b/PORTAINER_QUICK_START.md @@ -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 ! 📚 diff --git a/SECURITY_GUIDE.md b/SECURITY_GUIDE.md new file mode 100644 index 0000000..fc7e79f --- /dev/null +++ b/SECURITY_GUIDE.md @@ -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 ! 🔒✹ diff --git a/docker-compose.yml b/docker-compose.yml index 6deff57..4515d05 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 +