Aller au contenu

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).

gh repo create EpitechAfrik/mon-projet --private

É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 :

NODE_ENV=production
PORT=3000
MONGO_URI=mongodb+srv://...
# ... toutes les variables nécessaires

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 :

gh secret list --repo EpitechAfrik/mon-projet

É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é :

  1. Créer le fichier de configuration dans /root/projects/nginx-config/devops-epiapp/sites-enabled/
  2. Utiliser le certificat wildcard existant
  3. 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 :

git add .
git commit -m "Initial deployment setup"
git push origin main

Suivre le déploiement :

gh run watch --repo EpitechAfrik/mon-projet

Vérifier :

curl https://mon-projet.epitools.bj/health

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)