Installa Selega
Selega è in self-hosting con Docker. Il file docker-compose.yml fornito avvia due
container — Selega e il suo PostgreSQL — più un volume per i dati. Non è necessario
installare o predisporre un database separatamente.
Requisiti
Sezione intitolata “Requisiti”- Docker con il plugin Compose (
docker compose). - Una porta host per l’interfaccia web (predefinita
8088). - Per la produzione: un reverse proxy con HTTPS/TLS (Caddy, nginx o il TLS integrato del tuo pannello).
L’immagine del container è costruita da node:22-slim e integra Tesseract OCR (con il
language pack spagnolo) e poppler-utils per i PDF scansionati. Gira come utente non-root.
Installazione in 1 minuto (Docker)
Sezione intitolata “Installazione in 1 minuto (Docker)”git clone https://github.com/diegoparras/selega.git && cd selegacp .env.example .env # modifica POSTGRES_PASSWORD (usa qualcosa di robusto)docker compose up -d --builddocker compose logs selega # la password amministratore generata viene stampata qui (una sola volta)# → http://localhost:8088Questo è tutto: due container (selega + selega-db) e un volume per i dati.
Come ottieni l’immagine
Sezione intitolata “Come ottieni l’immagine”Selega viene pubblicata su GHCR a ogni push come ghcr.io/diegoparras/selega:latest, e il
docker-compose.yml dichiara anche build: .. Puoi quindi sia costruire dal repo
sia scaricare l’immagine pubblicata:
git clone https://github.com/diegoparras/selega.git && cd selegacp .env.example .envdocker compose up -d --buildSe il tuo pannello ti permette solo di incollare un file compose senza clonare il repo, usa questo blocco con sola immagine — scarica l’immagine già pubblicata da 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:Variabili d’ambiente
Sezione intitolata “Variabili d’ambiente”Copia .env.example in .env e imposta valori reali. Non committare mai .env su git.
| Variabile | Predefinito | Scopo |
|---|---|---|
POSTGRES_PASSWORD | — (obbligatoria) | Password del database. Usa qualcosa di robusto. |
SELEGA_ADMIN_EMAIL | admin@selega.local | Utenza del primo superamministratore. |
SELEGA_ADMIN_PASS | (vuoto) | Lascia vuoto → una password viene generata e stampata una sola volta nei log. |
SELEGA_SECURE_COOKIE | 0 | Imposta a 1 dietro HTTPS/TLS (cookie di sessione inviato solo su HTTPS). |
SELEGA_PORT | 8088 | Porta host (l’app ascolta su 8080 all’interno del container). |
OPENROUTER_KEY | (vuoto) | Chiave IA cloud opzionale. Preferibile caricarla dall’Amministrazione (memorizzata in sola scrittura). |
POSTGRES_USER / POSTGRES_DB | selega | Utente / nome del database. |
Primo avvio
Sezione intitolata “Primo avvio”- Esegui
docker compose logs selega(o leggi i log del tuo pannello) e copia la password amministratore generata. Viene stampata una sola volta. - Accedi con
SELEGA_ADMIN_EMAILe quella password. Ora sei superamministratore. - Apri il menu kebab (⋮) → Sistema: scegli quali giurisdizioni serve questa installazione e configura i motori.
- Apri il menu kebab (⋮) → Amministrazione: crea gli utenti (operatore / supervisore / revisore / amministratore) e modifica le regole.
Deploy su un pannello
Sezione intitolata “Deploy su un pannello”Dokploy, Easypanel, Coolify e Portainer supportano tutti Docker Compose. Il percorso consigliato è connettere questo repo GitHub affinché il pannello costruisca l’immagine al posto tuo; se il tuo pannello accetta solo un compose incollato, usa il blocco con sola immagine qui sopra.
L’unica variabile obbligatoria è POSTGRES_PASSWORD. Lascia SELEGA_ADMIN_PASS vuota affinché
Selega generi la password amministratore e la stampi una sola volta nei log del container. Quando il
pannello fornisce TLS (Dokploy, Easypanel e Coolify lo fanno automaticamente), imposta SELEGA_SECURE_COOKIE=1.
Aggiornamento
Sezione intitolata “Aggiornamento”git pull && docker compose up -d --build # costruisci dal repo# oppure, con l'immagine pubblicata:docker compose pull && docker compose up -dChecklist di produzione
Sezione intitolata “Checklist di produzione”- TLS: metti Selega dietro un reverse proxy con HTTPS e imposta
SELEGA_SECURE_COOKIE=1. - Segreti robusti in
.env; non committare mai.env.SELEGA_ADMIN_PASSvuota → generata automaticamente. - Chiudi la porta di Postgres — non esporre il servizio
dball’host in produzione. - Esegui il backup del volume
selega-pg— è il registro delle legalizzazioni.
Il container gira come utente non-root, con CSP e header di sicurezza, hashing delle password con scrypt, sessioni HMAC, blocco del login e query parametrizzate. È auditato con semgrep, OWASP ZAP, Trivy e gitleaks.