Kyrux
Voltar

Configuração (.env)

# ── Ambiente ──────────────────────────────────────────────────────
# development → debug, hotreload e pprof ativados automaticamente
# production  → modo otimizado, debug desligado
APP_ENV=development

# ── Servidor ──────────────────────────────────────────────────────
SERVER_HOST=0.0.0.0     # bind — veja a nota abaixo antes de abrir no navegador
SERVER_PORT=8000
SERVER_WORKERS=4        # omitir para usar todos os CPUs disponíveis

# ── Hosts permitidos ──────────────────────────────────────────────
# Ignorado em development. Obrigatório em production.
ALLOWED_HOSTS=meusite.com.br,www.meusite.com.br

# ── URL canônica (opcional) ────────────────────────────────────────
# Sem barra final. Usada pelo app embutido "meta" (apps/meta) para montar
# URLs absolutas em robots.txt, sitemap.xml e security.txt — veja SEO &
# Security.txt. Vazia até configurar; nesse caso esses arquivos saem sem
# domínio (ainda válidos, mas incompletos).
# APP_URL=https://meusite.com.br

# ── Fuso horário (opcional) ──────────────────────────────────────────
# Nome IANA usado pelo admin para EXIBIR timestamps automáticos
# (created_at/updated_at, histórico) — nunca afeta o que é gravado no
# banco (colunas TIMESTAMPTZ guardam o instante absoluto). Padrão UTC se
# ausente; nome inválido cai pra UTC com aviso no log, não derruba o boot.
# APP_TIMEZONE=America/Sao_Paulo

# ── Banco de dados ────────────────────────────────────────────────
# Cada bloco DB_NAME inicia um novo banco. O primeiro é o padrão.
DB_NAME=principal
DB_ENABLED=true
DB_DRIVER=postgres
DB_DSN=postgres://user:password@localhost:5432/meudb?sslmode=disable

# DB_NAME=analytics
# DB_ENABLED=true
# DB_DRIVER=postgres
# DB_DSN=postgres://user:password@localhost:5432/analytics?sslmode=disable

# ── Cache ─────────────────────────────────────────────────────────
CACHE_ENABLED=false
CACHE_DRIVER=memory
CACHE_ADDR=localhost:6379

# ── Queue (fila de tarefas em background) ─────────────────────────
QUEUE_ENABLED=false
QUEUE_DRIVER=memory     # memory | redis (roadmap)
QUEUE_ADDR=localhost:6379
QUEUE_WORKERS=4

# ── Admin (painel opt-in por model — precisa de admin.Register[T] no código)
ADMIN_ENABLED=false
ADMIN_PATH=/admin/

# Opcional — cria o superusuário inicial no boot, se ainda não existir
# ninguém com esse login (não redefine senha de conta já existente)
# ADMIN_SUPERUSER_USERNAME=admin
# ADMIN_SUPERUSER_PASSWORD=troque-esta-senha-provisoria

# ── Segurança ─────────────────────────────────────────────────────
SECRET_KEY=sua-chave-secreta-forte-aqui
SESSION_TTL=3600        # duração da sessão em segundos

# Pepper aplicado antes do hash Argon2id — nunca armazenar no banco
# Gere com: openssl rand -base64 32
PASSWORD_PEPPER=seu-pepper-forte-aqui

# Chave AES-256-GCM para campos kyrux:"encrypt" — nunca armazenar no banco
# Gere com: openssl rand -base64 32
FIELD_ENCRYPTION_KEY=sua-chave-de-criptografia-forte-aqui

# ── Runtime (opcional) ────────────────────────────────────────────
# Percentual de GC do Go. Padrão: 100. Reduzir (ex: 75) diminui heap, aumenta frequência de GC.
# RUNTIME_GOGC=75

Em produção SECRET_KEY, PASSWORD_PEPPER, FIELD_ENCRYPTION_KEY e ALLOWED_HOSTS são obrigatórios — o servidor recusa iniciar sem eles.

SERVER_HOST=0.0.0.0 é o endereço de bind, não de acesso

0.0.0.0 diz ao servidor para escutar em todas as interfaces de rede da máquina — não é um endereço real para o qual um navegador consiga se conectar. Digitar http://0.0.0.0:8000 na barra de endereços resulta em ERR_CONNECTION_REFUSED (ou comportamento inconsistente, dependendo do SO).

Endereço O que é Uso
0.0.0.0 Curinga "todas as interfaces" Só para SERVER_HOST (bind)
127.0.0.1 Loopback — esta máquina, sempre existente e roteável Acessar localmente
localhost Nome que o SO resolve para 127.0.0.1 (ou ::1) Acessar localmente

Para acessar o servidor rodando localmente, use sempre http://127.0.0.1:PORTA ou http://localhost:PORTA — nunca 0.0.0.0, mesmo com SERVER_HOST=0.0.0.0 configurado (o bind continua em todas as interfaces; só o endereço de acesso muda). O Kyrux já traduz isso sozinho nas mensagens que imprime (console, welcome page, debug dashboard) — todas mostram 127.0.0.1, nunca 0.0.0.0.