Pular para o conteúdo principal

Deploy com EasyPanel

Este guia descreve como fazer deploy do Módulo Empreendedorismo usando EasyPanel.

Pré-requisitos

  • Servidor com EasyPanel instalado
  • Domínio configurado
  • Acesso SSH ao servidor

Estrutura de Deploy

┌─────────────────────────────────────────────────────────────────┐
│ EASYPANEL │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Backend │ │ Frontend │ │ Docs │ │
│ │ (Django) │ │ (React) │ │ (Docusaurus)│ │
│ │ :8000 │ │ :80 │ │ :80 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ │ │
│ ┌─────────────┐ │
│ │ Traefik │ │
│ │ (Proxy) │ │
│ └─────────────┘ │
│ │ │
├──────────────────────────┼──────────────────────────────────────┤
│ │ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ PostgreSQL │ │ Redis │ │ MinIO │ │
│ │ :5432 │ │ :6379 │ │ :9000/:9001 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Configuração dos Serviços

1. PostgreSQL

No EasyPanel, crie um novo serviço PostgreSQL:

Configurações:

  • Nome: modulo-db
  • Imagem: postgres:16-alpine
  • Variáveis de ambiente:
    POSTGRES_DB=modulo_empreendedorismo
    POSTGRES_USER=postgres
    POSTGRES_PASSWORD=<senha_segura>
  • Volume: /var/lib/postgresql/data

2. Redis

Configurações:

  • Nome: modulo-redis
  • Imagem: redis:7-alpine
  • Porta interna: 6379

3. MinIO

Configurações:

  • Nome: modulo-minio
  • Imagem: minio/minio
  • Comando: server /data --console-address ":9001"
  • Variáveis de ambiente:
    MINIO_ROOT_USER=<usuario>
    MINIO_ROOT_PASSWORD=<senha_segura>
  • Portas:
    • 9000 (API)
    • 9001 (Console)
  • Volume: /data

4. Backend (Django)

Configurações:

  • Nome: modulo-backend
  • Source: Git repository
  • Dockerfile: backend/Dockerfile
  • Variáveis de ambiente:
    DEBUG=False
    SECRET_KEY=<chave_secreta>
    DATABASE_URL=postgres://postgres:<senha>@modulo-db:5432/modulo_empreendedorismo
    REDIS_URL=redis://modulo-redis:6379/0
    CELERY_BROKER_URL=redis://modulo-redis:6379/0
    MINIO_ENDPOINT=modulo-minio:9000
    MINIO_ACCESS_KEY=<usuario_minio>
    MINIO_SECRET_KEY=<senha_minio>
    ALLOWED_HOSTS=api.seudominio.com
    CORS_ALLOWED_ORIGINS=https://app.seudominio.com
  • Porta: 8000
  • Domínio: api.seudominio.com

5. Celery Worker

Configurações:

  • Nome: modulo-celery
  • Source: Git repository
  • Dockerfile: backend/Dockerfile
  • Comando: celery -A core worker -l info -Q default,reports,emails
  • Variáveis de ambiente: (mesmas do backend)

6. Celery Beat

Configurações:

  • Nome: modulo-celery-beat
  • Source: Git repository
  • Dockerfile: backend/Dockerfile
  • Comando: celery -A core beat -l info
  • Variáveis de ambiente: (mesmas do backend)

7. Frontend (React)

Configurações:

  • Nome: modulo-frontend
  • Source: Git repository
  • Dockerfile: frontend/Dockerfile
  • Variáveis de build:
    VITE_API_URL=https://api.seudominio.com/api
  • Porta: 80
  • Domínio: app.seudominio.com

8. Documentação (Docusaurus)

Configurações:

  • Nome: modulo-docs
  • Source: Git repository
  • Dockerfile: docs/Dockerfile
  • Porta: 80
  • Domínio: docs.seudominio.com

Dockerfile da Documentação

docs/Dockerfile
# Stage 1: Build
FROM node:20-alpine AS builder

WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

# Stage 2: Production
FROM nginx:alpine AS production

COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build /usr/share/nginx/html

EXPOSE 80

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:80/ || exit 1

CMD ["nginx", "-g", "daemon off;"]

Variáveis de Ambiente (Produção)

Backend

VariávelDescriçãoExemplo
DEBUGModo debugFalse
SECRET_KEYChave secreta Django<chave_segura>
DATABASE_URLURL do PostgreSQLpostgres://...
REDIS_URLURL do Redisredis://...
MINIO_ENDPOINTEndpoint do MinIOmodulo-minio:9000
MINIO_ACCESS_KEYUsuário MinIO<usuario>
MINIO_SECRET_KEYSenha MinIO<senha>
ALLOWED_HOSTSHosts permitidosapi.seudominio.com
CORS_ALLOWED_ORIGINSOrigens CORShttps://app.seudominio.com
EMAIL_HOSTServidor SMTPsmtp.gmail.com
EMAIL_PORTPorta SMTP587
EMAIL_HOST_USERUsuário emailemail@gmail.com
EMAIL_HOST_PASSWORDSenha email<senha_app>

Frontend

VariávelDescriçãoExemplo
VITE_API_URLURL da APIhttps://api.seudominio.com/api

SSL/TLS

O EasyPanel configura automaticamente certificados SSL via Let's Encrypt quando você configura um domínio.

Domínios Sugeridos

ServiçoDomínio
Frontendapp.seudominio.com
Backend APIapi.seudominio.com
Documentaçãodocs.seudominio.com
MinIO Consoleminio.seudominio.com

Deploy Automático

Configure webhooks no EasyPanel para deploy automático:

  1. No EasyPanel, vá em Settings > Webhooks
  2. Copie a URL do webhook
  3. No GitHub, vá em Settings > Webhooks
  4. Adicione um novo webhook com a URL copiada
  5. Selecione eventos: push para a branch main

Monitoramento

Logs

# Via EasyPanel UI ou:
docker logs modulo-backend -f
docker logs modulo-celery -f

Health Checks

Configure health checks no EasyPanel:

  • Backend: GET /api/health/
  • Frontend: GET /
  • Docs: GET /

Backup

PostgreSQL

# Backup manual
docker exec modulo-db pg_dump -U postgres modulo_empreendedorismo > backup.sql

# Restore
docker exec -i modulo-db psql -U postgres modulo_empreendedorismo < backup.sql

MinIO

Configure backup automático do volume do MinIO no EasyPanel.

Checklist de Deploy

  • PostgreSQL configurado e rodando
  • Redis configurado e rodando
  • MinIO configurado com bucket criado
  • Backend rodando e migrações aplicadas
  • Celery workers rodando
  • Frontend buildado e servindo
  • Documentação buildada e servindo
  • SSL configurado para todos os domínios
  • Health checks configurados
  • Backup configurado
  • Webhooks para CI/CD