124 lines
3.1 KiB
Markdown
124 lines
3.1 KiB
Markdown
# 🚀 Guia de Deploy em Produção
|
||
|
||
## Configuração para Produção
|
||
|
||
Este aplicativo foi otimizado para rodar em produção com máxima segurança.
|
||
|
||
### 1️⃣ Preparar Arquivo .env
|
||
|
||
Crie um arquivo `.env` na raiz do projeto com as configurações seguras:
|
||
|
||
```env
|
||
# Django
|
||
DEBUG=False
|
||
SECRET_KEY=gera-uma-chave-segura-com-32-caracteres-aleatorios-aqui
|
||
ALLOWED_HOSTS=seu-dominio.com,www.seu-dominio.com,seu-ip.com
|
||
|
||
# API Suprimentos
|
||
API_SUPRIMENTOS_TOKEN=seu-token-aqui
|
||
API_SUPRIMENTOS_DETALHE_URL=https://api.grupoginseng.com.br/api/suprimentos_detalhepedido?limit=50000&status=pendente
|
||
API_SUPRIMENTOS_IMPLANTACAO_URL=https://api.grupoginseng.com.br/api/vw_suprimentos_implantacaopedido?limit=50000
|
||
|
||
# SQL Server (deixe em branco se usar SQLite)
|
||
SQL_SERVER_HOST=10.77.77.10
|
||
SQL_SERVER_DATABASE=GINSENG
|
||
SQL_SERVER_USERNAME=suprimentos
|
||
SQL_SERVER_PASSWORD=sua-senha-segura
|
||
```
|
||
|
||
**⚠️ IMPORTANTE:**
|
||
- **Gere uma SECRET_KEY segura** (mínimo 50 caracteres aleatórios)
|
||
- **NUNCA** commit o arquivo `.env` em repositórios públicos
|
||
- Está no `.gitignore`, portanto será automaticamente ignorado
|
||
|
||
### 2️⃣ Gerar SECRET_KEY Segura
|
||
|
||
```python
|
||
from django.core.management.utils import get_random_secret_key
|
||
print(get_random_secret_key())
|
||
```
|
||
|
||
### 3️⃣ Build e Deploy com Docker
|
||
|
||
```bash
|
||
# Build da imagem
|
||
docker-compose build
|
||
|
||
# Iniciar em produção
|
||
docker-compose up -d
|
||
|
||
# Verificar logs
|
||
docker-compose logs -f web
|
||
|
||
# Parar
|
||
docker-compose down
|
||
```
|
||
|
||
### 4️⃣ Verificações de Segurança
|
||
|
||
Antes de publicar, verifique:
|
||
|
||
```bash
|
||
python manage.py check --deploy
|
||
```
|
||
|
||
Deve exibir:
|
||
- ✅ DEBUG=False
|
||
- ✅ SECRET_KEY configurada
|
||
- ✅ ALLOWED_HOSTS definidos
|
||
- ✅ Cookies seguros habilitados
|
||
|
||
### 5️⃣ Reverse Proxy (Nginx Recomendado)
|
||
|
||
Para produção, use um **reverse proxy** (Nginx) na frente do Gunicorn:
|
||
|
||
```nginx
|
||
upstream aprovacao_pedidos {
|
||
server web:8000;
|
||
}
|
||
|
||
server {
|
||
listen 80;
|
||
server_name seu-dominio.com;
|
||
|
||
location / {
|
||
proxy_pass http://aprovacao_pedidos;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||
proxy_set_header X-Forwarded-Proto $scheme;
|
||
}
|
||
|
||
location /static/ {
|
||
alias /app/staticfiles/;
|
||
}
|
||
}
|
||
```
|
||
|
||
## Mudanças Implementadas ✅
|
||
|
||
| Aspecto | Antes | Depois |
|
||
|--------|-------|--------|
|
||
| Servidor WSGI | `python manage.py runserver` | `gunicorn` (4x mais rápido) |
|
||
| Modo DEBUG | `True` (inseguro) | `False` (seguro) |
|
||
| SECRET_KEY | Hardcoded/exposta | Variável de ambiente |
|
||
| ALLOWED_HOSTS | `['*']` (inseguro) | Domínios específicos |
|
||
| Credenciais | Código-fonte | Arquivo `.env` (ignorado) |
|
||
| Cookies HTTPS | Não | Sim (em produção) |
|
||
| Volumes Docker | Expõe código | Removido (apenas em dev) |
|
||
|
||
## Troubleshooting
|
||
|
||
**Erro: "DisallowedHost"**
|
||
- Adicione seu domínio em `ALLOWED_HOSTS`
|
||
|
||
**Erro: "SECRET_KEY not found"**
|
||
- Crie arquivo `.env` com `SECRET_KEY`
|
||
|
||
**Erro: "Connection refused"**
|
||
- Verifique se Gunicorn está rodando: `docker-compose logs web`
|
||
|
||
---
|
||
|
||
**📝 Próximos passos:** Usar HTTPS/SSL, implementar CI/CD, monitorar logs
|