Cómo Instalar Nginx Proxy Manager en un Contenedor Docker: Guía Completa

La gestión eficiente de proxies y certificados SSL es fundamental para mantener seguros y accesibles tus servicios web. Nginx Proxy Manager (NPM) es una herramienta poderosa que simplifica la administración de proxies reversos y la gestión de certificados SSL. Ya sea que estés gestionando múltiples aplicaciones en una PC con Linux, una máquina virtual (VM), una Raspberry Pi o incluso un contenedor LXC en Proxmox VE, NPM te ofrece una interfaz intuitiva para centralizar y optimizar tus configuraciones de red.

¿Por Qué Instalar Nginx Proxy Manager?

Antes de sumergirnos en los pasos de instalación, exploremos algunos casos de uso prácticos que demuestran por qué NPM puede ser una adición invaluable a tu infraestructura:

1. Acceso Centralizado a Múltiples Aplicaciones

Imagina que tienes varias aplicaciones web corriendo en diferentes contenedores o máquinas, cada una escuchando en distintos puertos o incluso en diferentes direcciones IP internas. Sin NPM, tendrías que acceder a cada aplicación especificando la IP y el puerto en el navegador, por ejemplo:

  • http://192.168.1.100:8080 para tu aplicación de gestión.
  • http://192.168.1.100:9090 para tu panel de administración.

Con NPM, puedes simplificar este proceso utilizando nombres de dominio (FQDN). Configura redirecciones basadas en el dominio, de modo que solo necesites teclear el nombre de dominio en tu navegador:

  • https://gestion.tudominio.com redirige a http://192.168.1.100:8080.
  • https://admin.tudominio.com redirige a http://192.168.1.100:9090.

2. Reducción de la Complejidad en el Firewall

Sin NPM, para acceder a múltiples aplicaciones externas, tendrías que abrir múltiples puertos en tu firewall y configurar reglas de redirección para cada uno. Esto puede complicar la administración y aumentar las superficies de ataque.

Con NPM, solo necesitas abrir los puertos estándar (80 y 443) en tu firewall. NPM se encargará de redirigir el tráfico interno a las aplicaciones correspondientes según el dominio solicitado. Esto simplifica la configuración del firewall y reduce los riesgos de seguridad asociados con la apertura de múltiples puertos.

3. Gestión Simplificada de Certificados SSL

NPM facilita la obtención y renovación automática de certificados SSL de Let’s Encrypt para cada dominio configurado. Esto elimina la necesidad de gestionar manualmente certificados individuales, asegurando que todas tus aplicaciones estén siempre protegidas con conexiones seguras.

1. ¿Qué es Nginx Proxy Manager?

Nginx Proxy Manager (NPM) es una interfaz web fácil de usar para gestionar proxies reversos con Nginx. Permite configurar y administrar proxies, certificados SSL y reglas de redirección sin necesidad de conocimientos profundos en Nginx. Entre sus características destacan:

  • Gestión sencilla de proxies reversos: Redirige el tráfico a diferentes servicios internos.
  • Integración con Let’s Encrypt: Obtén y renueva automáticamente certificados SSL gratuitos.
  • Interfaz intuitiva: Administra todas las configuraciones a través de una interfaz web amigable.
  • Soporte para múltiples usuarios y permisos: Controla quién puede acceder y modificar las configuraciones.

2. Requisitos Previos

Antes de comenzar, asegúrate de cumplir con los siguientes requisitos:

  • Sistema Operativo: Una distribución Linux compatible (por ejemplo, Ubuntu 22.04, Debian 11, etc.).
  • Docker Instalado: Necesitarás Docker para ejecutar NPM.
  • Docker Compose Instalado: Facilita la gestión de múltiples contenedores Docker.
  • Acceso a la Terminal: Para ejecutar comandos necesarios durante la instalación.
  • Conexión a Internet: Para descargar imágenes y paquetes necesarios.

Nota: En mi caso, estaré instalando NPM en un Contenedor LXC (CT) de Proxmox VE, pero los pasos son aplicables a cualquier entorno que soporte Docker, como una PC con Linux, una VM, o una Raspberry Pi.

3. Instalar Docker y Docker Compose

Si aún no tienes Docker instalado en tu sistema, sigue estos pasos para instalarlo:

Actualizar el sistema:

sudo apt update && sudo apt upgrade -y

Instalar curl:

sudo apt install curl -y

Ejecutar el script de instalación de Docker:

curl -sSL https://get.docker.com/ | sh

Verificar la instalación de Docker:

docker --version

Deberías ver una salida similar a:

Docker version 27.3.1, build ce12230

Verificar la instalación de Docker Compose:

docker-compose --version

Deberías ver algo como:

Docker Compose version v2.29.7

5. Configurar Nginx Proxy Manager con Docker Compose

Ahora que Docker y Docker Compose están instalados, procederemos a configurar NPM.

Paso 1: Crear un Directorio para NPM

Es recomendable mantener los archivos de configuración organizados en un directorio específico.

mkdir npm
cd npm

Paso 2: Crear el Archivo docker-compose.yml

Este archivo define los servicios necesarios para NPM y su base de datos.

sudo nano docker-compose.yml

Copia y pega el siguiente contenido en el archivo:

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Paso 3: Iniciar los Servicios de Docker Compose

docker compose up -d

Este comando descargará las imágenes necesarias y levantará los contenedores en segundo plano.

Deberías ver algo como:

Paso 4: Verificar que los Contenedores Estén Corriendo

docker ps

Deberías ver el contenedor activo:

6. Acceder y Configurar Nginx Proxy Manager

Ahora que NPM está instalado, procedemos a configurarlo.

Paso 1: Abrir la Interfaz Web de NPM

Desde tu navegador visita:

http://[Dirección_IP_del_Servidor]:81

Si no sabes cual es tu IP usa:

ip a

En nuestro caso:

Así que desde el navegador visitamos http://192.168.101.201:81

Paso 2: Configuración Inicial

Al acceder por primera vez, verás la pantalla de configuración inicial:

  • Correo Electrónico: [email protected] (puedes cambiarlo).
  • Contraseña: changeme (se recomienda cambiarla inmediatamente).

Paso 3: Edita el usuario de Administración

Una vez que inicies sesión, serás redirigido a esta página. Deberías modificar el nombre, el alias y el correo electrónico para personalizar tu cuenta y mejorar la seguridad.

A continuación, se te pedirá que cambies la contraseña por una nueva. Asegúrate de usar una contraseña segura.

Con estos cambios realizados, ya tendrás lista tu cuenta para continuar con la configuración de los proxies.

Paso 4: Agregar un Proxy Host

Ir al Dashboard, luego haz clic en «Proxy Hosts»

Presiona el botón «Add Proxy Host».

Completa la información en la pestaña «Details»:

Domain Names: Especifica el dominio o subdominio que será redirigido a tu aplicación. En este caso, usaremos plex.itrafa.com.

Scheme: Selecciona http o https, dependiendo de cómo tu servidor está configurado para escuchar. Para este ejemplo, seleccionaremos https. Más adelante puedes configurar un certificado SSL para asegurar la comunicación.

Forward Hostname / IP: Introduce la IP del servidor donde está alojada tu aplicación. Para este ejemplo, usamos 192.168.101.222.

Forward Port: Especifica el puerto al que Nginx Proxy Manager redirigirá las solicitudes. En este caso, Plex usa el puerto 32400.

Block Common Exploits: Habilita esta opción para bloquear exploits comunes.

Websockets Support: Actívalo si tu aplicación utiliza websockets.

Ahora haz clic en la pestaña «SSL» y solicita un nuevo certificado SSL:

Force SSL: Habilita la opción Force SSL para asegurarte de que todo el tráfico hacia este Proxy Host use HTTPS en lugar de HTTP. Esto redirigirá automáticamente las solicitudes que lleguen por HTTP a HTTPS, garantizando una conexión segura.

Acepta los Términos de Servicio: Marca la casilla I Agree to the Let’s Encrypt Terms of Service para continuar con la generación del certificado.

Guardar los cambios: Haz clic en Save para completar la configuración. Nginx Proxy Manager generará automáticamente el certificado SSL y lo aplicará al Proxy Host configurado.

Ahora, al acceder a https://plex.itrafa.com, NPM redirigirá el tráfico al servicio interno correspondiente (ubicado en este caso en 192.168.101.222:32400), manejando automáticamente los certificados SSL.

Aclaraciones importantes

Para que este subdominio funcione correctamente en una red privada, debes considerar lo siguiente (lo explicaré en detalle en futuros posts, pero aquí dejo una visión general):

  • Redirección de puertos en el firewall: Necesitarás redirigir el tráfico http y https (puertos 80 y 443) desde tu IP pública a la IP privada donde tienes el servidor Nginx Proxy Manager.
  • Configuración de registros DNS:
    • Tu dominio principal debe tener un registro A que apunte a tu IP pública (por ejemplo npm.itrafa.com).
    • Los subdominios (como plex.itrafa.com) deben tener un registro CNAME apuntando al subdominio principal que ya apunta a tu IP pública (ejemplo npm.itrafa.com).

Estos pasos permiten que el tráfico de los subdominios sea redirigido a los servicios internos configurados a través de Nginx Proxy Manager.

De momento, este post se enfoca en la instalación y configuración básica de Nginx Proxy Manager. Los temas de redirecciones de puertos y configuración avanzada de DNS serán tratados en detalle en un futuro post.

7. Casos de Uso Prácticos

Nginx Proxy Manager facilita la gestión de múltiples aplicaciones y servicios en tu red, permitiéndote centralizar el acceso y mejorar la seguridad. A continuación, se presentan algunos casos de uso prácticos que demuestran cómo NPM puede optimizar tu infraestructura:

7.1. Acceso Centralizado a Múltiples Aplicaciones

Puedes tener tus propias aplicaciones corriendo en distintas IPs o incluso en diferentes puertos y hacer redirecciones usando NPM para que solo tengas que teclear el FQDN (Fully Qualified Domain Name) en tu navegador para dirigirte a esas apps. Por ejemplo:

  • https://app1.tudominio.com redirige a http://192.168.1.101:8080.
  • https://app2.tudominio.com redirige a http://192.168.1.102:9090.

7.2. Simplificación de la Configuración del Firewall

Al utilizar NPM, solo necesitas abrir los puertos estándar (80 y 443) en tu firewall. NPM se encargará de redirigir el tráfico interno a las aplicaciones correspondientes según el dominio solicitado. Esto elimina la necesidad de abrir múltiples puertos, reduciendo la complejidad y mejorando la seguridad de tu red.

7.3. Gestión Automatizada de Certificados SSL

NPM facilita la obtención y renovación automática de certificados SSL de Let’s Encrypt para cada dominio configurado. Esto garantiza que todas tus aplicaciones estén siempre protegidas con conexiones seguras sin necesidad de intervención manual.

7.4. Integración con Contenedores y Máquinas Virtuales

NPM se integra perfectamente con entornos que utilizan contenedores Docker o máquinas virtuales, proporcionando una capa adicional de gestión y seguridad. Esto es especialmente útil en infraestructuras de desarrollo y pruebas, donde la flexibilidad y la seguridad son prioritarias.

7.5. Implementación de Acceso Basado en Roles

Puedes configurar múltiples usuarios con distintos niveles de acceso y permisos en NPM. Esto es ideal para entornos colaborativos donde diferentes equipos necesitan gestionar distintas aplicaciones sin interferir entre sí.

8. Consideraciones Adicionales

Compatibilidad con Diferentes Entornos

Aunque en este tutorial hemos instalado NPM en un Contenedor LXC de Proxmox VE, los pasos son prácticamente iguales si decides instalarlo en:

  • Una PC con Linux: Sigue los mismos pasos de instalación de Docker y Docker Compose.
  • Una Máquina Virtual (VM): Crea una VM con una distribución Linux compatible y procede con la instalación.
  • Una Raspberry Pi: Asegúrate de utilizar imágenes de Docker compatibles con ARM y adapta el archivo docker-compose.yml si es necesario.

Seguridad

  • Actualiza regularmente los contenedores y aplicaciones para mantener la seguridad.
  • Configura firewalls adecuados para restringir el acceso a los puertos necesarios.
  • Utiliza certificados SSL válidos para asegurar las conexiones.
  • Configura Access Control Lists (ACLs) en NPM para gestionar quién puede acceder a qué servicios.

9. Conclusión

Instalar Nginx Proxy Manager en un contenedor Docker es una manera eficiente y flexible de gestionar proxies reversos y certificados SSL en tu infraestructura. Ya sea que lo instales en un Contenedor LXC de Proxmox VE, una VM, una PC con Linux o una Raspberry Pi, los pasos son prácticamente iguales, ofreciendo versatilidad según tus necesidades específicas.

Con NPM, puedes centralizar la gestión de múltiples aplicaciones, simplificar la configuración del firewall, y asegurar todas tus conexiones con certificados SSL automáticos. Además, su interfaz intuitiva facilita la administración incluso para usuarios con conocimientos técnicos limitados.

Si buscas una solución que te permita gestionar tus servicios web de manera centralizada y segura, Nginx Proxy Manager es la elección ideal. Aprovecha las ventajas de Docker para optimizar tu infraestructura y mantener tus servicios siempre disponibles y protegidos.


¿Te ha sido útil este tutorial? Compártelo y apóyanos para seguir creando contenido de calidad.

¡Gracias por tu apoyo!

Deja una respuesta

*