déployer Mise en production

Mise en production

Lancez socAdmin derrière HTTPS avec un secret fixe, un conteneur verrouillé et l'inscription désactivée.

socAdmin donne accès à vos bases de données : traitez-le comme un panneau d’administration et ne l’exposez jamais directement sur internet.

Checklist

  • Définissez JWT_SECRET avec une chaîne aléatoire d’au moins 32 caractères. Générez-en une avec openssl rand -base64 32.
  • Utilisez un ADMIN_PASSWORD robuste.
  • Définissez REGISTRATION_ENABLED=false pour que seuls les administrateurs puissent ajouter des utilisateurs.
  • Servez socAdmin en HTTPS, via un reverse proxy ou avec TLS_CERT / TLS_KEY.
  • Définissez SECURE_COOKIES=true lorsque le HTTPS se termine au niveau du proxy.
  • Définissez TRUSTED_PROXY avec l’IP ou le sous-réseau de votre proxy pour que le rate limiting voie les vraies IP clientes.
  • Ne publiez pas le port 8080 sur internet. Liez-le à 127.0.0.1 ou gardez-le sur le réseau interne.
  • Montez /data sur un volume persistant et sauvegardez-le.

Fichier Compose recommandé

Cette configuration lance le conteneur avec un système de fichiers en lecture seule et ne l’expose qu’à l’hôte lui-même, pour un reverse proxy sur la même machine.

services:
  socadmin:
    image: soleilclems/socadmin
    read_only: true
    tmpfs:
      - /tmp
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - socadmin-data:/data
    environment:
      - JWT_SECRET=${JWT_SECRET:?Set a random string of at least 32 characters}
      - ADMIN_EMAIL=${ADMIN_EMAIL}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - REGISTRATION_ENABLED=false
      - SECURE_COOKIES=true
      # Requests from a proxy on the host reach the container through the Docker bridge
      - TRUSTED_PROXY=172.16.0.0/12
    restart: unless-stopped

volumes:
  socadmin-data:

Placez les secrets dans un fichier .env à côté du Compose, pas directement dans le fichier Compose.

Derrière Nginx

server {
    listen 443 ssl;
    server_name db.example.com;

    ssl_certificate     /etc/ssl/certs/cert.pem;
    ssl_certificate_key /etc/ssl/private/key.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Derrière Traefik

services:
  socadmin:
    image: soleilclems/socadmin
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.socadmin.rule=Host(`db.example.com`)"
      - "traefik.http.routers.socadmin.tls.certresolver=letsencrypt"
      - "traefik.http.services.socadmin.loadbalancer.server.port=8080"
    volumes:
      - socadmin-data:/data
    environment:
      - JWT_SECRET=${JWT_SECRET}
      - ADMIN_EMAIL=${ADMIN_EMAIL}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - REGISTRATION_ENABLED=false
      - SECURE_COOKIES=true

HTTPS sans proxy

socAdmin peut servir du HTTPS directement. Montez le certificat et la clé, puis pointez vers eux :

-e TLS_CERT=/data/certs/cert.pem \
-e TLS_KEY=/data/certs/key.pem

Avec TLS activé, socAdmin démarre également un listener qui redirige le HTTP simple vers HTTPS, sur le port 80 par défaut. Le conteneur s’exécute en tant qu’utilisateur non-root et ne peut pas se lier au port 80 : définissez HTTP_REDIRECT_PORT avec un port supérieur à 1024 (par exemple 8081) et publiez-le.

Restreindre par IP

Les administrateurs peuvent activer une whitelist IP depuis les paramètres de sécurité de socAdmin. Lorsqu’elle est activée, seules les adresses IP listées peuvent accéder à l’interface. Derrière un proxy, définissez d’abord TRUSTED_PROXY, sinon la whitelist ne voit que l’adresse du proxy.