Pular para o conteúdo principal

Manual de Instalação e Configuração

Sistema Acesso ao Emprego - Portal de Talentos


InformaçãoDetalhes
Versão do Documento1.0.0
Data de CriaçãoJaneiro/2026
Última AtualizaçãoJaneiro/2026
ClassificaçãoInterno
ResponsávelEquipe 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

DocumentoDescrição
Arquitetura do SistemaVisão geral da arquitetura técnica
Manual de OperaçãoProcedimentos operacionais
Plano de Recuperação de DesastresProcedimentos de contingência

2. Requisitos do Sistema

2.1 Requisitos de Hardware

2.1.1 Ambiente de Desenvolvimento

ComponenteMínimoRecomendado
Processador2 cores4 cores
Memória RAM8 GB16 GB
Armazenamento50 GB SSD100 GB SSD
Rede100 Mbps1 Gbps

2.1.2 Ambiente de Produção

ComponenteMínimoRecomendado
Processador4 cores8+ cores
Memória RAM16 GB32 GB
Armazenamento200 GB SSD500 GB SSD NVMe
Rede1 Gbps10 Gbps

2.2 Requisitos de Software

2.2.1 Sistema Operacional

SistemaVersão Suportada
Ubuntu Server22.04 LTS ou superior
Debian11 ou superior
CentOS/RHEL8 ou superior
Windows Server2019 ou superior (com WSL2)

2.2.2 Dependências Obrigatórias

SoftwareVersãoFinalidade
Docker20.10+Containerização
Docker Compose2.0+Orquestração de containers
Git2.30+Controle de versão

2.2.3 Dependências para Desenvolvimento Local (Opcional)

SoftwareVersãoFinalidade
Python3.11.xRuntime do backend
Node.js18.x LTSRuntime do frontend
PostgreSQL14+Banco de dados
Redis7.0+Cache e filas

2.3 Requisitos de Rede

2.3.1 Portas Necessárias

PortaProtocoloServiçoDireção
22TCPSSHInbound
80TCPHTTPInbound
443TCPHTTPSInbound
5432TCPPostgreSQLInternal
6379TCPRedisInternal
8080TCPBackend APIInternal
5173TCPFrontend DevInternal

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çoURLVerificação
Backend APIhttp://localhost:8080/api/v1/health/Status 200
Swaggerhttp://localhost:8080/docs/Interface carrega
Django Adminhttp://localhost:8080/admin/Login funciona
Frontendhttp://localhost:5173Pá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

ItemComando/AçãoResultado Esperado
Containers ativosdocker-compose psTodos "Up"
Health check APIcurl https://seu-dominio.com.br/api/v1/health/Status 200
Conexão bancodocker-compose exec backend python manage.py check"System check identified no issues"
Celery workerdocker-compose exec backend celery -A app status"celery@worker: OK"
FrontendAcessar URLPágina carrega corretamente
LoginTestar credenciaisAutenticaçã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

ProblemaCausa ProvávelSolução
Container não iniciaVariáveis de ambienteVerificar arquivo .env
Erro de conexão DBRede DockerVerificar docker network
502 Bad GatewayBackend indisponívelReiniciar backend
Erro de permissãoUsuário incorretoVerificar 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

TermoDefinição
ContainerUnidade de software que empacota código e dependências
Docker ComposeFerramenta para definir e executar aplicações multi-container
MigrationScript de alteração de estrutura de banco de dados
SeedCarga inicial de dados no banco de dados

10.2 Referências


Controle de Alterações

VersãoDataAutorDescrição
1.0.0Jan/2026Equipe DevVersão inicial