Premier déploiement¶
Guide étape par étape pour déployer un nouveau projet sur l'infrastructure Pedago Tools.
Prérequis¶
- Accès à l'organisation GitHub EpitechAfrik
- Accès SSH au VPS Hostinger
- GitHub CLI installé et authentifié
Étape 1 : Créer le repository¶
Créer un nouveau repo dans l'organisation EpitechAfrik sur GitHub (privé par défaut).
Étape 2 : Créer le Dockerfile¶
À la racine du projet, créer un Dockerfile adapté à la technologie :
# Exemple pour Node.js
FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile --prod
COPY . .
USER node
EXPOSE 3000
CMD ["node", "server.js"]
Étape 3 : Créer le docker-compose.yml¶
services:
app:
image: ghcr.io/epitechafrik/mon-projet:${IMAGE_TAG:-latest}
env_file: .env
ports:
- "127.0.0.1:PORT_HOTE:PORT_INTERNE"
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:PORT_INTERNE/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
Choix du port hôte
Vérifier les ports déjà utilisés sur le VPS avec docker ps avant de choisir un port.
Conventions actuelles : Backend 5011, Frontend 3004, Uptime Kuma 6001, Grafana 6050, Loki 6100.
Étape 4 : Créer le workflow GitHub Actions¶
Créer .github/workflows/deploy.yml. Voir le guide CI/CD pour la structure complète du pipeline (build, deploy via SCP + DOTENV_FILE, notify).
Étape 5 : Créer le fichier .env.prod¶
Localement, créer un fichier .env.prod avec toutes les variables de production :
Ne jamais commiter
Le fichier .env.prod ne doit JAMAIS être commité. Il sert uniquement à alimenter le secret DOTENV_FILE.
Étape 6 : Configurer les secrets GitHub¶
gh secret set SERVER_HOST --repo EpitechAfrik/mon-projet --body "IP_DU_VPS"
gh secret set SERVER_USERNAME --repo EpitechAfrik/mon-projet --body "root"
gh secret set SERVER_SSH_KEY --repo EpitechAfrik/mon-projet < ~/.ssh/id_ed25519
gh secret set DOTENV_FILE --repo EpitechAfrik/mon-projet < .env.prod
# Optionnel : webhook de notification
gh secret set WEBHOOK_URL --repo EpitechAfrik/mon-projet --body "https://webhook.example.com"
Vérifier :
Étape 7 : Préparer le VPS¶
ssh root@IP_DU_VPS
# Créer le répertoire du projet
mkdir -p /root/projects/mon-projet
# Donner les bonnes permissions
chown root:root /root/projects/mon-projet
# Permettre la traversée des répertoires parents
chmod 711 /root
chmod 711 /root/projects
# Si un utilisateur non-root est utilisé pour le déploiement :
usermod -aG docker UTILISATEUR
Étape 8 : Configurer Nginx¶
Voir le guide Nginx pour la configuration détaillée.
En résumé :
- Créer le fichier de configuration dans
/root/projects/nginx-config/devops-epiapp/sites-enabled/ - Utiliser le certificat wildcard existant
- Tester et recharger :
docker exec nginx nginx -t && docker exec nginx nginx -s reload
Étape 9 : Configurer le DNS¶
Ajouter un enregistrement DNS de type A :
- Nom :
mon-projet.epitools.bj - Valeur : IP du VPS
- TTL : 3600
Le certificat wildcard *.epitools.bj couvre automatiquement tous les sous-domaines.
Étape 10 : Déployer¶
Pousser sur main pour déclencher le pipeline :
Suivre le déploiement :
Vérifier :
Checklist post-déploiement¶
- [ ] Le pipeline GitHub Actions passe au vert
- [ ] Le health check répond 200
- [ ] Le site est accessible via le domaine
- [ ] Le SSL fonctionne (cadenas vert)
- [ ] Les monitors Uptime Kuma sont créés (voir Uptime Kuma)
- [ ] Les alertes Grafana sont configurées (voir Grafana)