Portainer y configuracion Nginx, renovar certificado - afalarcon/vps-Salgado-Law GitHub Wiki
Nginx con HTTps para Portainer usando nip.io y Cerbot, en vps
Perfecto. Aquí tienes un script completo y reutilizable para configurar Nginx con HTTPS para Portainer usando nip.io y Certbot, en tu VPS.
📜 Script: setup_nginx_https_portainer.sh Guárdalo en tu VPS como:
nano setup_nginx_https_portainer.sh Pega lo siguiente:
#!/bin/bash
=== CONFIGURACIÓN ===
DOMAIN="portainer.$(curl -s ifconfig.me).nip.io" EMAIL="[email protected]"
echo "🛠️ Configurando dominio: $DOMAIN"
1. Crear carpetas necesarias
mkdir -p /root/nginx/conf.d mkdir -p /root/nginx/certs mkdir -p /var/www/certbot/.well-known/acme-challenge
2. Crear archivo de configuración temporal (HTTP solo)
cat > /root/nginx/conf.d/portainer.conf <<EOF server { listen 80; server_name $DOMAIN;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://\$host\$request_uri;
}
} EOF
3. Eliminar contenedor existente (si aplica)
docker rm -f nginx_proxy 2>/dev/null
4. Levantar Nginx temporal solo con HTTP
docker run -d
--name nginx_proxy
-p 80:80
-v /root/nginx/conf.d:/etc/nginx/conf.d
-v /var/www/certbot:/var/www/certbot
--network n8n_net
nginx:stable-alpine
5. Esperar que Nginx levante
sleep 5
6. Verificar acceso de prueba
echo "ok" > /var/www/certbot/.well-known/acme-challenge/test curl -s http://$DOMAIN/.well-known/acme-challenge/test | grep ok > /dev/null
if [ $? -ne 0 ]; then echo "❌ Error: el desafío HTTP no respondió correctamente. Aborta." exit 1 fi
echo "✅ Acceso HTTP exitoso. Solicitando certificado SSL..."
7. Ejecutar certbot para obtener certificado
docker run --rm
-v /root/nginx/certs:/etc/letsencrypt
-v /var/www/certbot:/var/www/certbot
certbot/certbot certonly
--webroot -w /var/www/certbot
--email $EMAIL
-d $DOMAIN
--agree-tos --no-eff-email
8. Verifica que el certificado fue emitido
if [ ! -f "/root/nginx/certs/live/$DOMAIN/fullchain.pem" ]; then echo "❌ No se encontró el certificado generado. Aborta." exit 1 fi
echo "✅ Certificado generado exitosamente."
9. Actualizar configuración de Nginx para HTTPS
cat > /root/nginx/conf.d/portainer.conf <<EOF server { listen 80; server_name $DOMAIN;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://\$host\$request_uri;
}
}
server { listen 443 ssl; server_name $DOMAIN;
ssl_certificate /etc/nginx/certs/live/$DOMAIN/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/live/$DOMAIN/privkey.pem;
location / {
proxy_pass http://172.19.0.2:9000;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
}
} EOF
10. Reiniciar Nginx con HTTPS
docker rm -f nginx_proxy
docker run -d
--name nginx_proxy
-p 80:80 -p 443:443
-v /root/nginx/conf.d:/etc/nginx/conf.d
-v /root/nginx/certs:/etc/nginx/certs
-v /var/www/certbot:/var/www/certbot
--network n8n_net
nginx:stable-alpine
echo "🎉 Listo: accede a https://$DOMAIN" 🚀 Para ejecutar el script: Dale permisos: chmod +x setup_nginx_https_portainer.sh Ejecútalo: ./setup_nginx_https_portainer.sh
Renovar automáticamente el certificado Let's Encrypt de Portainer usando cron y certbot en Docker.
📦 1. Script de renovación: renew_cert.sh Crea el script en tu VPS:
nano /root/renew_cert.sh Pega lo siguiente:
#!/bin/bash
CONFIG
DOMAIN="portainer.$(curl -s ifconfig.me).nip.io" CERTS_PATH="/root/nginx/certs" WEBROOT_PATH="/var/www/certbot"
echo "🔄 Iniciando renovación SSL para $DOMAIN"
Ejecutar renovación
docker run --rm
-v "$CERTS_PATH:/etc/letsencrypt"
-v "$WEBROOT_PATH:/var/www/certbot"
certbot/certbot renew --webroot -w /var/www/certbot --quiet
Verificar si se renovó (renueva si expira en 30 días o menos)
if [ $? -eq 0 ]; then echo "✅ Renovación completada. Reiniciando Nginx..." docker restart nginx_proxy else echo "⚠️ Error durante renovación. Revisa los logs." fi Dale permisos de ejecución:
chmod +x /root/renew_cert.sh 📅 2. Agregar tarea al cron Edita el crontab del root:
crontab -e Agrega esta línea al final para que se ejecute automáticamente todos los días a las 3:00 AM:
0 3 * * * /root/renew_cert.sh >> /var/log/renew_cert.log 2>&1 Esto:
Ejecuta la renovación diariamente a las 3:00 AM. Guarda logs en /var/log/renew_cert.log. ✅ Verificación manual Si deseas probar la renovación manualmente sin esperar:
/root/renew_cert.sh