sha256:16185842e7db6145b1f1383de1050af76ee4c6c75b7d034253ad3150389fa879
Last pushed
12 days by fabioviniciusfsiqueira
Type
Compose
Manifest digest
sha256:16185842e7db6145b1f1383de1050af76ee4c6c75b7d034253ad3150389fa879
# Produção na VPS: Postgres + API + front + Caddy (HTTPS automático com Let's Encrypt nas portas 80/443).
# Tudo vai para o Docker Hub (imagens e este arquivo). Na máquina de desenvolvimento (front em ../nutriai-front),
# com POSTGRES_PASSWORD e JWT_SECRET definidos (qualquer valor serve para o build) e o API_DOMAIN REAL
# (vira o NEXT_PUBLIC_API_URL embutido no JavaScript do front; trocar o domínio exige novo build):
# docker compose -f docker-compose.prod.yml build api front caddy
# docker compose -f docker-compose.prod.yml publish -y fabioviniciusfsiqueira/nutriai-stack:latest
# Na VPS, numa pasta com o .env (variáveis abaixo):
# docker compose -p nutriai -f oci://docker.io/fabioviniciusfsiqueira/nutriai-stack:latest pull
# docker compose -p nutriai -f oci://docker.io/fabioviniciusfsiqueira/nutriai-stack:latest up -d
services:
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_USER: nutriai
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?defina POSTGRES_PASSWORD no .env.production}
POSTGRES_DB: nutriai
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U nutriai -d nutriai']
interval: 5s
timeout: 5s
retries: 10
api:
image: fabioviniciusfsiqueira/nutriai-api:${TAG:-latest}
build: .
restart: unless-stopped
# Valores do shell (VAR=... docker compose up) ou do --env-file.
environment:
PORT: 3001
DATABASE_URL: postgres://nutriai:${POSTGRES_PASSWORD}@postgres:5432/nutriai
JWT_SECRET: ${JWT_SECRET:?defina JWT_SECRET}
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
FRONTEND_URLS: https://${API_DOMAIN}
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
GOOGLE_CALLBACK_URL: https://${API_DOMAIN}/api/auth/google/callback
TOKEN_ENCRYPTION_KEY: ${TOKEN_ENCRYPTION_KEY:-}
HEALTH_SYNC_CRON: ${HEALTH_SYNC_CRON:-0 3 * * *}
HEALTH_SYNC_TIMEZONE: ${HEALTH_SYNC_TIMEZONE:-America/Sao_Paulo}
CHAT_ENABLED: ${CHAT_ENABLED:-true}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
ANTHROPIC_WORKSPACE_ID: ${ANTHROPIC_WORKSPACE_ID:-}
OBSERVE_APP_KEY: ${OBSERVE_APP_KEY:-}
OBSERVE_APP_SECRET: ${OBSERVE_APP_SECRET:-}
depends_on:
postgres:
condition: service_healthy
front:
image: fabioviniciusfsiqueira/nutriai-front:${TAG:-latest}
build:
context: ../nutriai-front
args:
NEXT_PUBLIC_API_URL: https://${API_DOMAIN}/api
# O mesmo CHAT_ENABLED da API; desligar ou religar o chat no front exige novo build.
NEXT_PUBLIC_CHAT_ENABLED: ${CHAT_ENABLED:-true}
restart: unless-stopped
caddy:
image: fabioviniciusfsiqueira/nutriai-proxy:${TAG:-latest}
build:
context: .
dockerfile: Dockerfile.caddy
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '443:443/udp'
environment:
API_DOMAIN: ${API_DOMAIN:?defina API_DOMAIN no .env.production}
volumes:
- caddy_data:/data
- caddy_config:/config
depends_on:
- api
- front
volumes:
pgdata:
caddy_data:
caddy_config:
docker compose -f oci://fabioviniciusfsiqueira/nutriai-stack:latest upUse the above command to pull and run the Compose file. Learn more.
The PostgreSQL object-relational database system provides reliability and data integrity.
Pulls
1B+
Stars
15034
Last Updated
about 3 hours