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