Skip to content

MinAnnie/nginx-config-script

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scripts de gestión de Nginx 🚀

Conjunto de scripts para automatizar la configuración de Nginx para múltiples proyectos Docker en tu VPS.

📦 Scripts incluidos

1. setup-nginx.sh - Configurador principal

Crea automáticamente configuraciones de Nginx para tus proyectos.

Características:

  • ✅ Configuración interactiva (paso a paso)
  • ✅ Soporte para WebSockets
  • ✅ Configuración de tamaños de archivo
  • ✅ Creación automática de logs
  • ✅ Validación de configuración
  • ✅ Backup automático si sobrescribes
  • ✅ Apertura automática de puertos en firewall
  • ✅ Integración con Certbot para SSL

2. list-nginx-configs.sh - Listar configuraciones

Muestra todas tus configuraciones de Nginx con detalles.

3. remove-nginx-config.sh - Remover configuraciones

Elimina configuraciones de forma segura con backup automático.

🚀 Instalación

1. Sube los scripts a tu VPS

# Opción A: Clona desde tu repo
git clone https://github.com/tu-usuario/nginx-config-script.git
cd nginx-scripts

# Opción B: Sube manualmente con scp
scp setup-nginx.sh remove-nginx-config.sh list-nginx-configs.sh root@TU_IP:/root/

2. Hazlos ejecutables

chmod +x setup-nginx.sh remove-nginx-config.sh list-nginx-configs.sh

📖 Uso

Configurar un nuevo proyecto

sudo ./setup-nginx.sh

El script te guiará paso a paso:

Nombre del proyecto: my-app
Dominio: app.example.com
Puerto local: 3010
Tamaño máximo: 100
WebSockets: s
SSL con Certbot: n

Ejemplo para diferentes proyectos:

Proyecto Dominio Puerto
My App app.example.com 3010
Cloud cloud.example.com 8080
Git git.example.com 8929
Admin admin.example.com 9000

Listar configuraciones existentes

./list-nginx-configs.sh

Muestra:

📋 Configuraciones de Nginx
Total de configuraciones: 3

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Proyecto: my-app
Dominio: app.example.com
Puerto: 3010
SSL: ✓ Habilitado

Remover una configuración

sudo ./remove-nginx-config.sh

🔒 Configurar SSL con Certbot

Después de crear la configuración con el script:

# 1. Asegúrate de que el DNS apunte a tu servidor
# 2. Instala Certbot (si no lo tienes)
sudo dnf install -y certbot python3-certbot-nginx

# 3. Obtén el certificado
sudo certbot --nginx -d app.example.com

Certbot:

  • ✅ Obtendrá el certificado automáticamente
  • ✅ Modificará tu configuración de Nginx
  • ✅ Configurará renovación automática

🌐 Configuración de Cloudflare

Opción A: Proxy de Cloudflare (recomendado)

  1. En Cloudflare DNS, añade un registro A:

    • Type: A
    • Name: app (o tu subdominio)
    • IPv4: TU_IP_VPS
    • Proxy: 🟠 Proxied ← Activa esto
  2. En SSL/TLS settings:

    • Modo: Full (no "Full strict")
    • Always Use HTTPS: ON

No necesitas Certbot - Cloudflare maneja el SSL automáticamente.

Opción B: DNS Only (sin proxy)

  1. En Cloudflare DNS:

    • Proxy: ⚪ DNS only (nube gris)
  2. Usa Certbot en tu servidor:

    sudo certbot --nginx -d app.example.com

🔥 Configuración de Firewall

Los scripts abren automáticamente los puertos HTTP/HTTPS, pero puedes hacerlo manualmente:

Fedora (firewalld)

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Ubuntu (ufw)

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

📝 Archivos generados

Cada proyecto genera:

/etc/nginx/conf.d/
├── my-app.conf
├── cloud.conf
└── admin.conf

/var/log/nginx/
├── my-app_access.log
├── my-app_error.log
├── cloud_access.log
└── cloud_error.log

🛠️ Comandos útiles

# Ver logs en tiempo real
sudo tail -f /var/log/nginx/my-app_error.log

# Probar configuración antes de aplicar
sudo nginx -t

# Recargar Nginx (sin downtime)
sudo systemctl reload nginx

# Reiniciar Nginx
sudo systemctl restart nginx

# Ver estado de Nginx
sudo systemctl status nginx

# Editar una configuración
sudo nano /etc/nginx/conf.d/my-app.conf

🐛 Troubleshooting

Error: "nginx: [emerg] bind() to 0.0.0.0:80 failed"

Otro servicio está usando el puerto 80.

sudo lsof -i :80
sudo systemctl stop httpd  # Si Apache está corriendo

Error: "Connection refused"

El contenedor Docker no está corriendo:

docker compose ps
docker compose up -d

Error: "502 Bad Gateway"

El puerto en Nginx no coincide con el del contenedor:

# Verifica el puerto del contenedor
docker compose ps
# Edita la configuración de Nginx
sudo nano /etc/nginx/conf.d/my-app.conf

Error: DNS no resuelve

Espera 5-10 minutos después de configurar Cloudflare:

# Verifica la propagación DNS
nslookup app.example.com
dig app.example.com

📚 Estructura completa de un proyecto

/home/usuario/proyectos/my-app/
├── docker-compose.yml        # Configuración de Docker
├── .env                      # Variables de entorno (NO subir a Git)
├── .env.example             # Plantilla de variables
├── .gitlab-ci.yml           # Pipeline de CI/CD
├── .gitignore              # Archivos a ignorar
├── storage/                # Datos persistentes
├── config/                 # Configuraciones
└── postgres/               # Base de datos

/etc/nginx/conf.d/
└── my-app.conf             # Configuración de Nginx

/var/log/nginx/
├── my-app_access.log       # Logs de acceso
└── my-app_error.log        # Logs de errores

🎯 Workflow completo para un nuevo proyecto

# 1. En tu VPS
cd /home/usuario/proyectos
git clone https://github.com/tu-usuario/nuevo-proyecto.git
cd nuevo-proyecto
cp .env.example .env
nano .env  # Configura las variables
docker compose up -d

# 2. Configura Nginx
sudo ./setup-nginx.sh
# Ingresa: nombre, dominio, puerto, etc.

# 3. Configura DNS en Cloudflare
# Añade registro A apuntando a tu VPS

# 4. (Opcional) Configura SSL
sudo certbot --nginx -d new-project.example.com

# 5. Verifica
curl https://new-project.example.com

⚙️ Variables de entorno comunes

Para tus docker-compose.yml:

# Puertos
PORT=3010  # Puerto externo

# Base de datos
DB_USERNAME=usuario
DB_PASSWORD=password_seguro_sin_caracteres_especiales
DB_DATABASE=nombre_db

# Rutas
UPLOAD_LOCATION=./storage
CONFIG_LOCATION=./config
DB_DATA_LOCATION=./postgres

🔐 Seguridad

Buenas prácticas:

  • ✅ Usa contraseñas fuertes sin caracteres especiales problemáticos (&, #, $, etc.)
  • ✅ Mantén el .env fuera de Git (usa .gitignore)
  • ✅ Expón contenedores solo en 127.0.0.1 (no 0.0.0.0)
  • ✅ Usa Cloudflare Proxy para protección DDoS
  • ✅ Actualiza regularmente Nginx y Docker
  • ✅ Revisa logs periódicamente

📞 Soporte

Si tienes problemas:

  1. Revisa los logs: sudo tail -f /var/log/nginx/error.log
  2. Verifica la configuración: sudo nginx -t
  3. Comprueba el estado del contenedor: docker compose ps
  4. Verifica el firewall: sudo firewall-cmd --list-all

📄 Licencia

Scripts de uso libre para tus proyectos.


Creado con ❤️ para simplificar el deployment de proyectos Docker

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages