33800 Docs

← Retour

Proposition : Système de Déploiement conf.prod.gouroubleu

Status : IMPLEMENTEE

Objectif

Créer un standard de configuration pour automatiser le déploiement de projets GitHub vers PROD.

Concept

Chaque projet GitHub contient un fichier conf.prod.gouroubleu.yml qui définit :

Structure proposée du fichier conf.prod.gouroubleu.yml

# conf.prod.gouroubleu.yml
version: "1.0"
project:
  name: "mon-projet"
  description: "Description du projet"

# Build
build:
  dockerfile: "./Dockerfile"           # Chemin vers le Dockerfile
  context: "."                         # Context de build
  args:                                # Build args optionnels
    NODE_ENV: "production"

# Orchestration
compose:
  file: "./docker-compose.prod.yml"    # Ou inline si simple

# Stockage - bind mounts (répertoires) sauf RAM
storage:
  # Données persistantes sur NFS (base de données, uploads, etc.)
  # Bind mount vers /mnt/stock_36to/data/projects/{project}/data
  - type: "nfs"
    container_path: "/app/data"
    host_path: "data"              # Relatif au dossier projet sur NFS

  # Fichiers statiques/build sur disque local (rapide)
  # Bind mount vers /opt/projects/{project}/static
  - type: "local"
    container_path: "/app/static"
    host_path: "static"            # Relatif au dossier projet local

  # Cache en RAM (tmpfs) - données jetables, volume Docker OK
  - type: "ram"
    container_path: "/app/cache"
    size: "256m"

# Exposition (pour plus tard: communication avec VM Nginx)
expose:
  domain: "mon-projet.gouroubleu.com"
  port: 3000
  ssl: true

# Repos additionnels nécessaires (sous-modules, dépendances)
repositories:
  - url: "git@github.com:gouroubleu/shared-lib.git"
    path: "./libs/shared"
    branch: "main"

# Hooks (optionnel)
hooks:
  pre_deploy: "./scripts/pre-deploy.sh"
  post_deploy: "./scripts/post-deploy.sh"

Workflow de déploiement

  1. Tu me dis : "Mets en prod le projet X"
  2. Je clone le repo depuis GitHub
  3. Je lis conf.prod.gouroubleu.yml
  4. Je prépare les volumes selon storage
  5. Je build selon build
  6. Je déploie via docker-compose
  7. Je note l'exposition pour la config Nginx (phase 2)

Structure sur le serveur PROD

/mnt/stock_36to/data/
└── projects/
    └── {nom-projet}/
        ├── data/          # Données persistantes NFS
        └── ...

/opt/projects/
└── {nom-projet}/
    ├── repo/              # Code source cloné
    ├── static/            # Fichiers locaux rapides
    └── logs/

Questions pour toi

  1. Format du fichier : YAML te convient ou tu préfères autre chose (JSON, TOML) ?
  2. Stockage types : nfs, local, ram - ça couvre tes besoins ?
  3. Expose : Tu veux gérer plusieurs ports/services par projet ?
  4. Auth GitHub : Tu as une clé SSH configurée sur ce serveur pour tes repos privés ?

Attente

Tes retours sur la structure proposée avant de passer à l'implémentation.