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ável | Descrição | Exemplo |
|---|---|---|
DEBUG | Modo debug | False |
SECRET_KEY | Chave secreta Django | <chave_segura> |
DATABASE_URL | URL do PostgreSQL | postgres://... |
REDIS_URL | URL do Redis | redis://... |
MINIO_ENDPOINT | Endpoint do MinIO | modulo-minio:9000 |
MINIO_ACCESS_KEY | Usuário MinIO | <usuario> |
MINIO_SECRET_KEY | Senha MinIO | <senha> |
ALLOWED_HOSTS | Hosts permitidos | api.seudominio.com |
CORS_ALLOWED_ORIGINS | Origens CORS | https://app.seudominio.com |
EMAIL_HOST | Servidor SMTP | smtp.gmail.com |
EMAIL_PORT | Porta SMTP | 587 |
EMAIL_HOST_USER | Usuário email | email@gmail.com |
EMAIL_HOST_PASSWORD | Senha email | <senha_app> |
Frontend
| Variável | Descrição | Exemplo |
|---|---|---|
VITE_API_URL | URL da API | https://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ço | Domínio |
|---|---|
| Frontend | app.seudominio.com |
| Backend API | api.seudominio.com |
| Documentação | docs.seudominio.com |
| MinIO Console | minio.seudominio.com |
Deploy Automático
Configure webhooks no EasyPanel para deploy automático:
- No EasyPanel, vá em Settings > Webhooks
- Copie a URL do webhook
- No GitHub, vá em Settings > Webhooks
- Adicione um novo webhook com a URL copiada
- Selecione eventos:
pushpara a branchmain
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