Instalación y configuración de Nginx Proxy Manager en Debian 13

nginx-proxy-manager

¿Qué es Nginx Proxy Manager?

Nginx Proxy Manager (NPM) es una interfaz web que se apoya en Nginx para actuar como proxy inverso. Nos permite publicar los distintos servicios de nuestra red bajo un único punto de entrada (los puertos 80 y 443), asignando a cada uno un nombre de dominio, sin necesidad de editar los ficheros de configuración de Nginx a mano. Además integra la emisión y renovación automática de certificados SSL de Let’s Encrypt, redirecciones, listas de acceso y cabeceras personalizadas, todo desde un panel gráfico.

En este tutorial vamos a instalar Nginx Proxy Manager sobre Debian 13 utilizando Docker, que es la forma recomendada por el proyecto.

Requisitos

  • Debian 13 instalado y actualizado.
  • Los puertos 80 y 443 libres en el host (los usará el proxy) y el 81 para el panel de administración.
  • Privilegios de sudo o root.
  • Acceso a internet para descargar la imagen y emitir certificados.

Instalar Docker

Añadimos el repositorio oficial de Docker e instalamos el motor junto al plugin de Compose:

root@npm:~# apt update
root@npm:~# apt install -y ca-certificates curl
root@npm:~# install -m 0755 -d /etc/apt/keyrings
root@npm:~# curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
root@npm:~# chmod a+r /etc/apt/keyrings/docker.asc
root@npm:~# echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian trixie stable" > /etc/apt/sources.list.d/docker.list
root@npm:~# apt update
root@npm:~# apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Comprobamos que el servicio está activo:

root@npm:~# systemctl enable --now docker
root@npm:~# docker --version

Desplegar Nginx Proxy Manager

Creamos un directorio para el despliegue y dentro un fichero docker-compose.yml:

root@npm:~# mkdir -p /opt/npm && cd /opt/npm
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'      # tráfico HTTP de los servicios publicados
      - '443:443'    # tráfico HTTPS de los servicios publicados
      - '81:81'      # panel de administración
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Los dos volúmenes son importantes: en data se guardan la base de datos interna y la configuración de Nginx, y en letsencrypt los certificados emitidos. Con ellos podremos recrear el contenedor sin perder nada.

Levantamos el servicio (la primera vez tarda unos segundos en inicializar su base de datos interna):

root@npm:/opt/npm# docker compose up -d
root@npm:/opt/npm# docker compose ps

Primer acceso: crear la cuenta de administrador

Abrimos en el navegador http://10.10.10.11:81 (la IP de nuestro servidor y el puerto 81). Como es la primera vez, Nginx Proxy Manager nos da la bienvenida y nos pide crear la cuenta de administrador: nombre completo, correo electrónico y contraseña.

npm-crear-admin

Tras pulsar en Save accedemos al panel principal, donde vemos de un vistazo los Proxy Hosts, Redirection Hosts, Streams y 404 Hosts configurados (de momento, ninguno).

npm-dashboard

Cambiar la contraseña del administrador

Podemos cambiar la contraseña cuando queramos desde el menú de usuario, arriba a la derecha, en la opción Change Password.

npm-menu-perfil

Introducimos la contraseña actual y la nueva, y guardamos.

npm-cambiar-password

Publicar un servicio con proxy inverso

Vamos a publicar un servicio interno de ejemplo. Entramos en Hosts → Proxy Hosts; al principio la lista está vacía.

npm-proxy-vacio

Pulsamos en Add Proxy Host y en la pestaña Details rellenamos:

  • Domain Names: tools.ejemplo.lan
  • Scheme: http
  • Forward Hostname / IP: 10.10.10.13
  • Forward Port: 8080
  • Podemos activar Block Common Exploits y, si el servicio usa websockets, Websockets Support.

npm-nuevo-host

Al guardar, el host aparece en la lista con estado Online. Ya tenemos el servicio publicado a través del proxy.

npm-lista-hosts

Certificados SSL con Let’s Encrypt

Para servir el host por HTTPS emitimos un certificado. En la sección Certificates → Add Certificate tenemos tres opciones: Let’s Encrypt via HTTP, Let’s Encrypt via DNS o subir un certificado propio.

npm-certificados

  • Let’s Encrypt via HTTP (reto HTTP-01): el dominio debe resolver a la IP pública del proxy y el puerto 80 tiene que ser accesible desde internet.
  • Let’s Encrypt via DNS (reto DNS-01): valida creando un registro TXT con nuestro proveedor DNS; es la opción ideal para dominios internos que no están expuestos.

Una vez emitido, lo asignamos al host desde su pestaña SSL, donde además podemos marcar Force SSL y HTTP/2 Support. A partir de ese momento el servicio queda accesible por HTTPS a través del proxy.

Mantenimiento

Para actualizar Nginx Proxy Manager a la última versión basta con descargar la nueva imagen y recrear el contenedor:

root@npm:/opt/npm# docker compose pull
root@npm:/opt/npm# docker compose up -d

Y con esto ya hemos terminado la instalación y configuración de Nginx Proxy Manager en Debian 13, listo para publicar todos los servicios de nuestra red bajo un único proxy con certificados gestionados automáticamente.