Sign inSign up

fabioviniciusfsiqueira/nutriai-stack:latest

Manifest digest

sha256:16185842e7db6145b1f1383de1050af76ee4c6c75b7d034253ad3150389fa879

Last pushed

12 days by fabioviniciusfsiqueira

Type

Compose

Manifest digest

sha256:16185842e7db6145b1f1383de1050af76ee4c6c75b7d034253ad3150389fa879

Compose file content

# 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 commands

docker compose -f oci://fabioviniciusfsiqueira/nutriai-stack:latest up

Use the above command to pull and run the Compose file. Learn more⁠.

Images used

Image + 1 more

The PostgreSQL object-relational database system provides reliability and data integrity.


Pulls

1B+

Stars

15034

Last Updated

about 3 hours

Image


Pulls

309

Stars

0

Last Updated

12 days

Image


Pulls

272

Stars

0

Last Updated

12 days

Image


Pulls

188

Stars

0

Last Updated

12 days