Docker

Início rápido

# Clone e inicie
git clone https://github.com/ZoenSpace/sim.git && cd sim
docker compose -f docker-compose.prod.yml up -d

Abra http://localhost:3000

Setup de produção

1. Configure o ambiente

# Gere os segredos
cat > .env << EOF
DATABASE_URL=postgresql://postgres:postgres@db:5432/simstudio
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 32)
INTERNAL_API_SECRET=$(openssl rand -hex 32)
NEXT_PUBLIC_APP_URL=https://sim.yourdomain.com
BETTER_AUTH_URL=https://sim.yourdomain.com
EOF

2. Inicie os serviços

docker compose -f docker-compose.prod.yml up -d

3. Configure SSL

O Caddy cuida automaticamente dos certificados SSL.

# Instale o Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install caddy

Crie /etc/caddy/Caddyfile:

sim.yourdomain.com {
    reverse_proxy localhost:3000

    handle /socket.io/* {
        reverse_proxy localhost:3002
    }
}
sudo systemctl restart caddy
# Instale
sudo apt install nginx certbot python3-certbot-nginx -y

# Crie /etc/nginx/sites-available/sim
server {
    listen 80;
    server_name sim.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /socket.io/ {
        proxy_pass http://127.0.0.1:3002;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

# Ative e obtenha o certificado
sudo ln -s /etc/nginx/sites-available/sim /etc/nginx/sites-enabled/
sudo certbot --nginx -d sim.yourdomain.com

Ollama

# Com GPU
docker compose -f docker-compose.ollama.yml --profile gpu --profile setup up -d

# Só CPU
docker compose -f docker-compose.ollama.yml --profile cpu --profile setup up -d

Baixe modelos adicionais:

docker compose -f docker-compose.ollama.yml exec ollama ollama pull llama3.2

Ollama externo

Se o Ollama roda na sua máquina host (fora do Docker):

# macOS/Windows
OLLAMA_URL=http://host.docker.internal:11434 docker compose -f docker-compose.prod.yml up -d

# Linux - use o IP do host
OLLAMA_URL=http://192.168.1.100:11434 docker compose -f docker-compose.prod.yml up -d

Dentro do Docker, localhost se refere ao container, não ao host. Use host.docker.internal ou o IP do host.

Comandos

# Ver logs
docker compose -f docker-compose.prod.yml logs -f simstudio

# Parar
docker compose -f docker-compose.prod.yml down

# Atualizar
docker compose -f docker-compose.prod.yml pull && docker compose -f docker-compose.prod.yml up -d

# Backup do banco
docker compose -f docker-compose.prod.yml exec db pg_dump -U postgres simstudio > backup.sql

Common Questions

Quatro serviços: simstudio (app principal na porta 3000, limite de 8 GB de memória), realtime (servidor WebSocket na porta 3002, limite de 1 GB), db (PostgreSQL 17 com pgvector na porta 5432) e migrations (roda uma vez para aplicar mudanças de schema e depois encerra).
Você pode usar Caddy (recomendado, cuida dos certificados automaticamente) ou Nginx com Certbot. Ambos precisam fazer reverse-proxy da porta 3000 para o app principal e da porta 3002 para conexões WebSocket no caminho /socket.io/.
Dentro de um container Docker, localhost se refere ao próprio container, não à máquina host. No macOS e Windows, use http://host.docker.internal:11434. No Linux, use o IP real da máquina host (ex.: http://192.168.1.100:11434).
O perfil GPU (--profile gpu) configura as capacidades do driver NVIDIA e reserva dispositivos GPU para inferência acelerada. O perfil CPU (--profile cpu) roda o Ollama sem aceleração por GPU. Ambos usam a flag --profile setup para baixar automaticamente o modelo inicial gemma3:4b.
Rode docker compose -f docker-compose.prod.yml pull para baixar as imagens mais recentes e depois docker compose -f docker-compose.prod.yml up -d para reiniciar com as novas versões. O container de migrations aplica automaticamente quaisquer mudanças novas de schema na inicialização.
Backup: docker compose -f docker-compose.prod.yml exec db pg_dump -U postgres simstudio > backup.sql. Restore: docker compose -f docker-compose.prod.yml exec -T db psql -U postgres simstudio < backup.sql. Os dados do banco ficam persistidos em um volume Docker chamado postgres_data.
Sim. O docker-compose.prod.yml usa defaults de variáveis de ambiente: POSTGRES_USER (padrão: postgres), POSTGRES_PASSWORD (padrão: postgres), POSTGRES_DB (padrão: simstudio) e POSTGRES_PORT (padrão: 5432). Defina esses valores no seu arquivo .env para sobrescrevê-los.

On this page