Situação atual: sistema rodando em desenvolvimento no seu PC Windows. Este guia cobre exatamente o que falta para usar com segurança no dia a dia. Siga as fases em ordem — a Fase 1 é obrigatória antes de qualquer uso real.
Leva ~20 minutos. Sem isso o sistema não está seguro.
Abra o terminal do projeto e rode:
cd C:\Users\Vitor\Documents\Pessoal\JurisMonitor
.\venv\Scripts\python.exe -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"Copie o resultado e cole no .env:
SECRET_KEY=resultado_copiado_aqui
.\venv\Scripts\python.exe -c "import secrets; print(secrets.token_urlsafe(50))"Adicione no .env:
JWT_SIGNING_KEY=resultado_copiado_aqui
No .env, adicione:
ADMIN_URL=escolha-algo-nao-obvio-aqui
Exemplo: ADMIN_URL=gestao-jm-2024 — use algo que só você saiba.
Depois o painel estará em http://localhost:8000/gestao-jm-2024/
Atualmente está postgres (senha padrão). Abra o PowerShell e rode:
$env:PGPASSWORD = "postgres"
& "C:\Program Files\PostgreSQL\15\bin\psql.exe" -U postgres -c "ALTER USER postgres PASSWORD 'NovaS3nhaForte#2024';"Atualize o .env:
DB_PASSWORD=NovaS3nhaForte#2024
Use uma senha com letras maiúsculas, minúsculas, números e símbolos.
Quando for usar com dados reais, mude no .env:
DEBUG=False
ALLOWED_HOSTS=localhost,127.0.0.1,SEU_IP_LOCAL
Para descobrir seu IP local:
(Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "Ethernet*","Wi-Fi*" | Select-Object -First 1).IPAddressDepois de iniciar o sistema com iniciar.bat:
- Acesse
http://localhost:8000/ADMIN_URL_QUE_VOCE_ESCOLHEU/ - Faça login com o superusuário
- Vá em OTP TOTP → TOTP devices → Adicionar
- Escaneie o QR Code com o Google Authenticator (ou Microsoft Authenticator) no celular
- Digite o código de 6 dígitos para confirmar
- Pronto — a partir de agora o login no admin exigirá o código do celular
Atenção: faça isso antes de desligar o DEBUG. Se perder o acesso ao 2FA, use o shell para desativar temporariamente:
.\venv\Scripts\python.exe manage.py shell -c "from django_otp.plugins.otp_totp.models import TOTPDevice; TOTPDevice.objects.all().delete()"
Protege o Windows e o sistema contra acesso não autorizado.
Redis no Windows normalmente roda sem senha. Se estiver na rede local, adicione senha:
-
Localize o arquivo de configuração (geralmente):
C:\Program Files\Redis\redis.windows-service.confouC:\ProgramData\Redis\redis.conf -
Abra com o Bloco de Notas como Administrador e adicione/edite:
requirepass SuaSenhaRedis#2024 -
Reinicie o serviço Redis:
Restart-Service Redis -
Atualize o
.env:REDIS_URL=redis://:SuaSenhaRedis#2024@localhost:6379/0
Permita acesso ao sistema apenas de quem deve ter acesso:
Bloquear acesso externo à porta 8000 (Django) — só rede local:
# Abra o PowerShell como Administrador
New-NetFirewallRule -DisplayName "JurisMonitor - So Rede Local" `
-Direction Inbound -Protocol TCP -LocalPort 8000 `
-RemoteAddress LocalSubnet -Action Allow
New-NetFirewallRule -DisplayName "JurisMonitor - Bloquear Internet" `
-Direction Inbound -Protocol TCP -LocalPort 8000 `
-RemoteAddress Internet -Action BlockBloquear acesso externo ao PostgreSQL (porta 5432):
New-NetFirewallRule -DisplayName "PostgreSQL - Bloquear Externo" `
-Direction Inbound -Protocol TCP -LocalPort 5432 `
-RemoteAddress Internet -Action BlockBloquear acesso externo ao Redis (porta 6379):
New-NetFirewallRule -DisplayName "Redis - Bloquear Externo" `
-Direction Inbound -Protocol TCP -LocalPort 6379 `
-RemoteAddress Internet -Action BlockPara o servidor ligar sozinho quando o computador reiniciar:
- Pressione
Win + R, digitetaskschd.msc, Enter - Clique em Criar Tarefa Básica
- Nome:
JurisMonitor Autostart - Gatilho: Quando o computador iniciar
- Ação: Iniciar um programa
- Programa:
C:\Users\Vitor\Documents\Pessoal\JurisMonitor\iniciar.bat
- Programa:
- Marque: Executar independente do usuário estar conectado
- Marque: Executar com privilégios mais altos (necessário para abrir janela)
-
Crie a pasta de backup:
New-Item -ItemType Directory -Force "C:\Backups\JurisMonitor"
-
Crie o script de backup em
C:\Backups\backup_jurismonitor.ps1:$data = Get-Date -Format "yyyy-MM-dd_HH-mm" $arquivo = "C:\Backups\JurisMonitor\backup_$data.sql" $env:PGPASSWORD = "SuaSenhaPostgres" & "C:\Program Files\PostgreSQL\15\bin\pg_dump.exe" -U postgres jurismonitor | Out-File $arquivo -Encoding utf8 Compress-Archive -Path $arquivo -DestinationPath "$arquivo.zip" -Force Remove-Item $arquivo # Remove backups com mais de 30 dias Get-ChildItem "C:\Backups\JurisMonitor\*.zip" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | Remove-Item Write-Output "[$data] Backup concluido: $arquivo.zip"
-
Agende via Agendador de Tarefas (rodar todo dia às 2h da manhã):
# PowerShell como Administrador $action = New-ScheduledTaskAction -Execute "powershell.exe" ` -Argument "-NonInteractive -File C:\Backups\backup_jurismonitor.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At "02:00" $settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable:$false Register-ScheduledTask -TaskName "JurisMonitor Backup" ` -Action $action -Trigger $trigger -Settings $settings ` -RunLevel Highest -Force
- Abra Configurações → Windows Update
- Ative Atualizações automáticas
- Verifique se o Windows Defender está ativo:
Win + I → Segurança do Windows
Só faça isto se precisar abrir o sistema para fora da sua rede Wi-Fi. Se for uso interno (mesmo escritório/casa), pule esta fase.
Sem HTTPS, senhas trafegam em texto puro pela internet.
- Baixe o win-acme: https://www.win-acme.com/
- Extraia em
C:\win-acme\ - Você precisará de um domínio apontando para seu IP público
- Execute como Administrador:
C:\win-acme\wacs.exe
- Siga o assistente para gerar certificado Let's Encrypt gratuito
O Nginx recebe as conexões HTTPS e repassa para o Django:
- Baixe o Nginx para Windows: https://nginx.org/en/download.html
- Extraia em
C:\nginx\ - Edite
C:\nginx\conf\nginx.confe substitua pelo conteúdo:events {} http { # Rate limiting: bloqueia força bruta no login limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m; server { listen 443 ssl; server_name SEU_DOMINIO.com.br; ssl_certificate C:/caminho/para/cert.pem; ssl_certificate_key C:/caminho/para/key.pem; location /accounts/login/ { limit_req zone=login burst=3 nodelay; proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } server { listen 80; return 301 https://$host$request_uri; } }
- No
.env, atualizeALLOWED_HOSTScom o domínio:ALLOWED_HOSTS=localhost,127.0.0.1,SEU_DOMINIO.com.br
No painel do seu roteador (geralmente 192.168.1.1):
- Crie uma regra de Port Forwarding: porta 443 → IP local do seu computador
- Não abra as portas 8000, 5432 ou 6379 para a internet
Para que o Port Forwarding sempre funcione, reserve o IP local do seu computador pelo MAC Address no roteador (DHCP Reservation).
cd C:\Users\Vitor\Documents\Pessoal\JurisMonitor
.\venv\Scripts\pip.exe install safety bandit
.\venv\Scripts\safety.exe check -r requirements.txt
.\venv\Scripts\bandit.exe -r apps\ -ll.\venv\Scripts\python.exe -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"Atualize no .env. Efeito: todos os usuários serão deslogados automaticamente.
Uma vez por mês, verifique que o backup pode ser restaurado:
$env:PGPASSWORD = "SuaSenhaPostgres"
# Cria banco temporário para teste
& "C:\Program Files\PostgreSQL\15\bin\createdb.exe" -U postgres jurismonitor_teste
# Restaura o backup mais recente
$backup = Get-ChildItem "C:\Backups\JurisMonitor\*.zip" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
Expand-Archive $backup.FullName -DestinationPath "C:\Backups\temp_restore"
$sql = Get-ChildItem "C:\Backups\temp_restore\*.sql" | Select-Object -First 1
& "C:\Program Files\PostgreSQL\15\bin\psql.exe" -U postgres -d jurismonitor_teste -f $sql.FullName
# Apaga banco de teste
& "C:\Program Files\PostgreSQL\15\bin\dropdb.exe" -U postgres jurismonitor_teste
Remove-Item "C:\Backups\temp_restore" -RecurseHOJE (obrigatório):
[x] 1.1 Gerar SECRET_KEY forte no .env
[x] 1.2 Gerar JWT_SIGNING_KEY separada no .env
[x] 1.3 Definir ADMIN_URL único no .env
[x] 1.4 Trocar senha do PostgreSQL (está "postgres")
[ ] 1.5 DEBUG=False quando for usar com dados reais
[ ] 1.6 Configurar 2FA (TOTP) no painel admin
ESTA SEMANA:
[ ] 2.1 Senha no Redis
[ ] 2.2 Regras de Firewall do Windows
[ ] 2.3 Auto-iniciar com o Windows
[ ] 2.4 Backup automático diário
[ ] 2.5 Windows Defender + Windows Update ativo
SE ACESSAR PELA INTERNET:
[ ] 3.1 Certificado HTTPS (win-acme)
[ ] 3.2 Nginx como reverse proxy
[ ] 3.3 Só abrir porta 443 no roteador
[ ] 3.4 IP fixo reservado no roteador
MENSALMENTE:
[ ] 4.1 Varredura de dependências (safety + bandit)
[ ] 4.2 Rotacionar SECRET_KEY a cada 6 meses
[ ] 4.3 Testar restauração do backup