Pular para o conteúdo principal

Manual de Instalação e Configuração

Documento: Manual de Instalação e Configuração Sistema: Módulo Empreendedorismo Versão: 1.0 Data: Janeiro/2025


1. Introdução

1.1. Objetivo

Este manual tem como objetivo fornecer instruções detalhadas para a instalação, configuração e implantação do sistema Módulo Empreendedorismo em ambientes de desenvolvimento, homologação e produção.

1.2. Escopo

Este documento abrange:

  • Requisitos de hardware e software
  • Procedimentos de instalação
  • Configuração de todos os componentes do sistema
  • Validação da instalação
  • Procedimentos de atualização

1.3. Público-Alvo

  • Administradores de sistemas
  • Equipe de DevOps
  • Desenvolvedores

1.4. Documentos Relacionados

DocumentoDescrição
Manual de ConfiguraçãoDetalhamento de variáveis de ambiente
Plano de ContingênciaProcedimentos de recuperação
Documentação TécnicaArquitetura e especificações

2. Requisitos

2.1. Requisitos de Hardware

2.1.1. Ambiente de Desenvolvimento

RecursoMínimoRecomendado
Processador2 cores4 cores
Memória RAM4 GB8 GB
Armazenamento20 GB SSD50 GB SSD
Rede10 Mbps100 Mbps

2.1.2. Ambiente de Homologação

RecursoMínimoRecomendado
Processador4 cores8 cores
Memória RAM8 GB16 GB
Armazenamento50 GB SSD100 GB SSD
Rede100 Mbps1 Gbps

2.1.3. Ambiente de Produção

RecursoMínimoRecomendado
Processador8 cores16 cores
Memória RAM16 GB32 GB
Armazenamento100 GB SSD500 GB SSD
Rede1 Gbps10 Gbps
BackupStorage externoStorage redundante

2.2. Requisitos de Software

2.2.1. Sistema Operacional

SistemaVersãoSuporte
Ubuntu Server22.04 LTS ou superiorRecomendado
Debian12 ou superiorSuportado
Windows Server2022Suportado
macOS13+Apenas desenvolvimento

2.2.2. Software Obrigatório

SoftwareVersãoFinalidade
Docker24.0+Containerização
Docker Compose2.0+Orquestração de containers
Git2.40+Controle de versão

2.2.3. Software Opcional

SoftwareVersãoFinalidade
Node.js20.0+Desenvolvimento frontend/docs
Python3.11+Desenvolvimento backend local
Nginx1.24+Proxy reverso (produção)

2.3. Requisitos de Rede

2.3.1. Portas Utilizadas

PortaServiçoProtocoloExposição
80HTTP (Nginx)TCPExterna
443HTTPS (Nginx)TCPExterna
5432PostgreSQLTCPInterna
6379RedisTCPInterna
8000Backend DjangoTCPInterna
9000MinIO APITCPInterna
9001MinIO ConsoleTCPInterna/Admin
9501FrontendTCPInterna

2.3.2. Conectividade Externa

ServiçoDestinoPortaFinalidade
SMTPServidor de email587/465Envio de emails
DNSServidor DNS53Resolução de nomes
NTPServidor NTP123Sincronização de horário

3. Procedimento de Instalação

3.1. Preparação do Ambiente

3.1.1. Atualização do Sistema Operacional

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

# Instalar dependências básicas
sudo apt install -y curl wget git apt-transport-https ca-certificates gnupg lsb-release

3.1.2. Instalação do Docker

# Adicionar repositório oficial do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instalar Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Adicionar usuário ao grupo docker
sudo usermod -aG docker $USER

# Verificar instalação
docker --version
docker compose version

3.1.3. Configuração de Firewall

# UFW (Ubuntu)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# Verificar status
sudo ufw status

3.2. Instalação do Sistema

3.2.1. Obtenção do Código-Fonte

# Criar diretório de aplicação
sudo mkdir -p /opt/modulo-empreendedorismo
sudo chown $USER:$USER /opt/modulo-empreendedorismo

# Clonar repositório
cd /opt
git clone https://github.com/Tav-Web/modulo-empreendedorismo.git
cd modulo-empreendedorismo

3.2.2. Configuração do Docker Compose

# Copiar arquivo de exemplo
cp docker-compose.example.yml docker-compose.yml

# Editar configurações
nano docker-compose.yml

3.2.3. Geração de Credenciais Seguras

# Gerar SECRET_KEY do Django
python3 -c "import secrets; print(secrets.token_urlsafe(50))"

# Gerar senha para PostgreSQL
openssl rand -base64 32

# Gerar senha para MinIO
openssl rand -base64 32

3.2.4. Configuração das Variáveis de Ambiente

Edite o arquivo docker-compose.yml e configure as seguintes variáveis:

Banco de Dados (PostgreSQL)

db:
environment:
POSTGRES_DB: empreendedorismo
POSTGRES_USER: postgres
POSTGRES_PASSWORD: <SENHA_GERADA>

Backend (Django)

backend:
environment:
SECRET_KEY: <SECRET_KEY_GERADA>
DEBUG: "False"
ALLOWED_HOSTS: "seu-dominio.com,localhost"
DB_HOST: db
DB_NAME: empreendedorismo
DB_USER: postgres
DB_PASSWORD: <MESMA_SENHA_DO_DB>

MinIO (Armazenamento)

minio:
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: <SENHA_MINIO>

Email (SMTP)

backend:
environment:
SMTP_HOST: smtp.seuservidor.com
SMTP_PORT: "587"
SMTP_USER: email@dominio.com
SMTP_PASSWORD: <SENHA_EMAIL>
DEFAULT_FROM_EMAIL: noreply@dominio.com

3.3. Inicialização do Sistema

3.3.1. Construção das Imagens

# Construir todas as imagens
docker compose build --no-cache

# Verificar imagens criadas
docker images | grep modulo

3.3.2. Inicialização dos Containers

# Iniciar todos os serviços
docker compose up -d

# Verificar status dos containers
docker compose ps

# Verificar logs de inicialização
docker compose logs -f

3.3.3. Execução das Migrations

# Aguardar banco de dados inicializar (30 segundos)
sleep 30

# Executar migrations
docker compose exec backend python manage.py migrate

# Verificar migrations aplicadas
docker compose exec backend python manage.py showmigrations

3.3.4. Configuração do MinIO

# Configurar buckets e políticas
docker compose exec backend python manage.py setup_minio

3.3.5. Criação do Superusuário

# Criar administrador do sistema
docker compose exec backend python manage.py createsuperuser

# Informar:
# - Email
# - Senha (mínimo 8 caracteres)

3.3.6. Coleta de Arquivos Estáticos

# Coletar arquivos estáticos
docker compose exec backend python manage.py collectstatic --noinput

4. Configuração de Produção

4.1. Configuração do Nginx

4.1.1. Instalação do Nginx

sudo apt install -y nginx
sudo systemctl enable nginx

4.1.2. Configuração do Virtual Host

Crie o arquivo /etc/nginx/sites-available/modulo-empreendedorismo:

upstream backend {
server 127.0.0.1:8000;
}

upstream frontend {
server 127.0.0.1:9501;
}

upstream minio {
server 127.0.0.1:9000;
}

server {
listen 80;
server_name seu-dominio.com www.seu-dominio.com;

# Redirecionar para HTTPS
return 301 https://$server_name$request_uri;
}

server {
listen 443 ssl http2;
server_name seu-dominio.com www.seu-dominio.com;

# Certificados SSL
ssl_certificate /etc/letsencrypt/live/seu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seu-dominio.com/privkey.pem;

# Configurações SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

# Headers de segurança
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# Logs
access_log /var/log/nginx/modulo-empreendedorismo.access.log;
error_log /var/log/nginx/modulo-empreendedorismo.error.log;

# Tamanho máximo de upload
client_max_body_size 100M;

# Frontend
location / {
proxy_pass http://frontend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}

# API Backend
location /api {
proxy_pass http://backend;
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;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}

# Arquivos estáticos do Django
location /static {
proxy_pass http://backend;
proxy_set_header Host $host;
expires 30d;
add_header Cache-Control "public, immutable";
}

# MinIO - Arquivos
location /files {
proxy_pass http://minio;
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;
}

# Documentação da API
location /api/docs {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}

4.1.3. Ativação do Site

# Criar link simbólico
sudo ln -s /etc/nginx/sites-available/modulo-empreendedorismo /etc/nginx/sites-enabled/

# Testar configuração
sudo nginx -t

# Reiniciar Nginx
sudo systemctl restart nginx

4.2. Configuração de SSL/TLS

4.2.1. Instalação do Certbot

sudo apt install -y certbot python3-certbot-nginx

4.2.2. Obtenção do Certificado

sudo certbot --nginx -d seu-dominio.com -d www.seu-dominio.com

4.2.3. Renovação Automática

# Testar renovação
sudo certbot renew --dry-run

# Adicionar ao crontab (já configurado automaticamente pelo certbot)
sudo systemctl status certbot.timer

4.3. Configuração de Serviço Systemd

Crie o arquivo /etc/systemd/system/modulo-empreendedorismo.service:

[Unit]
Description=Módulo Empreendedorismo
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/modulo-empreendedorismo
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
# Ativar serviço
sudo systemctl daemon-reload
sudo systemctl enable modulo-empreendedorismo

5. Validação da Instalação

5.1. Checklist de Verificação

Execute os seguintes comandos para validar a instalação:

# 1. Verificar containers
docker compose ps

# Saída esperada: todos os serviços com status "Up"
# 2. Testar conectividade do banco de dados
docker compose exec backend python -c "
import django
django.setup()
from django.db import connection
cursor = connection.cursor()
cursor.execute('SELECT version()')
print('PostgreSQL:', cursor.fetchone()[0])
"
# 3. Testar Redis
docker compose exec backend python -c "
import redis
r = redis.Redis(host='redis', port=6379)
print('Redis PING:', r.ping())
"
# 4. Testar MinIO
docker compose exec backend python manage.py setup_minio
# 5. Testar API
curl -I http://localhost:8000/api/docs/
# Esperado: HTTP 200 OK
# 6. Testar Frontend
curl -I http://localhost:9501/
# Esperado: HTTP 200 OK

5.2. Testes Funcionais

TesteProcedimentoResultado Esperado
Login AdminAcessar /admin com superusuárioAcesso concedido
API DocsAcessar /api/docsSwagger UI carrega
FrontendAcessar página inicialInterface carrega
UploadEnviar arquivo no sistemaArquivo salvo no MinIO
EmailCadastrar usuárioEmail de confirmação enviado

6. Procedimentos de Atualização

6.1. Atualização Padrão

# 1. Backup do banco de dados
docker compose exec db pg_dump -U postgres empreendedorismo > backup_$(date +%Y%m%d_%H%M%S).sql

# 2. Parar containers
docker compose down

# 3. Atualizar código
git fetch origin
git pull origin main

# 4. Reconstruir imagens
docker compose build --no-cache

# 5. Iniciar containers
docker compose up -d

# 6. Executar migrations
docker compose exec backend python manage.py migrate

# 7. Coletar arquivos estáticos
docker compose exec backend python manage.py collectstatic --noinput

# 8. Verificar funcionamento
docker compose ps
curl -I http://localhost:8000/api/docs/

6.2. Rollback

Em caso de falha:

# 1. Parar containers
docker compose down

# 2. Reverter código
git checkout <commit_anterior>

# 3. Restaurar banco (se necessário)
cat backup_YYYYMMDD_HHMMSS.sql | docker compose exec -T db psql -U postgres empreendedorismo

# 4. Reconstruir e iniciar
docker compose build
docker compose up -d

7. Troubleshooting

7.1. Problemas Comuns

Container não inicia

# Verificar logs
docker compose logs <nome-do-container>

# Verificar recursos do sistema
docker system df
df -h
free -m

Erro de conexão com banco de dados

  1. Verificar se container PostgreSQL está rodando
  2. Verificar credenciais em docker-compose.yml
  3. Verificar logs do PostgreSQL:
docker compose logs db

Erro de permissão no MinIO

docker compose exec backend python manage.py setup_minio

Emails não são enviados

  1. Verificar configurações SMTP
  2. Verificar logs do Celery:
docker compose logs celery-worker-emails

7.2. Logs de Diagnóstico

# Todos os logs
docker compose logs

# Logs específicos com timestamp
docker compose logs -t --since="1h" backend

# Logs em tempo real
docker compose logs -f backend celery-worker

8. Anexos

8.1. Estrutura de Diretórios

/opt/modulo-empreendedorismo/
├── backend/
│ ├── apps/
│ ├── core/
│ ├── templates/
│ ├── requirements.txt
│ └── Dockerfile
├── frontend/
│ ├── src/
│ ├── package.json
│ └── Dockerfile
├── docs/
│ ├── docs/
│ └── docusaurus.config.ts
├── docker-compose.yml
├── docker-compose.example.yml
└── README.md

8.2. Comandos de Referência Rápida

AçãoComando
Iniciar sistemadocker compose up -d
Parar sistemadocker compose down
Ver logsdocker compose logs -f
Reiniciar serviçodocker compose restart <serviço>
Executar migrationsdocker compose exec backend python manage.py migrate
Criar superusuáriodocker compose exec backend python manage.py createsuperuser
Backup bancodocker compose exec db pg_dump -U postgres empreendedorismo > backup.sql
Shell Djangodocker compose exec backend python manage.py shell
Shell PostgreSQLdocker compose exec db psql -U postgres empreendedorismo

Fim do Documento