Guias
Implantar com Docker Compose
Implantação de produção em host único com o docker-compose.prod.yml e o install.sh incluídos.
Tem um servidor potente e quer rodar o AskAIs Customer Service em 10 minutos? Este é o caminho. Bom para menos de ~500 visitantes simultâneos; para uma escala maior, vá para o guia do Kubernetes.
Pré-requisitos
- Um host Linux com Docker 24+ e `docker compose` v2
- ≥ 2 vCPU, 4 GB de RAM (8 GB recomendados)
- Um domínio apontando para o host (para TLS via Caddy / Cloudflare / nginx)
Instalação em uma linha
git clone https://github.com/singlink/singlink
cd singlink
APP_DOMAIN=chat.acme.com bash scripts/install.shO script:
- Verifica docker + openssl
- Gera o
.env.prodcom segredos aleatórios fortes (modo 600) - Constrói as três imagens (web / ws / worker)
- Sobe toda a stack com
docker compose -f docker-compose.prod.yml up -d - Executa
prisma migrate deploydentro do contêiner web
O que roda
- postgres — pgvector PG16
- redis — pub/sub + fila (protegido por senha)
- minio — armazenamento compatível com S3 para anexos
- web / ws / worker — os três processos da aplicação
- nginx — proxy reverso na porta 8080 com upgrade de WS
Adicionando TLS
O nginx incluído termina HTTP/1.1 na porta 8080. Coloque um proxy de terminação TLS na frente:
Caddy (mais fácil)
# /etc/caddy/Caddyfile
chat.acme.com {
reverse_proxy localhost:8080
}Cloudflare Tunnel (sem nenhuma porta de entrada)
cloudflared tunnel create singlink
cloudflared tunnel route dns singlink chat.acme.com
cloudflared tunnel run --url http://localhost:8080 singlinkOperações Day-2
# Logs
docker compose -f docker-compose.prod.yml logs -f
# Restart everything
docker compose -f docker-compose.prod.yml restart
# Stop (data persists in named volumes)
docker compose -f docker-compose.prod.yml down
# Upgrade
git pull
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --build
docker compose -f docker-compose.prod.yml exec web pnpm db:deploy
# Backups (run from cron daily)
docker compose -f docker-compose.prod.yml exec -T postgres \
pg_dump -U singlink singlink | gzip > /backups/singlink-$(date +%F).sql.gzEscalando os workers
Execute mais réplicas do worker de IA (o Redis BullMQ cuida da distribuição):
docker compose -f docker-compose.prod.yml up -d --scale worker=4Quando migrar para o Kubernetes
- Você precisa de postgres / redis em HA (RDS / ElastiCache gerenciados)
- Você precisa de autoescala durante picos de tráfego
- Você o executa em várias regiões
- A indisponibilidade de um host único é inaceitável para o seu SLA
Então vá para Kubernetes / Helm.