Skip to content

Commit d7a8be2

Browse files
Add production installation script and enhance documentation
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
1 parent 7afbab0 commit d7a8be2

File tree

2 files changed

+210
-0
lines changed

2 files changed

+210
-0
lines changed

INSTALLATION.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,30 @@ Se você encontrar problemas não listados aqui:
309309
2. Verifique as issues abertas no GitHub: https://github.com/scieloorg/markapi/issues
310310
3. Abra uma nova issue descrevendo o problema em detalhes
311311

312+
## Instalação em Produção
313+
314+
**AVISO**: A instalação em produção requer considerações adicionais de segurança e configuração.
315+
316+
### Opções de Deployment
317+
318+
1. **Docker Compose (Produção)**: Use `install-production.sh` (se disponível production.yml)
319+
2. **Kubernetes**: Veja configurações na pasta `kubernetes/` para deployment em cluster
320+
321+
### Considerações importantes para produção:
322+
323+
- **Segurança**: Altere TODAS as senhas e chaves secretas
324+
- **HTTPS**: Configure SSL/TLS (recomendado: Let's Encrypt)
325+
- **Backup**: Configure backups automáticos do banco de dados
326+
- **Monitoramento**: Configure Sentry ou outra ferramenta de monitoramento
327+
- **Firewall**: Configure regras apropriadas de firewall
328+
- **Domínio**: Configure DNS e ALLOWED_HOSTS corretamente
329+
- **Email**: Configure um servidor SMTP real (não use MailHog)
330+
- **Recursos**: Dimensione adequadamente CPU, memória e disco
331+
332+
Para instruções detalhadas de produção, consulte:
333+
- [Docker deployment guide](http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-docker.html)
334+
- Configurações de Kubernetes na pasta `kubernetes/`
335+
312336
## Informações Técnicas
313337

314338
- **Python**: 3.11

install-production.sh

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
#!/bin/bash
2+
3+
#############################################
4+
# MarkAPI - Script de Instalação para Produção
5+
# Para usuários finais (não desenvolvedores)
6+
#############################################
7+
8+
set -e
9+
10+
# Cores para output
11+
GREEN='\033[0;32m'
12+
YELLOW='\033[1;33m'
13+
RED='\033[0;31m'
14+
NC='\033[0m' # No Color
15+
16+
# Função para imprimir mensagens
17+
print_message() {
18+
echo -e "${GREEN}[MarkAPI]${NC} $1"
19+
}
20+
21+
print_warning() {
22+
echo -e "${YELLOW}[AVISO]${NC} $1"
23+
}
24+
25+
print_error() {
26+
echo -e "${RED}[ERRO]${NC} $1"
27+
}
28+
29+
# Banner
30+
echo "============================================"
31+
echo " MarkAPI - Instalação para PRODUÇÃO"
32+
echo "============================================"
33+
echo ""
34+
print_warning "ATENÇÃO: Este script é para instalação em ambiente de PRODUÇÃO!"
35+
print_warning "Certifique-se de que está executando em um servidor apropriado."
36+
echo ""
37+
read -p "Deseja continuar? (s/n): " -n 1 -r
38+
echo
39+
if [[ ! $REPLY =~ ^[Ss]$ ]]; then
40+
echo "Instalação cancelada."
41+
exit 0
42+
fi
43+
44+
# Verificar se Docker está instalado
45+
print_message "Verificando dependências..."
46+
if ! command -v docker &> /dev/null; then
47+
print_error "Docker não está instalado. Por favor, instale Docker primeiro:"
48+
echo " https://docs.docker.com/get-docker/"
49+
exit 1
50+
fi
51+
52+
if ! command -v docker compose &> /dev/null && ! command -v docker-compose &> /dev/null; then
53+
print_error "Docker Compose não está instalado. Por favor, instale Docker Compose primeiro:"
54+
echo " https://docs.docker.com/compose/install/"
55+
exit 1
56+
fi
57+
58+
print_message "Docker e Docker Compose encontrados ✓"
59+
60+
# Verificar se production.yml existe
61+
if [ ! -f "production.yml" ]; then
62+
print_error "Arquivo production.yml não encontrado!"
63+
print_warning "Este repositório não possui um arquivo production.yml configurado."
64+
print_warning "Você precisará criar um arquivo production.yml baseado no local.yml"
65+
print_warning "ou usar Kubernetes para deploy em produção (veja pasta kubernetes/)."
66+
exit 1
67+
fi
68+
69+
# Verificar se os arquivos de configuração existem
70+
if [ ! -f ".envs/.production/.django" ] || [ ! -f ".envs/.production/.postgres" ]; then
71+
print_warning "Arquivos de configuração não encontrados."
72+
print_message "Criando arquivos de configuração a partir dos exemplos..."
73+
74+
# Criar diretórios se não existirem
75+
mkdir -p .envs/.production
76+
77+
# Copiar arquivos de exemplo se existirem
78+
if [ -f ".envs/.production/.django.example" ]; then
79+
cp .envs/.production/.django.example .envs/.production/.django
80+
print_message "Arquivo .django criado ✓"
81+
else
82+
print_error "Arquivo de exemplo .envs/.production/.django.example não encontrado!"
83+
exit 1
84+
fi
85+
86+
if [ -f ".envs/.production/.postgres.example" ]; then
87+
cp .envs/.production/.postgres.example .envs/.production/.postgres
88+
print_message "Arquivo .postgres criado ✓"
89+
else
90+
print_error "Arquivo de exemplo .envs/.production/.postgres.example não encontrado!"
91+
exit 1
92+
fi
93+
94+
print_message "Arquivos de configuração criados."
95+
echo ""
96+
print_warning "=========================================="
97+
print_warning "IMPORTANTE - CONFIGURAÇÃO DE SEGURANÇA"
98+
print_warning "=========================================="
99+
print_warning "Você DEVE editar os seguintes arquivos ANTES de continuar:"
100+
print_warning " - .envs/.production/.django"
101+
print_warning " - .envs/.production/.postgres"
102+
echo ""
103+
print_warning "Especialmente, altere:"
104+
print_warning " 1. DJANGO_SECRET_KEY - para uma string longa e aleatória"
105+
print_warning " 2. POSTGRES_PASSWORD - para uma senha forte"
106+
print_warning " 3. DJANGO_ADMIN_URL - para um URL secreto"
107+
print_warning " 4. CELERY_FLOWER_PASSWORD - para uma senha forte"
108+
print_warning " 5. DJANGO_ALLOWED_HOSTS - para o domínio do seu servidor"
109+
print_warning "=========================================="
110+
echo ""
111+
read -p "Pressione ENTER SOMENTE após revisar e editar os arquivos de configuração..."
112+
fi
113+
114+
# Verificar configurações críticas
115+
print_message "Verificando configurações de segurança..."
116+
if grep -q "CHANGE_THIS" .envs/.production/.django || grep -q "CHANGE_THIS" .envs/.production/.postgres; then
117+
print_error "ERRO: Ainda há valores padrão nos arquivos de configuração!"
118+
print_error "Você DEVE alterar todas as senhas e configurações antes de continuar."
119+
exit 1
120+
fi
121+
122+
print_message "Configurações básicas verificadas ✓"
123+
124+
# Criar diretório de dados se não existir
125+
print_message "Configurando diretórios de dados..."
126+
mkdir -p ../scms_data/markapi/data_production
127+
mkdir -p ../scms_data/markapi/data_production_backup
128+
129+
# Construir as imagens Docker
130+
print_message "Construindo as imagens Docker (isso pode levar alguns minutos)..."
131+
docker compose -f production.yml build
132+
133+
# Iniciar os containers
134+
print_message "Iniciando os containers..."
135+
docker compose -f production.yml up -d
136+
137+
# Aguardar o banco de dados estar pronto
138+
print_message "Aguardando banco de dados estar pronto..."
139+
sleep 15
140+
141+
# Executar migrações
142+
print_message "Executando migrações do banco de dados..."
143+
docker compose -f production.yml run --rm django python manage.py migrate
144+
145+
# Sincronizar campos Wagtail
146+
print_message "Sincronizando campos de tradução do Wagtail..."
147+
docker compose -f production.yml run --rm django python manage.py update_translation_fields || true
148+
docker compose -f production.yml run --rm django python manage.py sync_page_translation_fields || true
149+
150+
# Compilar mensagens de tradução
151+
print_message "Compilando mensagens de tradução..."
152+
docker compose -f production.yml run --rm django python manage.py compilemessages || true
153+
154+
# Coletar arquivos estáticos
155+
print_message "Coletando arquivos estáticos..."
156+
docker compose -f production.yml run --rm django python manage.py collectstatic --noinput
157+
158+
# Verificar status
159+
print_message "Verificando status dos containers..."
160+
docker compose -f production.yml ps
161+
162+
echo ""
163+
echo "============================================"
164+
print_message "Instalação concluída com sucesso!"
165+
echo "============================================"
166+
echo ""
167+
print_warning "PRÓXIMOS PASSOS IMPORTANTES:"
168+
echo ""
169+
echo "1. Crie um superusuário (administrador):"
170+
echo " docker compose -f production.yml run --rm django python manage.py createsuperuser"
171+
echo ""
172+
echo "2. Configure seu servidor web reverso (Nginx/Apache) se necessário"
173+
echo ""
174+
echo "3. Configure SSL/TLS para HTTPS"
175+
echo ""
176+
echo "4. Configure backups regulares do banco de dados"
177+
echo ""
178+
echo "5. Configure monitoramento (Sentry, se disponível)"
179+
echo ""
180+
echo "Para ver os logs da aplicação, execute:"
181+
echo " docker compose -f production.yml logs -f"
182+
echo ""
183+
echo "Para parar a aplicação, execute:"
184+
echo " docker compose -f production.yml stop"
185+
echo ""
186+
echo "============================================"

0 commit comments

Comments
 (0)