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