# 🔐 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 ! 🔒✹