Installer Selega
Selega s’auto-héberge avec Docker. Le fichier docker-compose.yml fourni démarre deux conteneurs — Selega et sa propre base PostgreSQL — plus un volume pour les données. Vous n’avez pas besoin d’installer ou de provisionner une base de données séparément.
Prérequis
Section intitulée « Prérequis »- Docker avec le plugin Compose (
docker compose). - Un port hôte pour l’interface web (par défaut
8088). - Pour la production : un reverse proxy avec HTTPS/TLS (Caddy, nginx, ou le TLS intégré de votre panneau).
L’image du conteneur est construite à partir de node:22-slim et embarque Tesseract OCR (avec le pack de langue espagnol) et poppler-utils pour les PDF scannés. Elle s’exécute en utilisateur non-root.
Installation en 1 minute (Docker)
Section intitulée « Installation en 1 minute (Docker) »git clone https://github.com/diegoparras/selega.git && cd selegacp .env.example .env # modifier POSTGRES_PASSWORD (utilisez quelque chose de robuste)docker compose up -d --builddocker compose logs selega # le mot de passe admin généré est affiché ici (une seule fois)# → http://localhost:8088C’est tout : deux conteneurs (selega + selega-db) et un volume pour les données.
Comment obtenir l’image
Section intitulée « Comment obtenir l’image »Selega est publiée sur GHCR à chaque push sous ghcr.io/diegoparras/selega:latest, et le docker-compose.yml déclare aussi build: .. Vous pouvez donc soit construire depuis le dépôt, soit récupérer l’image publiée :
git clone https://github.com/diegoparras/selega.git && cd selegacp .env.example .envdocker compose up -d --buildSi votre panneau ne permet que de coller un fichier compose sans cloner le dépôt, utilisez ce bloc image seule — il récupère l’image déjà publiée depuis GHCR :
services: db: image: postgres:16-alpine environment: POSTGRES_USER: selega POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set a strong password} POSTGRES_DB: selega volumes: [ "selega-pg:/var/lib/postgresql/data" ] healthcheck: test: ["CMD-SHELL", "pg_isready -U selega -d selega"] interval: 5s timeout: 3s retries: 12 restart: unless-stopped selega: image: ghcr.io/diegoparras/selega:latest ports: [ "8088:8080" ] environment: SELEGA_ADMIN_EMAIL: ${SELEGA_ADMIN_EMAIL:-admin@selega.local} SELEGA_ADMIN_PASS: ${SELEGA_ADMIN_PASS:-} SELEGA_SECURE_COOKIE: ${SELEGA_SECURE_COOKIE:-0} DATABASE_URL: "postgresql://selega:${POSTGRES_PASSWORD}@db:5432/selega" depends_on: db: { condition: service_healthy } restart: unless-stoppedvolumes: selega-pg:Variables d’environnement
Section intitulée « Variables d’environnement »Copiez .env.example vers .env et définissez des valeurs réelles. Ne commitez jamais .env dans git.
| Variable | Par défaut | Rôle |
|---|---|---|
POSTGRES_PASSWORD | — (requis) | Mot de passe de la base de données. Utilisez quelque chose de robuste. |
SELEGA_ADMIN_EMAIL | admin@selega.local | Utilisateur du premier superadmin. |
SELEGA_ADMIN_PASS | (vide) | Laisser vide → un mot de passe est généré et affiché une seule fois dans les logs. |
SELEGA_SECURE_COOKIE | 0 | Mettre à 1 derrière HTTPS/TLS (cookie de session envoyé en HTTPS uniquement). |
SELEGA_PORT | 8088 | Port hôte (l’application écoute sur 8080 à l’intérieur du conteneur). |
OPENROUTER_KEY | (vide) | Clé d’IA cloud optionnelle. Préférez la charger depuis l’Admin (stockée en écriture seule). |
POSTGRES_USER / POSTGRES_DB | selega | Utilisateur / nom de la base de données. |
Premier démarrage
Section intitulée « Premier démarrage »- Exécutez
docker compose logs selega(ou lisez les logs de votre panneau) et copiez le mot de passe admin généré. Il est affiché une seule fois. - Connectez-vous avec
SELEGA_ADMIN_EMAILet ce mot de passe. Vous êtes désormais superadmin. - Ouvrez le menu kebab (⋮) → Système : choisissez quelles juridictions cette installation dessert et configurez les moteurs.
- Ouvrez le menu kebab (⋮) → Administration : créez des utilisateurs (agent / superviseur / auditeur / admin) et modifiez les règles.
Déployer sur un panneau
Section intitulée « Déployer sur un panneau »Dokploy, Easypanel, Coolify et Portainer prennent tous en charge Docker Compose. La voie recommandée est de connecter ce dépôt GitHub pour que le panneau construise l’image à votre place ; si votre panneau n’accepte qu’un compose collé, utilisez le bloc image seule ci-dessus.
La seule variable obligatoire est POSTGRES_PASSWORD. Laissez SELEGA_ADMIN_PASS vide pour que Selega génère le mot de passe admin et l’affiche une seule fois dans les logs du conteneur. Lorsque le panneau fournit le TLS (Dokploy, Easypanel et Coolify le font automatiquement), mettez SELEGA_SECURE_COOKIE=1.
Mise à jour
Section intitulée « Mise à jour »git pull && docker compose up -d --build # construire depuis le dépôt# ou, avec l'image publiée :docker compose pull && docker compose up -dChecklist de production
Section intitulée « Checklist de production »- TLS : placez Selega derrière un reverse proxy avec HTTPS et mettez
SELEGA_SECURE_COOKIE=1. - Secrets robustes dans
.env; ne commitez jamais.env.SELEGA_ADMIN_PASSvide → auto-généré. - Fermez le port Postgres — n’exposez pas le service
dbà l’hôte en production. - Sauvegardez le volume
selega-pg— c’est le registre des légalisations.
Le conteneur s’exécute en utilisateur non-root, avec CSP et en-têtes de sécurité, hachage de mots de passe scrypt, sessions HMAC, verrouillage à la connexion et requêtes paramétrées. Il est audité avec semgrep, OWASP ZAP, Trivy et gitleaks.