Logosulfite.app
rafagazani/sulfite 999999

Guias de deploy#

O sulfite_server suporta quatro modalidades de execução, do mais simples ao mais robusto. Todas elas usam os mesmos relatórios e a mesma API REST — o que muda é onde o estado é armazenado.

Comparativo#

Modalidade Infra necessária Persistência Múltiplas réplicas Indicado para
In-memory Nenhuma Não Não Dev local, demos, CI
SQLite Nenhuma Sim (arquivo) Não Times pequenos, single-node
PostgreSQL Banco Postgres Sim Não (recomendado) Produção single-node
Cluster Postgres + S3 + proxy Sim Sim Produção escalável

Como escolher#

Estou testando localmente ou em CI?
  └─ In-memory — zero config, zero deps

Preciso de persistência mas não quero banco externo?
  └─ SQLite — um volume Docker já resolve

Vou para produção mas uma instância basta?
  └─ PostgreSQL — confiável, fácil de operar

Preciso escalar horizontalmente ou ter zero downtime?
  └─ Cluster (RFC-037) — N réplicas stateless atrás de um load balancer

Arquitetura geral#

Independente da modalidade, o servidor expõe a mesma API REST na porta configurada (PORT, default 8090) e o mesmo endpoint /health.

O que muda entre as modalidades é onde cada "store" guarda seu estado:

StoreIn-memorySQLitePostgresCluster
Relatórios RAM Arquivo .db Tabela Postgres Tabela Postgres
Tokens JWTRAMRAMTabela PostgresTabela Postgres
Job queueRAMRAMTabela PostgresTabela Postgres
Share linksRAMRAMRAMTabela Postgres
Binários de shareRAMRAMRAMS3
Rate limitRAMRAMRAMTabela Postgres

Exemplos prontos#

Todos os exemplos abaixo usam o mesmo Dockerfile em examples/server/ e os mesmos 25 relatórios de demonstração. Basta escolher o docker-compose da modalidade desejada.

examples/server/
  docker-compose.memory.yml    ← in-memory
  docker-compose.sqlite.yml    ← SQLite
  docker-compose.postgres.yml  ← PostgreSQL single-node
  docker-compose.cluster.yml   ← cluster com Traefik + MinIO

Ver também#