Aller au contenu

Déploiement

Déployez la plateforme sur un seul VPS avec Docker Compose + nginx. La pile se compose de PostgreSQL + Redis + l'API Go (également émetteur OIDC) + le BFF Next.js.

Prérequis

  • Docker et le plugin compose
  • nginx et certbot (TLS)
  • Un enregistrement DNS pointant vers le serveur

Topologie

Internet ──► nginx (80/443, Let's Encrypt)
   ├─ /oauth2/*, /.well-known/*, /userinfo ─► api (émetteur OIDC)
   ├─ /rp/sign/*      ─► relais api
   ├─ /rp/eid/*, /rp/eid-org/* ─► api (proxy eID)
   └─ tout le reste    ─► web (BFF Next.js) ──► api
   interne : db (Postgres 16) · redis (7)

Fichiers d'environnement (ignorés par git)

  • .env — interpolation compose (secrets Postgres/Redis, ports, domaine).
  • backend.env — configuration de l'API (JWT_SECRET, EID_RP_, OAUTH_ISSUER, SSO_, …).

Des secrets distincts

Chaque déploiement doit avoir ses propres JWT_SECRET, SSO_STATE_KEY et identifiants de partie utilisatrice — jamais partagés entre déploiements.

Étapes de déploiement

# 1) récupérer le code
git clone git@github.com:gerege-systems/sso-dgov-mn.git /srv/sso-dgov-mn
cd /srv/sso-dgov-mn

# 2) créer les fichiers d'environnement (.env + backend.env)

# 3) démarrer la pile — migrate applique le schéma automatiquement
docker compose up -d --build

# ou redéployer :
bash deploy/deploy.sh

nginx (exemple)

server {
    server_name sso.gerege.mn;
    client_max_body_size 30m;

    location /oauth2/                           { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
    location = /.well-known/openid-configuration { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
    location = /.well-known/jwks.json            { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }
    location = /userinfo                         { proxy_pass http://127.0.0.1:4446; include /etc/nginx/proxy_params; }

    location /rp/sign/    { proxy_pass http://127.0.0.1:8081/rp/sign/; include /etc/nginx/proxy_params; }
    location /rp/eid/     { proxy_pass http://127.0.0.1:8081/api/v1/eid/;     include /etc/nginx/proxy_params; }
    location /rp/eid-org/ { proxy_pass http://127.0.0.1:8081/api/v1/eid-org/; include /etc/nginx/proxy_params; }

    location / { proxy_pass http://127.0.0.1:3008; include /etc/nginx/proxy_params; }
    listen 443 ssl;  # certbot managed
}

Nom de projet compose

Vous pouvez faire tourner plusieurs déploiements côte à côte sur un même serveur. Chacun doit avoir ses propres COMPOSE_PROJECT_NAME, ports et volumes dans son .env — sinon les étiquettes d'images et les volumes entrent en collision.

Déploiement Domaine Ports (exemple)
sso-dgov-mn sso.gerege.mn web 3008
template-dgov-mn template.gerege.mn web 3009