C贸mo instalar y utilizar Portainer para la gesti贸n de Docker con Nginx Proxy Manager

Pantalla de instalaci贸n de contenedores

Portainer es una soluci贸n de gesti贸n de contenedores de c贸digo abierto para Docker, Kubernetes y Nomad que simplifica el inicio, la creaci贸n y la ejecuci贸n de contenedores de forma sencilla. Proporciona un panel de control basado en la web para gestionar contenedores, im谩genes, redes y vol煤menes.

En este tutorial, aprender谩s a instalar y configurar la soluci贸n de gesti贸n de contenedores Portainer en un servidor Linux y a utilizarla para crear y gestionar contenedores Docker para ejecutar diferentes aplicaciones. Tambi茅n aprender谩s a poner estos contenedores detr谩s de Nginx utilizando el gestor de proxy de Nginx.

Requisitos previos

  • Un servidor Linux con Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux.
  • Un usuario no root con privilegios sudo.
  • Un Nombre de Dominio Completamente Calificado (FQDN) que apunte al servidor para Portainer (portrainer.example.com) y al Administrador de Proxy Nginx (npm.example.com).

Paso 1 – Configurar el Firewall

Cent OS/Rocky Linux/Alma Linux

Deber铆a tener instalado el cortafuegos Firewalld. Compruebe el estado del cortafuegos.

$ sudo firewall-cmd --state
running

Abra los puertos 80, 9443 y 443. Portainer utiliza el puerto 9443 para exponer su UI web v铆a HTTPS. Nginx Proxy Manager utiliza el puerto 81 para su UI.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=9443/tcp
$ sudo firewall-cmd --permanent --add-port=81/tcp

Recargue el cortafuegos para habilitar los cambios.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Los sistemas Ubuntu y Debian utilizan ufw (Uncomplicated Firewall) por defecto.

Compruebe si el cortafuegos se est谩 ejecutando.

$ sudo ufw status

Si est谩 funcionando, abra los puertos 80, 9443 y 443.

$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81

Abra el puerto SSH si el cortafuegos no se est谩 ejecutando.

$ sudo ufw allow "OpenSSH"

Habilite el cortafuegos si no se est谩 ejecutando.

$ sudo ufw enable

Si se est谩 ejecutando, rec谩rguelo para aplicar los cambios.

$ sudo ufw reload

Paso 2 – Instalar Docker

Cent OS/Rocky Linux/Alma Linux

Ejecute el siguiente comando para instalar Docker.

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Habilite e inicie el servicio Docker.

$ sudo systemctl start docker --now

A帽ada su nombre de usuario al grupo Docker.

$ sudo usermod -aG docker $USER

Salga del sistema y vuelva a entrar para aplicar el cambio.

Paso 3 – Instalar Docker Compose

Descargue e instale el binario de Docker Compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Aplique el permiso de ejecuci贸n al binario.

$ sudo chmod +x /usr/local/bin/docker-compose

Paso 4 – Instalar Portainer

Cree un directorio para Portainer.

$ mkdir ~/portainer

Cambie al directorio.

$ cd ~/portainer

Cree y abra el archivo Docker Compose para editarlo.Anuncio

$ nano docker-compose.yaml

Pegue el siguiente c贸digo en 茅l.

version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      privileged: true
      volumes:
        - ./data:/data:Z
        - /var/run/docker.sock:/var/run/docker.sock:Z
      ports:
        - 9443:9443

Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le solicite.

Repasemos el archivo Docker compose.

  • Estamos sacando la 煤ltima versi贸n de Portainer Community Edition de Docker Hub. La Edici贸n Comunitaria de Portainer es de uso gratuito, mientras que su Edici贸n Empresarial requiere una licencia de pago. Usted puede sacar la Edici贸n Empresarial, pero se le pedir谩 la clave de la licencia para usarla.
  • Hemos llamado a nuestro contenedor como portainer para identificarlo y enlazarlo.
  • La pol铆tica de reinicio est谩 establecida en siempre para que el contenedor permanezca activo durante el arranque.
  • La configuraci贸n privilegiada: true es para que Portainer pueda acceder al socket de Docker y se ejecute en un contexto privilegiado ya que estamos utilizando SELinux. Si no est谩 utilizando SELinux, puede eliminar esta configuraci贸n. Esta configuraci贸n le da al contenedor Portainer acceso a todo en el sistema anfitri贸n, incluyendo el acceso al hardware. Por lo tanto, habilite esta configuraci贸n s贸lo cuando sepa lo que est谩 haciendo.
  • La secci贸n de vol煤menes mapea la carpeta en el host a las carpetas en el contenedor usando montajes Bind. Hemos expuesto el directorio ~/portainer/data al contenedor para almacenar cualquier dato relevante y el socket API de Docker para la gesti贸n del contenedor. La etiqueta :Z indica a Docker que estamos ejecutando SELinux en nuestro host. Si no tienes SELinux habilitado, debes quitar la etiqueta.

Inicie el Portainer.

$ docker-compose up -d

Compruebe el estado del contenedor.

$ docker ps
CONTAINER ID   IMAGE                           COMMAND        CREATED         STATUS         PORTS                                                           NAMES
916411e8d12e   portainer/portainer-ce:latest   "/portainer"   5 seconds ago   Up 4 seconds   8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp   portainer

Paso 5 – Acceso y configuraci贸n del contenedor

Abra la URL https://<yourserverIP>:9443 en su navegador, y obtendr谩 la siguiente pantalla.

Pantalla de instalaci贸n de contenedores

Se le pedir谩 que cree un nuevo usuario administrador. Agregue los detalles de su usuario. Desmarque la casilla Permitir la recogida de estad铆sticas an贸nimas si le preocupa la privacidad. Haga clic en el bot贸n Crear usuario para iniciar la instalaci贸n y crear una nueva cuenta de administrador.

A continuaci贸n, aparecer谩 la siguiente pantalla del panel de control.

Panel de control del contenedor

Despu茅s de unos segundos, se actualizar谩 autom谩ticamente y le mostrar谩 la siguiente pantalla.

Inicio de Portainer

Le mostrar谩 el entorno local en el que se est谩 ejecutando Portainer. Haga clic en el local para empezar.

P谩gina de inicio del entorno Portainer

La mayor铆a de las secciones se explican por s铆 mismas. La p谩gina web Pilas ayuda en la creaci贸n de contenedores usando archivos Docker compose. Puede desplegar contenedores directamente utilizando el Contenedores en la barra lateral. Puede configurar el entorno actual de Docker a trav茅s de la opci贸n Hosts secci贸n. La p谩gina web Plantillas de aplicaciones secci贸n viene con archivos de composici贸n Docker preinstalados para instalar las aplicaciones m谩s comunes. Tambi茅n puede crear plantillas personalizadas.Anuncio

El Ajustes le permite configurar varios ajustes como a帽adir registros Docker personalizados, a帽adir m煤ltiples hosts para Docker swarm, configurar el acceso de los usuarios, hacer copias de seguridad de los datos y personalizar Portainer.

Paso 5 – Poner Portainer detr谩s de un proxy inverso utilizando el Nginx Proxy Manager (NPM)

Antes de seguir adelante, vamos a poner Portainer detr谩s de un proxy inverso utilizando Nginx Proxy Manager. Nginx Proxy Manager es una aplicaci贸n Docker que proporciona una interfaz de usuario de gesti贸n web para configurar Nginx como un host de proxy inverso. Tambi茅n se puede utilizar como una redirecci贸n o un host de streaming.

Instalar NPM

El primer paso es crear una red para Nginx Proxy Manager (NPM). Abra el Redes y haga clic en el bot贸n A帽adir red para crear una nueva red.

Lista de redes de contenedores

D茅 un nombre a la red y deje todos los ajustes sin modificar. Haga clic en el bot贸n Crear la red para terminar.

Portainer Crear P谩gina de Red

Visite el Pilas y crear una nueva pila utilizando el A帽adir pila bot贸n.

P谩gina de pilas de contenedores

Nombra la pila como nginx-proxy-manager y pega el siguiente c贸digo en ella.

version: "3.3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '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
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
      DB_MYSQL_NAME: "npm"
      # Uncomment the line below if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./npm-data:/data:Z
      - ./letsencrypt:/etc/letsencrypt:Z
    depends_on:
      - npm-db
    networks:
      - npm-network
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
    volumes:
      - ./npm-data/mysql:/var/lib/mysql:Z
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-network:
    external: true

Portainer A帽adir P谩gina de Pila

Hemos establecido dos variables de entorno para establecer las contrase帽as de la base de datos y del root de MySQL. Portainer puede ser usado para establecer secretos usando variables de ambiente. Despl谩cese hacia abajo en la p谩gina y haga clic en el bot贸n A帽adir variable de entorno para a帽adir contrase帽as seguras.

Variables de entorno de la pila de contenedores

Haga clic en el bot贸n Desplegar la pila para crear e iniciar el contenedor NPM.

Acceder a NPM

Abra la URL https://<yourserverIP>:81 en su navegador, y obtendr谩 la siguiente pantalla. Introduzca las siguientes credenciales por defecto para iniciar sesi贸n.

Direcci贸n de correo electr贸nico: [email聽protected] Contrase帽a: changeme

A continuaci贸n, se le pedir谩 inmediatamente que establezca un nombre y una direcci贸n de correo electr贸nico. Haga clic en el bot贸n Guardar y se le pedir谩 que cree una nueva contrase帽a. Haga clic en el bot贸n Guardar para empezar.

Tablero del Administrador de Proxy Nginx

Visite el Hosts >> Proxy Hosts y haga clic en el bot贸n A帽adir host proxy bot贸n.

A帽adir Portainer como Host Proxy

Ingrese el nombre del dominio como portainer.ejemplo.com. Elija el esquema como https. Introduzca el nombre del contenedor como Nombre de host de reenv铆o y 9443 como Puerto de reenv铆o. Compruebe las opciones Bloqueo de explotaciones comunes y Soporte de Websockets opciones.

Opciones NPM SSL de Portainer

Cambie a la pesta帽a SSL y seleccione Solicitar un nuevo certificado SSL en el men煤 desplegable. Compruebe el Forzar SSL y Soporte de HTTP/2 opciones para asegurar y optimizar su conexi贸n SSL. Introduzca la direcci贸n de correo electr贸nico para recibir notificaciones de renovaci贸n y acepte las condiciones del servicio. Haga clic en el bot贸n Guardar para terminar de configurar el Host Proxy para el Portainer.

Conecte Portainer al Contenedor NPM

Hemos configurado el host Proxy, pero el contenedor a煤n no est谩 conectado a la red NPM. Vuelva al panel de control de Portainer, visite la secci贸n Contenedores y seleccione la secci贸n contenedor contenedor.

Seleccione npm-network en el men煤 desplegable bajo el Redes conectadas y haga clic en el bot贸n Unirse a la red para a帽adir el contenedor Portainer a la red del gestor de proxies.

Redes conectadas al contenedor

Puede aparecer un error, pero actualice la p谩gina y deber铆a ver el contenedor a帽adido a la red NPM.

Contenedor conectado a NPM

Deber铆a poder acceder a Portainer utilizando la URL https://portainer.example.com en su navegador.

Puede seguir un procedimiento similar para poner NPM detr谩s de una URL de acceso p煤blico como, https://npm.example.com como se discute en nuestro tutorial de Nginx Proxy Manager.

Ahora que ha establecido una URL p煤blica para Portainer, puede eliminar el puerto expuesto 9443. Para ello, vuelva a la Terminal y cambie al directorio de Portainer.

$ cd ~/portainer

Abra el archivo Docker compose para editarlo.

$ nano docker-compose.yaml

Elimine la secci贸n de puertos coment谩ndola, como se muestra a continuaci贸n.

version: "3.3"
services:
    portainer:
      image: portainer/portainer-ce:latest
      container_name: portainer
      restart: always
      privileged: true
      volumes:
        - ./data:/data:Z
        - /var/run/docker.sock:/var/run/docker.sock:Z
      #ports:
      #  - 9443:9443
      networks:
        - npm-network

networks:
  npm-network:
    external: true

Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le solicite.

Aqu铆, hemos a帽adido los detalles de la red NPM porque necesitaremos reiniciar el contenedor Portainer.

Detenga el contenedor Portainer.

$ docker-compose down --remove-orphans

Inicie el contenedor nuevamente con la configuraci贸n actualizada.

$ docker-compose up -d

Paso 6 – Desplegar un contenedor usando la Plantilla de la Aplicaci贸n

Portainer proporciona varias plantillas predefinidas para lanzar aplicaciones directamente con una configuraci贸n m铆nima.

Plantillas de aplicaciones de Portainer

Visite el Plantillas de aplicaciones y seleccione cualquier plantilla. Dele un nombre y seleccione la red a utilizar. Utilice la secci贸n de opciones avanzadas para desplegar puertos, redes y montajes de volumen personalizados.

Haga clic en el bot贸n Desplegar el contenedor para terminar de desplegar tu aplicaci贸n. Aqu铆 estamos desplegando el contenedor Redis.

Despliegue del contenedor Redis

Paso 7 – Gestionar contenedores

Vamos a gestionar un contenedor existente. Abra la p谩gina de contenedores, y ver谩 todos los contenedores en ejecuci贸n.

Lista de contenedores

Haga clic en el contenedor hw-redis recientemente creado para continuar.

Acciones del contenedor

En la parte superior, puede ver una lista de acciones que puede realizar en un contenedor en ejecuci贸n. Puede detener y matar el contenedor. Recrear crear谩 el contenedor desde cero. La p谩gina web Duplicar/Editar le permitir谩 crear otro contenedor id茅ntico que le permitir谩 cambiar la configuraci贸n antes de lanzarlo.

El Estado del contenedor muestra el tiempo de ejecuci贸n, la direcci贸n IP y otros detalles sobre el contenedor.

El Registros muestra la salida del comando docker logs. Como la salida del comando no se almacena en cach茅, cada vez que se actualiza la p谩gina, el comando se ejecuta desde cero.

Registros de Contenedores

El Inspeccionar ejecuta el comando docker inspect en el contenedor y muestra su resultado.

Inspecci贸n del contenedor Portainer

El Estad铆sticas le muestra el uso del contenedor en tiempo real.

Estad铆sticas del contenedor

Puede lanzar la consola del Contenedor utilizando el bot贸n Consola opci贸n. Se le pedir谩 el comando y el usuario del sistema a ejecutar.

Configuraci贸n de la consola del contenedor Portainer

Pulse el bot贸n Conectar para iniciar la consola.

Consola del contenedor Portainer Shell

El Adjuntar ejecuta el comando docker attach.

Hay otras opciones en la p谩gina de detalles del contenedor. Puede crear una imagen utilizando un contenedor existente. Otras opciones incluyen cambiar la pol铆tica de reinicio de un contenedor y conectar o desconectar una red a un contenedor existente.

Adjuntar un contenedor externo a Portainer

La creaci贸n de cualquier contenedor fuera de Portainer se mostrar谩 dentro de 茅l siempre y cuando sea creado en el mismo sistema que Portainer est谩 corriendo. Esto es posible porque Portainer est谩 conectado con Docker utilizando el websocket.

Probemos ejecutando el contenedor Docker Hola Mundo.

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Comprueba la lista de contenedores en la terminal. Estamos usando la bandera -a para mostrar la lista de todos los contenedores, incluyendo los detenidos. Puedes ver el nombre del contenedor como sad_williamson.

$ docker ps -a
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                     PORTS                                                                                  NAMES
5fa46b85d594   hello-world                       "/hello"                 3 minutes ago   Exited (0) 3 minutes ago                                                                                          sad_williamson
.....

Ahora, revise la p谩gina de Contenedores Portainer, y el hola mundo el contenedor aparecer谩 detenido en la lista con el mismo nombre.

Contenedor Hola Mundo

Conclusi贸n

Esto concluye nuestro tutorial sobre la instalaci贸n y el uso de Portainer para la gesti贸n de Docker y el Gestor de Proxy Nginx. Exploraremos la construcci贸n de im谩genes Docker, la creaci贸n de contenedores personalizados y el uso de Portainer con Docker swarm en un pr贸ximo tutorial. Si tienes alguna pregunta, publ铆cala en los comentarios a continuaci贸n.

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *