Manual de Instalação e Configuração
Sistema Acesso ao Emprego - Portal de Talentos
| Informação | Detalhes |
|---|---|
| Versão do Documento | 1.0.0 |
| Data de Criação | Janeiro/2026 |
| Última Atualização | Janeiro/2026 |
| Classificação | Interno |
| Responsável | Equipe de Desenvolvimento |
1. Introdução
1.1 Objetivo
Este manual tem como objetivo fornecer instruções detalhadas para a instalação, configuração e operacionalização do Sistema Acesso ao Emprego em ambientes de desenvolvimento, homologação e produção.
1.2 Escopo
Este documento abrange:
- Requisitos de hardware e software
- Procedimentos de instalação do ambiente
- Configuração de serviços e dependências
- Verificação e validação da instalação
- Procedimentos de atualização
1.3 Público-Alvo
- Administradores de Sistemas
- Equipe de DevOps
- Desenvolvedores
- Equipe de Infraestrutura
1.4 Documentos Relacionados
| Documento | Descrição |
|---|---|
| Arquitetura do Sistema | Visão geral da arquitetura técnica |
| Manual de Operação | Procedimentos operacionais |
| Plano de Recuperação de Desastres | Procedimentos de contingência |
2. Requisitos do Sistema
2.1 Requisitos de Hardware
2.1.1 Ambiente de Desenvolvimento
| Componente | Mínimo | Recomendado |
|---|---|---|
| Processador | 2 cores | 4 cores |
| Memória RAM | 8 GB | 16 GB |
| Armazenamento | 50 GB SSD | 100 GB SSD |
| Rede | 100 Mbps | 1 Gbps |
2.1.2 Ambiente de Produção
| Componente | Mínimo | Recomendado |
|---|---|---|
| Processador | 4 cores | 8+ cores |
| Memória RAM | 16 GB | 32 GB |
| Armazenamento | 200 GB SSD | 500 GB SSD NVMe |
| Rede | 1 Gbps | 10 Gbps |
2.2 Requisitos de Software
2.2.1 Sistema Operacional
| Sistema | Versão Suportada |
|---|---|
| Ubuntu Server | 22.04 LTS ou superior |
| Debian | 11 ou superior |
| CentOS/RHEL | 8 ou superior |
| Windows Server | 2019 ou superior (com WSL2) |
2.2.2 Dependências Obrigatórias
| Software | Versão | Finalidade |
|---|---|---|
| Docker | 20.10+ | Containerização |
| Docker Compose | 2.0+ | Orquestração de containers |
| Git | 2.30+ | Controle de versão |
2.2.3 Dependências para Desenvolvimento Local (Opcional)
| Software | Versão | Finalidade |
|---|---|---|
| Python | 3.11.x | Runtime do backend |
| Node.js | 18.x LTS | Runtime do frontend |
| PostgreSQL | 14+ | Banco de dados |
| Redis | 7.0+ | Cache e filas |
2.3 Requisitos de Rede
2.3.1 Portas Necessárias
| Porta | Protocolo | Serviço | Direção |
|---|---|---|---|
| 22 | TCP | SSH | Inbound |
| 80 | TCP | HTTP | Inbound |
| 443 | TCP | HTTPS | Inbound |
| 5432 | TCP | PostgreSQL | Internal |
| 6379 | TCP | Redis | Internal |
| 8080 | TCP | Backend API | Internal |
| 5173 | TCP | Frontend Dev | Internal |
3. Preparação do Ambiente
3.1 Instalação do Sistema Operacional
3.1.1 Ubuntu Server 22.04 LTS
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
curl \
wget \
git \
htop \
vim \
unzip \
software-properties-common \
apt-transport-https \
ca-certificates \
gnupg \
lsb-release
sudo timedatectl set-timezone America/Sao_Paulo
3.2 Instalação do Docker
3.2.1 Instalação Automatizada
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
3.2.2 Verificação da Instalação
docker --version
docker-compose --version
docker run hello-world
3.3 Configuração de Firewall
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable
sudo ufw status verbose
4. Instalação do Sistema
4.1 Obtenção do Código-Fonte
sudo mkdir -p /opt/portal-talentos
cd /opt
sudo git clone https://github.com/Tav-Web/portal-talentos.git
sudo chown -R $USER:$USER /opt/portal-talentos
cd /opt/portal-talentos
4.2 Estrutura de Diretórios
/opt/portal-talentos/
├── backend/ # Aplicação Django
│ ├── app/ # Código da aplicação
│ ├── configs/ # Configurações
│ │ ├── docker/ # Dockerfiles
│ │ ├── env/ # Variáveis de ambiente
│ │ └── requirements.txt
│ ├── media/ # Arquivos de mídia
│ └── staticfiles/ # Arquivos estáticos
├── frontend/ # Aplicação React
│ ├── src/ # Código fonte
│ ├── public/ # Arquivos públicos
│ └── dist/ # Build de produção
├── docs-portal-emprego/ # Documentação
├── docker-compose.dev.yml # Docker Compose desenvolvimento
├── docker-compose.prod.yml # Docker Compose produção
└── README.md
4.3 Configuração de Variáveis de Ambiente
4.3.1 Backend
cp backend/configs/env/.env.example backend/configs/env/.env
nano backend/configs/env/.env
4.3.2 Variáveis Obrigatórias
# ===========================================
# DJANGO SETTINGS
# ===========================================
DEBUG=False
SECRET_KEY=<gerar-chave-segura-64-caracteres>
ALLOWED_HOSTS=seu-dominio.com.br,www.seu-dominio.com.br
DJANGO_SETTINGS_MODULE=app.settings.production
# ===========================================
# DATABASE SETTINGS
# ===========================================
DB_ENGINE=django.db.backends.postgresql
DB_NAME=portal_talentos_db
DB_USER=portal_talentos_user
DB_PASSWORD=<senha-segura>
DB_HOST=db
DB_PORT=5432
# ===========================================
# REDIS SETTINGS
# ===========================================
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=<senha-redis>
# ===========================================
# CELERY SETTINGS
# ===========================================
CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/0
CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/0
# ===========================================
# SECURITY SETTINGS
# ===========================================
SECURE_SSL_REDIRECT=True
SESSION_COOKIE_SECURE=True
CSRF_COOKIE_SECURE=True
SECURE_HSTS_SECONDS=31536000
# ===========================================
# CORS SETTINGS
# ===========================================
CORS_ALLOWED_ORIGINS=https://seu-dominio.com.br
FRONTEND_URL=https://seu-dominio.com.br
# ===========================================
# EMAIL SETTINGS
# ===========================================
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=smtp.seu-servidor.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=noreply@seu-dominio.com.br
EMAIL_HOST_PASSWORD=<senha-email>
DEFAULT_FROM_EMAIL=noreply@seu-dominio.com.br
# ===========================================
# JWT SETTINGS
# ===========================================
JWT_SECRET_KEY=<gerar-chave-segura-64-caracteres>
JWT_ACCESS_TOKEN_LIFETIME=60
JWT_REFRESH_TOKEN_LIFETIME=1440
4.3.3 Geração de Chaves Seguras
python3 -c "import secrets; print(secrets.token_urlsafe(64))"
openssl rand -base64 64 | tr -d '\n'
4.3.4 Frontend
cd frontend
cp .env.example .env.production
cat > .env.production << EOF
VITE_API_URL=https://seu-dominio.com.br
VITE_API_BASE_URL=https://seu-dominio.com.br/api/v1
VITE_APP_ENV=production
VITE_APP_NAME=Acesso ao Emprego
EOF
5. Instalação em Ambiente de Desenvolvimento
5.1 Build e Inicialização
cd /opt/portal-talentos
docker-compose -f docker-compose.dev.yml build
docker-compose -f docker-compose.dev.yml up -d
docker-compose -f docker-compose.dev.yml ps
5.2 Inicialização do Banco de Dados
docker-compose -f docker-compose.dev.yml exec backend python manage.py migrate
docker-compose -f docker-compose.dev.yml exec backend python manage.py seed_all
docker-compose -f docker-compose.dev.yml exec backend python manage.py createsuperuser
5.3 Verificação dos Serviços
| Serviço | URL | Verificação |
|---|---|---|
| Backend API | http://localhost:8080/api/v1/health/ | Status 200 |
| Swagger | http://localhost:8080/docs/ | Interface carrega |
| Django Admin | http://localhost:8080/admin/ | Login funciona |
| Frontend | http://localhost:5173 | Página carrega |
6. Instalação em Ambiente de Produção
6.1 Build de Produção
cd /opt/portal-talentos
docker-compose -f docker-compose.prod.yml build --no-cache
docker-compose -f docker-compose.prod.yml run --rm backend python manage.py migrate
docker-compose -f docker-compose.prod.yml run --rm backend python manage.py collectstatic --noinput
docker-compose -f docker-compose.prod.yml run --rm backend python manage.py createsuperuser
6.2 Inicialização dos Serviços
docker-compose -f docker-compose.prod.yml up -d
docker-compose -f docker-compose.prod.yml ps
docker-compose -f docker-compose.prod.yml logs -f
6.3 Configuração do Nginx
6.3.1 Instalação
sudo apt install nginx -y
sudo systemctl enable nginx
6.3.2 Configuração do Virtual Host
sudo nano /etc/nginx/sites-available/portal-talentos
upstream backend {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name seu-dominio.com.br www.seu-dominio.com.br;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name seu-dominio.com.br www.seu-dominio.com.br;
ssl_certificate /etc/letsencrypt/live/seu-dominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seu-dominio.com.br/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
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 Referrer-Policy "strict-origin-when-cross-origin" always;
client_max_body_size 50M;
location /api/ {
proxy_pass http://backend;
proxy_http_version 1.1;
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_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
}
location /admin/ {
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;
}
location /static/ {
alias /opt/portal-talentos/backend/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /opt/portal-talentos/backend/media/;
expires 7d;
}
location / {
root /opt/portal-talentos/frontend/dist;
try_files $uri $uri/ /index.html;
expires 1d;
add_header Cache-Control "public";
}
access_log /var/log/nginx/portal-talentos.access.log;
error_log /var/log/nginx/portal-talentos.error.log;
}
6.3.3 Ativação e Teste
sudo ln -s /etc/nginx/sites-available/portal-talentos /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
6.4 Configuração de SSL com Let's Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seu-dominio.com.br -d www.seu-dominio.com.br
sudo certbot renew --dry-run
6.5 Configuração de Systemd
sudo nano /etc/systemd/system/portal-talentos.service
[Unit]
Description=Portal de Talentos - Acesso ao Emprego
Requires=docker.service
After=docker.service network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/portal-talentos
ExecStart=/usr/bin/docker-compose -f docker-compose.prod.yml up -d
ExecStop=/usr/bin/docker-compose -f docker-compose.prod.yml down
ExecReload=/usr/bin/docker-compose -f docker-compose.prod.yml restart
TimeoutStartSec=0
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable portal-talentos
sudo systemctl start portal-talentos
sudo systemctl status portal-talentos
7. Validação da Instalação
7.1 Checklist de Verificação
| Item | Comando/Ação | Resultado Esperado |
|---|---|---|
| Containers ativos | docker-compose ps | Todos "Up" |
| Health check API | curl https://seu-dominio.com.br/api/v1/health/ | Status 200 |
| Conexão banco | docker-compose exec backend python manage.py check | "System check identified no issues" |
| Celery worker | docker-compose exec backend celery -A app status | "celery@worker: OK" |
| Frontend | Acessar URL | Página carrega corretamente |
| Login | Testar credenciais | Autenticação funciona |
7.2 Testes de Integração
docker-compose -f docker-compose.prod.yml exec backend python manage.py test --verbosity=2
7.3 Verificação de Logs
docker-compose -f docker-compose.prod.yml logs --tail=100 backend
docker-compose -f docker-compose.prod.yml logs --tail=100 worker
docker-compose -f docker-compose.prod.yml logs --tail=100 | grep -E "ERROR|CRITICAL"
8. Procedimentos de Atualização
8.1 Atualização do Sistema
cd /opt/portal-talentos
git fetch origin
git pull origin main
docker-compose -f docker-compose.prod.yml build --no-cache
docker-compose -f docker-compose.prod.yml run --rm backend python manage.py migrate
docker-compose -f docker-compose.prod.yml run --rm backend python manage.py collectstatic --noinput
docker-compose -f docker-compose.prod.yml up -d
docker-compose -f docker-compose.prod.yml ps
8.2 Rollback em Caso de Falha
git log --oneline -10
git checkout <commit-anterior>
docker-compose -f docker-compose.prod.yml build
docker-compose -f docker-compose.prod.yml up -d
9. Solução de Problemas
9.1 Problemas Comuns
| Problema | Causa Provável | Solução |
|---|---|---|
| Container não inicia | Variáveis de ambiente | Verificar arquivo .env |
| Erro de conexão DB | Rede Docker | Verificar docker network |
| 502 Bad Gateway | Backend indisponível | Reiniciar backend |
| Erro de permissão | Usuário incorreto | Verificar ownership |
9.2 Comandos de Diagnóstico
docker-compose -f docker-compose.prod.yml logs backend
docker stats
df -h
free -m
docker-compose -f docker-compose.prod.yml exec backend python manage.py check
10. Anexos
10.1 Glossário
| Termo | Definição |
|---|---|
| Container | Unidade de software que empacota código e dependências |
| Docker Compose | Ferramenta para definir e executar aplicações multi-container |
| Migration | Script de alteração de estrutura de banco de dados |
| Seed | Carga inicial de dados no banco de dados |
10.2 Referências
Controle de Alterações
| Versão | Data | Autor | Descrição |
|---|---|---|---|
| 1.0.0 | Jan/2026 | Equipe Dev | Versão inicial |