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