Pular para conteúdo

Deploy

Guia para deploy do Oraculo no Railway.

Arquitetura de Producao

graph TB
    subgraph Cloudflare
        DNS[DNS Records]
    end

    subgraph Railway
        FE[Frontend<br/>Next.js]
        PA[Platform API<br/>Spring Boot]
        TA[Tracker API<br/>Go Fiber]
        MA[Models API<br/>FastAPI]
        PG[(PostgreSQL)]
        MO[(MongoDB)]
        MN[(MinIO)]
    end

    DNS -->|oraculo.haussoftwarehouse.com| FE
    DNS -->|api.haussoftwarehouse.com| PA
    DNS -->|tracker.haussoftwarehouse.com| TA
    DNS -->|models.haussoftwarehouse.com| MA

    FE --> PA
    TA --> MA
    PA --> PG
    MA --> PG
    MA --> MO
    MA --> MN
    TA --> MO

Servicos no Railway

Cada componente e um servico independente no Railway:

Servico Diretorio Dockerfile Dominio
Frontend /app app/Dockerfile oraculo.haussoftwarehouse.com
Platform API /plataform-api plataform-api/Dockerfile api.haussoftwarehouse.com
Tracker API /tracker-api tracker-api/Dockerfile tracker.haussoftwarehouse.com
Models API /models-api models-api/Dockerfile models.haussoftwarehouse.com
PostgreSQL - Plugin Railway Internal
MongoDB - Plugin Railway Internal

Variaveis de Ambiente

Platform API

SPRING_DATASOURCE_URL=jdbc:postgresql://HOST:PORT/DATABASE
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=***
JWT_SECRET=chave-segura-producao-512bits
JWT_EXPIRATION=86400000
SERVER_PORT=8085

Tracker API

MONGO_URI=mongodb://user:pass@HOST:PORT/oraculo
FASTAPI_URL=http://models-api.railway.internal:8000
API_PORT=8282

Models API

DATABASE_URL=postgresql://user:pass@HOST:PORT/database
MONGO_URI=mongodb://user:pass@HOST:PORT/oraculo
MINIO_ENDPOINT=minio.railway.internal:9000
MINIO_ACCESS_KEY=***
MINIO_SECRET_KEY=***
MINIO_BUCKET=oraculo-models
API_PORT=8000

Frontend

NEXT_PUBLIC_API_URL=https://api.haussoftwarehouse.com
NEXT_PUBLIC_TRACKER_API_URL=https://tracker.haussoftwarehouse.com
NEXTAUTH_URL=https://oraculo.haussoftwarehouse.com
NEXTAUTH_SECRET=secret-seguro-producao

DNS (Cloudflare)

Configure os registros CNAME no Cloudflare apontando para os dominios fornecidos pelo Railway:

Tipo Nome Conteudo
CNAME oraculo {railway-domain-frontend}
CNAME api {railway-domain-platform-api}
CNAME tracker {railway-domain-tracker-api}
CNAME models {railway-domain-models-api}

Deploy da Documentacao (MKDocs)

Esta documentacao pode ser deployada como um servico adicional no Railway:

1. Crie o servico no Railway

Aponte para o diretorio /docs-mkdocs do repositorio.

2. Configure o dominio

oraculo-mk.haussoftwarehouse.com

3. Configure o Cloudflare

Tipo Nome Conteudo
CNAME oraculo-mk {railway-domain-docs}

4. Deploy

O Railway detectara automaticamente o Dockerfile e fara o build.

Health Checks

Configure health checks no Railway para cada servico:

Servico Endpoint Intervalo
Platform API /actuator/health 30s
Tracker API /health/ready 30s
Models API /health 30s
Frontend / 30s

Checklist de Producao

  • Alterar JWT secret (Platform API)
  • Alterar NextAuth secret (Frontend)
  • Configurar credenciais seguras para MinIO
  • Configurar credenciais seguras para MongoDB
  • Configurar credenciais seguras para PostgreSQL
  • Habilitar HTTPS em todos os dominios
  • Configurar CORS restritivo na Tracker API
  • Configurar alertas no Grafana
  • Testar health checks de todos os servicos
  • Verificar que o scheduler de treinamento esta ativo