HTTPS
Esta seção apresenta como configurar o DBizzie para usar HTTPS em ambiente de produção.
Visão Geral
Para ambientes de produção, é essencial configurar HTTPS para garantir a segurança das comunicações. O DBizzie oferece duas abordagens principais para implementar HTTPS:
- Proxy Reverso Nativo - Usando NGINX instalado diretamente no servidor
- Proxy Reverso via Docker - Usando NGINX como container adicional
Método 1: Proxy Reverso Nativo
Esta abordagem é recomendada para servidores onde você tem controle total do sistema operacional.
Pré-requisitos
- NGINX instalado no servidor
- Certificado SSL válido (Let's Encrypt, certificado próprio, etc.)
- DBizzie já instalado e funcionando
Instalação do NGINX
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo yum install nginx
Configuração do NGINX
Crie um arquivo de configuração para o DBizzie:
sudo nano /etc/nginx/sites-available/dbizzie
Adicione a seguinte configuração:
# /etc/nginx/sites-available/dbizzie
server {
server_name seu.dominio.com;
# Configuração para WebSocket (necessário para tempo real)
location /cable {
proxy_pass http://localhost:4000/cable;
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;
# Timeouts para conexões WebSocket
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Configuração principal da aplicação
location / {
proxy_pass http://localhost:4000;
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;
# Headers de segurança
proxy_set_header X-Frame-Options DENY;
proxy_set_header X-Content-Type-Options nosniff;
proxy_set_header X-XSS-Protection "1; mode=block";
}
# Configuração SSL
listen 443 ssl http2;
ssl_certificate /caminho/para/seu/fullchain.pem;
ssl_certificate_key /caminho/para/sua/privkey.pem;
# Configurações de segurança SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}
# Redirecionamento HTTP para HTTPS
server {
listen 80;
server_name seu.dominio.com;
return 301 https://$host$request_uri;
}
Ativação da Configuração
# Criar link simbólico
sudo ln -s /etc/nginx/sites-available/dbizzie /etc/nginx/sites-enabled/
# Testar configuração
sudo nginx -t
# Reiniciar NGINX
sudo systemctl restart nginx
# Habilitar inicialização automática
sudo systemctl enable nginx
Método 2: Proxy Reverso via Docker
Esta abordagem mantém todo o ambiente containerizado, facilitando o gerenciamento.
1. Criar Configuração do NGINX
Crie o arquivo nginx.conf
no diretório do DBizzie:
# nginx.conf
server {
listen 80;
server_name seu.dominio.com;
# Redirecionamento HTTP para HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name seu.dominio.com;
# Configurações SSL
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Headers de segurança
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
# Configuração para WebSocket
location /cable {
proxy_pass http://web:80/cable;
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;
# Timeouts para WebSocket
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
}
# Configuração principal
location / {
proxy_pass http://web:80;
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;
# Timeouts
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
# Upload de arquivos
client_max_body_size 100M;
}
}
2. Preparar Certificados SSL
Crie o diretório para certificados:
mkdir cert
Copie seus certificados SSL para o diretório:
# Exemplo para certificados Let's Encrypt
cp /etc/letsencrypt/live/seu.dominio.com/fullchain.pem ./cert/
cp /etc/letsencrypt/live/seu.dominio.com/privkey.pem ./cert/
3. Atualizar Docker Compose
Adicione o serviço NGINX ao seu docker-compose.yml
:
# docker-compose.yml
services:
# ... outros serviços existem ...
nginx:
image: nginx:stable-alpine
container_name: dbizzie-nginx
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./cert:/etc/nginx/ssl:ro
ports:
- "80:80"
- "443:443"
depends_on:
- web
networks:
- dbizzie-network
# ... resto da configuração ...
4. Remover Porta Exposta do Serviço Web
No serviço web
, remova ou comente as portas para que apenas o NGINX seja acessível:
web:
# ... outras configurações ...
# ports:
# - "4000:80" # Comentar esta linha
# - "4001:3000"
# ... resto da configuração ...
5. Reiniciar os Serviços
docker-compose down
docker-compose up -d
Verificação da Configuração
Após configurar HTTPS, verifique se tudo está funcionando:
Testes de Conectividade
# Testar redirecionamento HTTP para HTTPS
curl -I http://seu.dominio.com
# Testar acesso HTTPS
curl -I https://seu.dominio.com
# Verificar certificado SSL
openssl s_client -connect seu.dominio.com:443 -servername seu.dominio.com