Instalar Selega
A Selega faz self-host com Docker. O docker-compose.yml fornecido sobe dois
contêineres — a Selega e seu próprio PostgreSQL — mais um volume para os dados. Você não precisa
instalar ou provisionar um banco de dados à parte.
Requisitos
Seção intitulada “Requisitos”- Docker com o plugin Compose (
docker compose). - Uma porta do host para a UI web (padrão
8088). - Para produção: um proxy reverso com HTTPS/TLS (Caddy, nginx, ou o TLS embutido do seu painel).
A imagem do contêiner é construída a partir de node:22-slim e embute Tesseract OCR (com o
pacote de idioma espanhol) e poppler-utils para PDFs escaneados. Roda como usuário não-root.
Instalação em 1 minuto (Docker)
Seção intitulada “Instalação em 1 minuto (Docker)”git clone https://github.com/diegoparras/selega.git && cd selegacp .env.example .env # edite POSTGRES_PASSWORD (use algo forte)docker compose up -d --builddocker compose logs selega # a senha de admin gerada é impressa aqui (uma vez)# → http://localhost:8088É só isso: dois contêineres (selega + selega-db) e um volume para os dados.
Como você obtém a imagem
Seção intitulada “Como você obtém a imagem”A Selega é publicada no GHCR a cada push como ghcr.io/diegoparras/selega:latest, e o
docker-compose.yml também declara build: .. Você pode portanto construir a partir do repo
ou baixar a imagem publicada:
git clone https://github.com/diegoparras/selega.git && cd selegacp .env.example .envdocker compose up -d --buildSe o seu painel só permite colar um arquivo compose sem clonar o repo, use este bloco somente-imagem — ele baixa a imagem já publicada do 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:Variáveis de ambiente
Seção intitulada “Variáveis de ambiente”Copie .env.example para .env e defina valores reais. Nunca faça commit do .env no git.
| Variável | Padrão | Finalidade |
|---|---|---|
POSTGRES_PASSWORD | — (obrigatória) | Senha do banco de dados. Use algo forte. |
SELEGA_ADMIN_EMAIL | admin@selega.local | Usuário do primeiro superadmin. |
SELEGA_ADMIN_PASS | (vazio) | Deixe vazio → uma senha é gerada e impressa uma vez nos logs. |
SELEGA_SECURE_COOKIE | 0 | Defina como 1 atrás de HTTPS/TLS (cookie de sessão enviado apenas por HTTPS). |
SELEGA_PORT | 8088 | Porta do host (o app escuta em 8080 dentro do contêiner). |
OPENROUTER_KEY | (vazio) | Chave de IA na nuvem opcional. Prefira carregá-la a partir do Admin (armazenada como write-only). |
POSTGRES_USER / POSTGRES_DB | selega | Usuário / nome do banco de dados. |
Primeira inicialização
Seção intitulada “Primeira inicialização”- Rode
docker compose logs selega(ou leia os logs do seu painel) e copie a senha de admin gerada. Ela é impressa uma vez. - Faça login com
SELEGA_ADMIN_EMAILe essa senha. Você agora é superadmin. - Abra o menu kebab (⋮) → Sistema: escolha quais jurisdições esta instalação atende e configure os motores.
- Abra o menu kebab (⋮) → Administração: crie usuários (agente / supervisor / auditor / admin) e edite as regras.
Deploy em um painel
Seção intitulada “Deploy em um painel”Todos — Dokploy, Easypanel, Coolify e Portainer — suportam Docker Compose. O caminho recomendado é conectar este repo do GitHub para que o painel construa a imagem para você; se o seu painel só aceita um compose colado, use o bloco somente-imagem acima.
A única variável obrigatória é POSTGRES_PASSWORD. Deixe SELEGA_ADMIN_PASS vazio para que
a Selega gere a senha de admin e a imprima uma vez nos logs do contêiner. Quando o painel
fornece TLS (Dokploy, Easypanel e Coolify fazem automaticamente), defina SELEGA_SECURE_COOKIE=1.
Atualização
Seção intitulada “Atualização”git pull && docker compose up -d --build # construir a partir do repo# ou, com a imagem publicada:docker compose pull && docker compose up -dChecklist de produção
Seção intitulada “Checklist de produção”- TLS: coloque a Selega atrás de um proxy reverso com HTTPS e defina
SELEGA_SECURE_COOKIE=1. - Segredos fortes no
.env; nunca faça commit do.env.SELEGA_ADMIN_PASSvazio → gerada automaticamente. - Feche a porta do Postgres — não exponha o serviço
dbao host em produção. - Faça backup do volume
selega-pg— ele é o registro das legalizações.
O contêiner roda como usuário não-root, com CSP e cabeçalhos de segurança, hashing de senha com scrypt, sessões HMAC, bloqueio de login e queries parametrizadas. É auditado com semgrep, OWASP ZAP, Trivy e gitleaks.