bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación de Port

calendar_month Jun 09, 2026 schedule 24 min de lectura visibility 13 vistas
Установка Portainer на VPS: удобное управление Docker-контейнерами
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación de Portainer en un VPS: gestión cómoda de contenedores Docker

TL;DR

En esta guía configuraremos Portainer CE en su servidor privado virtual (VPS), proporcionándole una interfaz web potente e intuitiva para gestionar todos sus contenedores Docker, imágenes, volúmenes y redes. Esto simplificará significativamente el despliegue y la monitorización de sus aplicaciones, eliminando la necesidad de usar constantemente la línea de comandos.

  • Portainer CE se instala como un contenedor Docker en su VPS.
  • Obtendrá una GUI centralizada para gestionar todos los aspectos de Docker.
  • La guía incluye la preparación del servidor, la instalación de Docker y Portainer, y la configuración de TLS a través de Caddy.
  • Se presta especial atención a la seguridad, la copia de seguridad y el mantenimiento del sistema.
  • Todos los comandos son válidos para Ubuntu 24.04 LTS y las versiones de software para el año 2026.

Qué configuramos y por qué

Esquema: Qué configuramos y por qué
Esquema: Qué configuramos y por qué

Instalaremos Portainer Community Edition (CE) en su VPS. Portainer es una herramienta potente y ligera para gestionar entornos Docker, que proporciona una interfaz web intuitiva. Si ya trabaja con Docker, sabe que la gestión de contenedores, imágenes, redes y volúmenes a través de la línea de comandos puede ser bastante laboriosa, especialmente cuando se trabaja con varios proyectos o configuraciones complejas.

Al final, obtendrá un panel de control centralizado que le permitirá:

  • Desplegar y detener contenedores con unos pocos clics.
  • Gestionar imágenes y registros de Docker.
  • Configurar redes y volúmenes para sus aplicaciones.
  • Monitorizar el estado de los contenedores y sus registros.
  • Gestionar pilas de Docker Compose, crearlas y editarlas directamente desde la interfaz.
  • Configurar el acceso para varios usuarios con diferentes roles.

¿Por qué autoalojado en un VPS y no alternativas en la nube?

Existen diversas alternativas en el mercado para la gestión de contenedores. Pueden ser servicios gestionados en la nube, como AWS Elastic Container Service (ECS), Google Kubernetes Engine (GKE) o Azure Kubernetes Service (AKS). Estas plataformas ofrecen alta escalabilidad y le abstraen de los detalles de la infraestructura, pero a menudo son significativamente más caras y pueden ser excesivas para proyectos pequeños y medianos.

El despliegue autoalojado de Portainer en un VPS tiene varias ventajas:

  • Control total: Usted controla completamente su infraestructura, datos y configuraciones.
  • Ahorro de costes: Un VPS es significativamente más barato que los servicios gestionados en la nube, especialmente para cargas de trabajo pequeñas.
  • Flexibilidad: Puede configurar el servidor según sus necesidades específicas e instalar cualquier software adicional.
  • Experiencia y aprendizaje: La gestión de su propio servidor le proporciona valiosas habilidades en la administración de sistemas y Docker.
  • Privacidad: Sus datos permanecen en su servidor, bajo su control, lo cual es importante para proyectos sensibles.

Portainer es ideal para desarrolladores que necesitan configurar rápidamente entornos de prueba, para fundadores individuales que gestionan sus aplicaciones SaaS, para jugadores que despliegan servidores de juegos, o para entusiastas de las criptomonedas que ejecutan nodos. Ofrece un equilibrio entre facilidad de uso y potencia, haciendo que Docker sea accesible incluso para aquellos que no son expertos en DevOps.

Qué configuración de VPS se necesita para esta tarea

Esquema: Qué configuración de VPS se necesita para esta tarea
Esquema: Qué configuración de VPS se necesita para esta tarea

Portainer es una aplicación bastante ligera y consume un mínimo de recursos. Sin embargo, al elegir un VPS, es importante considerar no solo los requisitos de Portainer, sino también las posibles cargas de los contenedores Docker que gestionará. En 2026, los requisitos típicos de recursos para tareas pequeñas y medianas se mantienen relativamente estables.

Requisitos mínimos para Portainer y varios contenedores pequeños (por ejemplo, servidor web, base de datos, aplicación pequeña):

  • CPU: Mínimo 2 vCPU. Esto garantizará un rendimiento suficiente para Docker Engine, Portainer y varios contenedores activos sin ralentizaciones.
  • RAM: 2-4 GB. Portainer utiliza aproximadamente 50-100 MB de RAM. El resto será necesario para el sistema operativo y sus contenedores. Por ejemplo, un servidor web (Nginx/Apache), una base de datos (PostgreSQL/MySQL) y una pequeña aplicación Node.js/Python pueden usar fácilmente 1-2 GB de RAM.
  • Disco: 50-100 GB SSD. Los discos SSD son cruciales para el rendimiento de Docker, ya que aceleran las operaciones con imágenes y volúmenes. 50 GB serán suficientes para el SO, Docker Engine, varias imágenes y datos de aplicaciones. Si planea almacenar grandes volúmenes de datos (por ejemplo, registros, archivos multimedia, bases de datos grandes), elija 100 GB o más.
  • Red: Puerto de 1 Gbit/s. La mayoría de los proveedores de VPS modernos ofrecen esta velocidad por defecto. Esto garantizará una descarga rápida de imágenes Docker y un funcionamiento estable de sus aplicaciones.

Plan de VPS específico para la tarea

Para la mayoría de los usuarios que deseen instalar Portainer y gestionar 3-5 contenedores no muy intensivos en recursos (por ejemplo, un servidor web, una base de datos, un agente CI/CD, un pequeño backend), un VPS con las siguientes características será óptimo:

  • 2-4 vCPU
  • 4 GB de RAM
  • 100 GB SSD
  • Puerto de red de 1 Gbit/s

Puede encontrar un VPS con las características indicadas en la mayoría de los proveedores que ofrecen soluciones fiables y de alto rendimiento para servidores virtuales.

Cuándo se necesita un dedicado y no un VPS

En algunos casos, un VPS normal puede no ser suficiente, y vale la pena considerar el alquiler de un servidor dedicado (dedicated server):

  • Cargas de trabajo altas y constantes: Si planea ejecutar decenas de contenedores, bases de datos de alta carga, servicios de streaming o manejar un tráfico muy elevado.
  • Requisitos de rendimiento: Para tareas que requieren el máximo rendimiento de CPU (por ejemplo, compilación de código, aprendizaje automático) o una gran cantidad de memoria RAM (por ejemplo, bases de datos en memoria).
  • Hardware específico: Si necesita GPU para cálculos, arreglos RAID específicos u otras características de hardware no disponibles en un VPS.
  • SLA estrictos y aislamiento: Un servidor dedicado proporciona un aislamiento completo de los recursos, lo que puede ser crítico para algunas aplicaciones corporativas o para cumplir con estrictos requisitos de seguridad.

Para gestionar Portainer y decenas de contenedores en un servidor dedicado, necesitará un servidor dedicado adecuado con un potente procesador multinúcleo, 32-64 GB de RAM y varios SSD de gran capacidad.

Ubicación: qué influencia tiene

La elección de la ubicación del servidor VPS también es importante y depende de la audiencia objetivo de sus aplicaciones:

  • Latencia: Cuanto más cerca esté el servidor de sus usuarios, menor será la latencia y más rápida la carga de páginas o la respuesta de las aplicaciones. Si su audiencia principal se encuentra en Europa, elija un centro de datos europeo.
  • Legislación y cumplimiento normativo: En algunos casos (por ejemplo, para el procesamiento de datos personales) puede ser necesario almacenar los datos en una jurisdicción específica. Asegúrese de que la ubicación elegida cumple con todos los requisitos normativos (por ejemplo, GDPR para la UE).
  • Coste: Los precios de los VPS pueden variar ligeramente según la ubicación del centro de datos.

Generalmente se recomienda elegir la ubicación geográficamente más cercana a la mayoría de sus usuarios para garantizar la mejor experiencia de usuario.

Preparación del servidor

Diagrama: Preparación del servidor
Diagrama: Preparación del servidor

Antes de instalar Docker y Portainer, es necesario realizar una configuración básica y reforzar la seguridad de su VPS. Utilizaremos Ubuntu 24.04 LTS (Long Term Support) como sistema operativo actual y estable para el año 2026. Todos los comandos se ejecutan como usuario root o utilizando sudo.

1. Conexión al servidor

Conéctese a su VPS por SSH. Reemplace your_vps_ip con la dirección IP real de su servidor.


ssh root@your_vps_ip

Si es la primera conexión, es posible que se le pida que confirme la huella digital de la clave SSH del servidor.

2. Actualización del sistema

Siempre comience actualizando la lista de paquetes e instalando las actualizaciones disponibles para asegurarse de que su sistema utiliza las versiones de software más recientes.


sudo apt update && sudo apt upgrade -y

Este comando actualizará la caché de paquetes e instalará todas las actualizaciones disponibles sin pedir confirmación.

3. Creación de un nuevo usuario con permisos sudo

Trabajar como usuario root no se recomienda para tareas diarias por razones de seguridad. Cree un nuevo usuario y concédale permisos sudo.


adduser your_username

Siga las instrucciones en pantalla para establecer una contraseña y otra información (puede dejarla en blanco). Luego, añada el usuario al grupo sudo:


sudo usermod -aG sudo your_username

Ahora puede cambiar al nuevo usuario y ejecutar comandos con sudo.


su - your_username

4. Configuración de la autenticación por claves SSH (recomendado)

La autenticación por claves SSH es significativamente más segura que el uso de contraseñas. Si aún no utiliza claves SSH, genérelas en su máquina local.

Copie su clave SSH pública al servidor (reemplace ~/.ssh/id_rsa.pub con la ruta a su clave, y your_username y your_vps_ip con sus valores):


ssh-copy-id your_username@your_vps_ip

Si ssh-copy-id no está disponible, puede hacerlo manualmente:


mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

Pegue el contenido de su clave pública (normalmente comienza con ssh-rsa AAAA...) en el archivo authorized_keys y guárdelo. Luego, establezca los permisos correctos:


chmod 600 ~/.ssh/authorized_keys

5. Deshabilitar el inicio de sesión SSH para el usuario root

Después de configurar el inicio de sesión por claves SSH para el nuevo usuario, deshabilite la capacidad de iniciar sesión por SSH para root para mejorar la seguridad.


sudo nano /etc/ssh/sshd_config

Busque la línea PermitRootLogin y cámbiela a:


PermitRootLogin no

También se recomienda cambiar el puerto SSH predeterminado (22) por otro menos común para reducir el número de ataques automáticos. Busque la línea #Port 22, descoméntela y cámbiela a, por ejemplo, Port 2222. Si ha cambiado el puerto, no olvide especificarlo al conectarse: ssh -p 2222 your_username@your_vps_ip.

Reinicie el servicio SSH para que los cambios surtan efecto:


sudo systemctl restart sshd

6. Configuración del firewall (UFW)

UFW (Uncomplicated Firewall) es una herramienta conveniente para administrar el firewall en Linux. Configúrelo para permitir solo las conexiones necesarias:


sudo apt install ufw -y              # Instalar UFW, si aún no está instalado
sudo ufw allow OpenSSH               # Permitir SSH (puerto 22 por defecto, o su nuevo puerto)
sudo ufw allow http                  # Permitir HTTP (puerto 80)
sudo ufw allow https                 # Permitir HTTPS (puerto 443)
sudo ufw allow 9000/tcp              # Permitir puerto para Portainer Edge Agent (opcional, pero útil)
sudo ufw allow 9443/tcp              # Permitir puerto para la interfaz web de Portainer (HTTPS por defecto)
sudo ufw enable                      # Habilitar UFW
sudo ufw status verbose              # Verificar el estado del firewall

Cuando se le pida confirmación después de sudo ufw enable, escriba y.

7. Instalación de Fail2Ban

Fail2Ban escanea los registros del servidor (por ejemplo, registros SSH, del servidor web) y bloquea automáticamente las direcciones IP desde las que se han detectado intentos de fuerza bruta u otras acciones maliciosas. Esto mejora significativamente la seguridad de su servidor.


sudo apt install fail2ban -y         # Instalar Fail2Ban
sudo systemctl enable fail2ban       # Habilitar el inicio automático del servicio
sudo systemctl start fail2ban        # Iniciar el servicio

Fail2Ban está configurado por defecto para proteger SSH. Puede configurarlo adicionalmente copiando el archivo de configuración:


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

En este archivo, puede configurar parámetros como bantime (tiempo de bloqueo), findtime (período en el que se cuentan los intentos fallidos) y maxretry (número máximo de intentos fallidos). Para la mayoría de los casos, la configuración predeterminada en jail.local es suficiente.

8. Configuración de la sincronización horaria

La sincronización horaria correcta es fundamental para el funcionamiento de muchos servicios, incluidos los certificados TLS, los registros y los sistemas distribuidos.


sudo timedatectl set-ntp true        # Habilitar la sincronización horaria por NTP
sudo timedatectl status              # Verificar el estado de la sincronización

Ahora su servidor está listo para la instalación de Docker y Portainer. Realice los siguientes pasos utilizando su nuevo usuario y sudo.

Instalación de software — paso a paso

Diagrama: Instalación de software — paso a paso
Diagrama: Instalación de software — paso a paso

Ahora que su servidor está preparado y protegido, puede proceder con la instalación de Docker Engine y Portainer CE. Utilizaremos las versiones de software actuales para 2026, centrándonos en los últimos lanzamientos estables.

1. Instalación de Docker Engine (versión 26.0.x)

Docker Engine es la base sobre la que funcionarán Portainer y todos sus contenedores. Lo instalaremos desde el repositorio oficial de Docker para tener siempre acceso a las versiones más recientes.

1.1. Eliminación de versiones antiguas de Docker (si existen)

Si Docker se instaló previamente en el servidor, se recomienda eliminar todas las versiones antiguas para evitar conflictos.


for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done
1.2. Instalación de utilidades necesarias

Instale los paquetes necesarios para trabajar con repositorios HTTPS y claves GPG.


sudo apt update
sudo apt install ca-certificates curl gnupg -y
1.3. Adición de la clave GPG oficial de Docker

Añada la clave GPG de Docker para que su sistema pueda verificar la autenticidad de los paquetes del repositorio de Docker.


sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
1.4. Adición del repositorio de Docker a las fuentes de APT

Añada el repositorio oficial de Docker para Ubuntu 24.04 (nombre en clave Noble Numbat) a la lista de fuentes de paquetes de su sistema.


echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1.5. Instalación de Docker Engine, Containerd y Docker Compose

Actualice la lista de paquetes e instale Docker Engine, así como Containerd (entorno de ejecución de contenedores) y Docker Compose (herramienta para definir y ejecutar aplicaciones Docker de múltiples contenedores).


sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
1.6. Adición del usuario al grupo docker

Para poder ejecutar comandos Docker sin sudo, añada su usuario al grupo docker.


sudo usermod -aG docker $USER
newgrp docker # Aplicará los cambios a la sesión actual sin volver a iniciar sesión

Después de ejecutar newgrp docker, intente ejecutar un comando Docker sin sudo. Si no utilizó newgrp docker, deberá cerrar la sesión SSH y volver a iniciarla para que los cambios surtan efecto.

1.7. Verificación de la instalación de Docker

Asegúrese de que Docker Engine está instalado y funciona correctamente ejecutando el contenedor de prueba hello-world.


docker run hello-world

La salida debe contener un mensaje que indique que su Docker está instalado y funcionando.

2. Instalación de Portainer CE (versión 2.21.x)

Ahora que Docker está instalado, puede desplegar Portainer CE como un contenedor Docker. Utilizaremos la última versión estable de Portainer CE, que será relevante para 2026 (por ejemplo, 2.21.x).

2.1. Creación de un volumen para los datos de Portainer

Portainer almacena sus datos de configuración, bases de datos y ajustes en un volumen persistente. Créelo para que los datos se conserven incluso al actualizar o recrear el contenedor de Portainer.


docker volume create portainer_data
2.2. Inicio del contenedor de Portainer

Inicie Portainer CE en un contenedor. Lo configuraremos para que se inicie automáticamente al arrancar el servidor y enlazaremos los puertos y volúmenes necesarios.


docker run -d \
  -p 8000:8000 \
  -p 9443:9443 \
  --name portainer \
  --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Desglosaremos los parámetros del comando:

  • -d: Inicia el contenedor en modo de segundo plano (detached mode).
  • -p 8000:8000: Mapea el puerto 8000 del host al puerto 8000 del contenedor. Se utiliza para la comunicación con el Edge Agent si va a gestionar entornos Docker remotos.
  • -p 9443:9443: Mapea el puerto 9443 del host al puerto 9443 del contenedor. Este es el puerto principal para acceder a la interfaz web de Portainer a través de HTTPS.
  • --name portainer: Asigna el nombre portainer al contenedor para facilitar su gestión.
  • --restart always: Garantiza que el contenedor de Portainer se reiniciará automáticamente si se detiene o se reinicia el servidor.
  • -v /var/run/docker.sock:/var/run/docker.sock: Monta el socket de Docker del sistema host en el contenedor de Portainer. Esto permite que Portainer interactúe con el Docker Engine local.
  • -v portainer_data:/data: Monta el volumen portainer_data que creamos en el directorio /data dentro del contenedor, donde Portainer almacena sus datos.
  • portainer/portainer-ce:latest: Especifica la imagen de Docker de Portainer Community Edition. La etiqueta latest siempre apuntará a la última versión estable.
2.3. Verificación del estado del contenedor de Portainer

Asegúrese de que el contenedor de Portainer está en ejecución y funciona correctamente.


docker ps -a | grep portainer

La salida debe mostrar el contenedor con el nombre portainer en estado Up.

Ahora Portainer está instalado y en ejecución. En el siguiente paso, procederemos a su configuración inicial y a asegurar el acceso a través de HTTPS.

Configuración

Diagrama: Configuración
Diagrama: Configuración

Después de una instalación exitosa de Portainer, es hora de su configuración inicial y de asegurar un acceso seguro. Configuraremos el acceso a la interfaz web, crearemos un administrador y, lo más importante, aseguraremos una conexión HTTPS utilizando el proxy inverso Caddy y los certificados automáticos de Let's Encrypt.

1. Acceso inicial a la UI de Portainer

Abra su navegador web y vaya a https://your_vps_ip:9443. Será recibido por la página de configuración inicial de Portainer.

  1. Cree un usuario administrador: Ingrese un nombre de usuario (por ejemplo, admin) y una contraseña segura. Asegúrese de usar una contraseña compleja.
  2. Selección de entorno: Después de crear el usuario, Portainer le pedirá que elija qué entorno Docker desea gestionar. Seleccione "Get Started" para gestionar el entorno Docker local en su VPS.

Accederá al panel de control de Portainer. Tenga en cuenta que, por defecto, Portainer utiliza un certificado SSL autofirmado, por lo que su navegador emitirá una advertencia de conexión no segura. Solucionaremos esto configurando Caddy.

2. Configuración de TLS/HTTPS con Caddy (recomendado)

Usar Caddy como proxy inverso es una forma moderna y muy conveniente de proporcionar HTTPS para Portainer y sus otras aplicaciones. Caddy obtiene y renueva automáticamente los certificados Let's Encrypt, lo que simplifica significativamente la gestión de TLS.

2.1. Instalación de Caddy

Instalaremos Caddy desde su repositorio oficial.


sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y

Después de la instalación, Caddy se ejecutará como un servicio del sistema. Verifique su estado:


sudo systemctl status caddy

Debería estar en estado active (running).

2.2. Configuración del registro DNS

Para que Caddy pueda obtener un certificado Let's Encrypt, necesitará un nombre de dominio que apunte a su VPS. Cree un registro A con su registrador de dominios (por ejemplo, portainer.yourdomain.com) y especifique la dirección IP de su VPS.

Espere a que el registro DNS se propague por la red (esto puede tardar desde unos minutos hasta varias horas).

2.3. Configuración del Caddyfile

El Caddyfile es el archivo de configuración principal para Caddy. Lo configuraremos para que actúe como proxy de las solicitudes de su dominio a Portainer.


sudo nano /etc/caddy/Caddyfile

Elimine el contenido existente e inserte lo siguiente, reemplazando portainer.yourdomain.com con su nombre de dominio:


portainer.yourdomain.com {
    reverse_proxy localhost:9443 {
        transport http {
            tls_trust_panther_root
            insecure_skip_verify
        }
    }
}

Explicaciones del Caddyfile:

  • portainer.yourdomain.com: Especifica el dominio para el cual Caddy procesará las solicitudes y obtendrá automáticamente un certificado SSL.
  • reverse_proxy localhost:9443: Redirige todas las solicitudes entrantes al puerto local 9443, donde se ejecuta Portainer.
  • transport http { ... }: Este bloque es importante, ya que Portainer utiliza por defecto TLS autofirmado interno en el puerto 9443.
    • tls_trust_panther_root: Añade el certificado raíz de Let's Encrypt a los certificados de confianza.
    • insecure_skip_verify: ¡ATENCIÓN! Esta opción deshabilita la verificación del certificado del backend (Portainer). Se utiliza aquí porque Portainer usa un certificado autofirmado. En entornos de producción para otras aplicaciones donde el backend tiene un certificado válido, esta opción no debe usarse. Para Portainer, es aceptable, ya que Caddy mismo proporciona el TLS externo.

Guarde el archivo (Ctrl+O, Enter) y cierre el editor (Ctrl+X).

2.4. Aplicación de la configuración de Caddy

Verifique la sintaxis del Caddyfile y recargue el servicio Caddy.


sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Si todo está configurado correctamente, Caddy se recargará sin errores. Ahora puede acceder a Portainer en https://portainer.yourdomain.com. Su navegador ya no emitirá advertencias de seguridad, ya que Caddy proporcionará un certificado SSL válido de Let's Encrypt.

3. Verificación de la operatividad

Asegúrese de que Portainer sea accesible y funcione correctamente a través del nombre de dominio:


curl -I https://portainer.yourdomain.com

Debería ver el estado HTTP 200 OK o 302 Found (si Portainer redirige a la página de inicio de sesión), así como encabezados que indiquen una conexión HTTPS exitosa.

4. Despliegue de un contenedor de prueba a través de Portainer

Vamos a desplegar un servidor web Nginx simple para asegurarnos de que Portainer gestiona completamente el Docker Engine.

  1. Inicie sesión en Portainer a través de su dominio (https://portainer.yourdomain.com).
  2. En el menú de la izquierda, seleccione "Local" (debajo de "Environments").
  3. Vaya a "Containers", luego haga clic en "Add container".
  4. Rellene los campos:
    • Name: test-nginx
    • Image: nginx:latest
    • Port mappings: Haga clic en "publish a new network port".
      • Host port: 8080 (o cualquier puerto libre)
      • Container port: 80
      • Protocol: tcp
  5. Haga clic en "Deploy the container".

En unos segundos, el contenedor test-nginx debería estar en ejecución. Verifíquelo abriendo http://your_vps_ip:8080 en su navegador. Debería ver la página de bienvenida estándar de Nginx.

Ahora tiene Portainer completamente configurado con acceso seguro, listo para gestionar sus aplicaciones Docker.

Copias de seguridad y mantenimiento

Diagrama: Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento

Asegurar copias de seguridad regulares y un mantenimiento oportuno es crucial para cualquier sistema en producción. En esta sección, exploraremos qué exactamente necesita ser respaldado, cómo automatizar este proceso y cómo mantener su sistema actualizado.

1. Qué respaldar

Para Portainer y sus aplicaciones Docker, es necesario crear regularmente copias de seguridad de los siguientes componentes:

  • Datos de Portainer: Este es el elemento más importante. El volumen portainer_data contiene toda la configuración de Portainer, información de usuarios, registros, pilas, redes y volúmenes. Sin él, la restauración de Portainer significaría la pérdida de todas las configuraciones.
  • Volúmenes Docker de sus aplicaciones: Todos los datos persistentes utilizados por sus contenedores (bases de datos, archivos de usuario, descargas) se almacenan en volúmenes Docker. Cada volumen marcado como "persistent" o creado explícitamente debe ser respaldado.
  • Archivos Docker Compose: Si utiliza docker-compose.yml para definir sus aplicaciones, estos archivos son su "código fuente". Guárdelos en un sistema de control de versiones (por ejemplo, Git) y/o inclúyalos en las copias de seguridad regulares.
  • Archivos de configuración: Configuraciones de Caddy (/etc/caddy/Caddyfile), configuraciones de Fail2Ban (/etc/fail2ban/jail.local) y cualquier otra configuración personalizada del sistema operativo o de las aplicaciones.

2. Script simple de copia de seguridad automática con Restic

Utilizaremos Restic, una herramienta de copia de seguridad moderna, rápida, eficiente y cifrada. Restic soporta múltiples backends de almacenamiento, incluyendo almacenamiento compatible con S3, SFTP, Backblaze B2 y otros.

2.1. Instalación de Restic

Descargue la última versión de Restic y mueva el archivo ejecutable a /usr/local/bin.


# Проверьте актуальную версию на https://github.com/restic/restic/releases
RESTIC_VERSION="0.16.4" # Актуально на 2026, может меняться
wget https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_amd64.bz2
bzip2 -d restic_${RESTIC_VERSION}_linux_amd64.bz2
sudo mv restic_${RESTIC_VERSION}_linux_amd64 /usr/local/bin/restic
sudo chmod +x /usr/local/bin/restic
2.2. Configuración del repositorio de Restic

Cree un repositorio de Restic. Como ejemplo, utilizaremos un directorio local, pero para producción se recomienda encarecidamente utilizar almacenamiento remoto (S3, Backblaze B2, SFTP).


# Создаем директорию для локального репозитория (только для примера)
sudo mkdir -p /mnt/backups/restic_repo
sudo chown $USER:$USER /mnt/backups/restic_repo

# Инициализируем репозиторий. Замените 'your_strong_password' на ОЧЕНЬ надежный пароль.
# Этот пароль будет нужен для доступа ко всем вашим бэкапам.
export RESTIC_PASSWORD="your_strong_password"
restic init --repo /mnt/backups/restic_repo

Para almacenamiento compatible con S3 (por ejemplo, MinIO, AWS S3, DigitalOcean Spaces):


# Замените на свои данные
export AWS_ACCESS_KEY_ID="your_s3_access_key"
export AWS_SECRET_ACCESS_KEY="your_s3_secret_key"
export RESTIC_PASSWORD="your_strong_password"
restic init --repo s3:https://s3.your-region.amazonaws.com/your-bucket-name
2.3. Creación del script de copia de seguridad

Cree el archivo /usr/local/bin/backup_script.sh:


sudo nano /usr/local/bin/backup_script.sh

Pegue el siguiente contenido:


#!/bin/bash

# --- Configuración ---
# Ruta al repositorio de Restic
RESTIC_REPO="/mnt/backups/restic_repo" # O s3:https://... para remoto
# Contraseña para el repositorio de Restic
export RESTIC_PASSWORD="your_strong_password"
# Directorio para archivos temporales de copia de seguridad (si es necesario)
BACKUP_TEMP_DIR="/tmp/docker_backups"

# Qué respaldar
PATHS_TO_BACKUP=(
  "/var/lib/docker/volumes/portainer_data" # Datos de Portainer
  "/var/lib/docker/volumes/your_app_data_volume" # Ejemplo: volumen para su aplicación
  "/etc/caddy/Caddyfile"                  # Configuración de Caddy
  "/etc/fail2ban/jail.local"              # Configuración de Fail2Ban
  "/opt/docker-compose-projects"          # Directorio con archivos docker-compose.yml
)

# --- Funciones ---
# Función para crear instantáneas de volúmenes Docker (Portainer no se detiene)
backup_docker_volume() {
    local volume_path=$1
    local volume_name=$(basename "$volume_path")
    echo "Creando archivo temporal para el volumen Docker: $volume_name"
    # Para Portainer_data, basta con respaldar el directorio
    # Para otros volúmenes, puede ser necesario detener el contenedor
    # o usar 'docker run --rm -v $volume_name:/volume -v $BACKUP_TEMP_DIR:/backup alpine tar cvf /backup/$volume_name.tar /volume'
}

# --- Script principal ---
echo "--- Iniciando copia de seguridad $(date) ---"

# Creamos el directorio temporal si es necesario para copias de seguridad complejas de volúmenes
# mkdir -p "$BACKUP_TEMP_DIR"

# Ejecutamos la copia de seguridad con Restic
/usr/local/bin/restic backup \
  "${PATHS_TO_BACKUP[@]}" \
  --repo "$RESTIC_REPO" \
  --verbose \
  --tag "daily-backup" \
  --exclude-file /root/.restic_exclude.txt # Ejemplo de archivo de exclusión, si es necesario

# Limpieza de copias de seguridad antiguas (política de retención)
echo "Limpiando instantáneas antiguas..."
/usr/local/bin/restic forget \
  --repo "$RESTIC_REPO" \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune \
  --verbose

echo "--- Copia de seguridad completada $(date) ---"

# Eliminamos el directorio temporal
# rm -rf "$BACKUP_TEMP_DIR"

Haga el script ejecutable:


sudo chmod +x /usr/local/bin/backup_script.sh

Importante: Reemplace your_strong_password con su contraseña real del repositorio de Restic. Nunca almacene contraseñas en texto plano en producción; es mejor usar variables de entorno o secretos de Docker. Para una tarea cron, puede establecer RESTIC_PASSWORD directamente en crontab.

Para las copias de seguridad de volúmenes Docker, aparte de portainer_data, puede ser necesario detener los contenedores asociados o usar el comando docker run --rm -v :/volume -v /tmp/backup:/backup alpine tar cvf /backup/.tar /volume para crear una instantánea del volumen. Sin embargo, para la mayoría de las aplicaciones que manejan correctamente la E/S, una copia de seguridad directa del directorio del volumen es suficiente.

3. Automatización de copias de seguridad con Cron

Agregue el script a Cron para su ejecución automática diaria.


crontab -e

Seleccione un editor (si se le solicita) y agregue la siguiente línea al final del archivo para que el script se ejecute todos los días a las 3:00 AM:


0 3   * /usr/local/bin/backup_script.sh >> /var/log/backup.log 2>&1

Esta línea ejecutará el script diariamente a las 3 AM y redirigirá toda la salida al archivo /var/log/backup.log para su posterior análisis.

4. Dónde almacenar las copias de seguridad

Nunca almacene todas las copias de seguridad en el mismo servidor que los datos originales. Si el servidor falla, perderá tanto los datos como las copias de seguridad.

  • Almacenamiento externo compatible con S3: Opción recomendada. Puede ser AWS S3, Backblaze B2, DigitalOcean Spaces, MinIO o cualquier otro proveedor de almacenamiento de objetos. Es fiable, escalable y relativamente económico.
  • VPS separado: Puede configurar un segundo VPS, menos potente, y usarlo exclusivamente para almacenar copias de seguridad, por ejemplo, a través de SFTP o NFS.
  • NAS local/disco externo: Si gestiona un servidor local, puede usar un almacenamiento en red.

5. Mantenimiento y actualizaciones

Las actualizaciones regulares son cruciales para la seguridad y estabilidad del sistema.

  • Actualización del SO: Ejecute regularmente sudo apt update && sudo apt upgrade -y. Para Ubuntu LTS, esto se puede hacer una vez al mes o a medida que se publiquen parches de seguridad importantes.
  • Actualización de Docker Engine: Se actualiza junto con los paquetes del SO a través de apt upgrade. Siempre revise las notas de la versión antes de realizar actualizaciones importantes.
  • Actualización de Portainer:
    1. Detenga el contenedor actual de Portainer: docker stop portainer
    2. Elimine el contenedor actual: docker rm portainer
    3. Descargue la nueva imagen: docker pull portainer/portainer-ce:latest
    4. Inicie el nuevo contenedor, utilizando el mismo volumen de datos portainer_data:
      
      docker run -d \
        -p 8000:8000 \
        -p 9443:9443 \
        --name portainer \
        --restart always \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v portainer_data:/data \
        portainer/portainer-ce:latest
      

    Portainer se actualizará utilizando sus datos existentes.

  • Estrategia de actualizaciones:
    • Actualizaciones continuas (rolling updates): Para sistemas no críticos, se pueden configurar actualizaciones automáticas, pero esto es arriesgado.
    • Ventana de mantenimiento (maintenance window): Se recomienda planificar las actualizaciones durante períodos de baja carga, habiéndolas probado previamente en un servidor de staging (si lo hay).
  • Monitoreo de registros: Revise regularmente los registros del sistema (journalctl -xe), de los contenedores Docker (docker logs ) y de Portainer para identificar problemas en etapas tempranas.

El cumplimiento de estas prácticas garantizará la estabilidad, seguridad y capacidad de recuperación de su infraestructura Docker gestionada por Portainer.

Solución de problemas + Preguntas frecuentes

Esta sección recopila respuestas a preguntas frecuentes y soluciones a problemas comunes que pueden surgir al instalar y usar Portainer en un VPS.

No puedo acceder a Portainer por HTTPS a través del dominio.

Qué verificar:

  • Registro DNS: Asegúrese de que su registro A (por ejemplo, portainer.yourdomain.com) apunte correctamente a la dirección IP de su VPS y se haya propagado completamente a través de los servidores DNS. Verifique con dig portainer.yourdomain.com.
  • UFW (firewall): Verifique si el puerto 443 (HTTPS) está permitido en UFW. El comando sudo ufw status verbose debería mostrar 443/tcp ALLOW Anywhere.
  • Servicio Caddy: Verifique si Caddy está en ejecución y si hay errores en sus registros. Comandos: sudo systemctl status caddy y sudo journalctl -u caddy --no-pager.
  • Caddyfile: Asegúrese de que la configuración en /etc/caddy/Caddyfile sea correcta, que el nombre de dominio esté especificado correctamente y que haya recargado Caddy después de los cambios (sudo systemctl reload caddy).
  • Contenedor Portainer: Asegúrese de que el contenedor Portainer esté en ejecución y escuchando en el puerto 9443. Verifique con docker ps -a | grep portainer y docker logs portainer.

Cómo solucionarlo: Corrija el registro DNS, agregue una regla en UFW, verifique la sintaxis de Caddyfile, reinicie los servicios.

Los contenedores no se inician o fallan inmediatamente después de iniciarse.

Qué verificar:

  • Registros del contenedor: El primer paso es revisar los registros del contenedor problemático. En Portainer, puede hacerlo yendo a la sección "Containers", seleccionando el contenedor deseado y haciendo clic en "Logs". En la línea de comandos: docker logs <container_name_or_id>.
  • Disponibilidad de recursos: Verifique si hay suficiente RAM y CPU en el VPS. Algunos contenedores requieren más recursos de los que esperaba.
  • Configuración de volúmenes (volumes): Asegúrese de que todos los volúmenes necesarios estén montados correctamente y tengan los permisos de acceso adecuados.
  • Configuración de red: Si el contenedor necesita interactuar con otros contenedores o con la red externa, asegúrese de que su configuración de red sea correcta.
  • Errores en Dockerfile/docker-compose.yml: Si utiliza sus propias imágenes o Docker Compose, verifique los archivos en busca de errores de sintaxis o rutas incorrectas.

Cómo solucionarlo: Analice los registros, corrija Dockerfile/docker-compose.yml, asigne más recursos, verifique los permisos de acceso a los archivos y directorios utilizados por los volúmenes.

Los comandos de Docker requieren sudo, aunque agregué el usuario al grupo docker.

Qué verificar:

  • Grupo docker: Asegúrese de que su usuario realmente pertenezca al grupo docker. El comando groups $USER debería mostrar docker entre los grupos.
  • Reinicio de sesión: Después de agregar el usuario al grupo docker, es necesario cerrar la sesión SSH y volver a iniciarla para que los cambios surtan efecto. O ejecute newgrp docker.

Cómo solucionarlo: Cierre la sesión SSH y vuelva a iniciarla, o ejecute newgrp docker para actualizar la membresía de grupos para la sesión actual.

¿Qué configuración mínima de VPS es adecuada para Portainer y un par de aplicaciones pequeñas?

Para Portainer y 2-3 aplicaciones pequeñas (por ejemplo, un servidor web, una base de datos, un blog de WordPress), un VPS con 2 vCPU, 2-4 GB de RAM y 50-80 GB de disco SSD será suficiente. Esto garantizará un funcionamiento cómodo de Portainer y una operación estable de sus servicios.

¿Qué elegir: VPS o dedicado para esta tarea?

Para la gestión de contenedores Docker con Portainer y la ejecución de la mayoría de los proyectos medianos (varias decenas de contenedores, carga media), un VPS es la elección óptima. Es más económico, flexible y fácil de gestionar. Un servidor dedicado solo es necesario si planea ejecutar aplicaciones de muy alta carga, cientos de contenedores, o si requiere hardware específico (por ejemplo, GPU potentes) o un aislamiento físico completo de los recursos. Para la mayoría de los usuarios, un VPS será más que suficiente.

¿Cómo actualizar Portainer sin perder datos?

La actualización de Portainer generalmente se realiza sin pérdida de datos, ya que todos los datos importantes se almacenan en el volumen de Docker portainer_data. El proceso es el siguiente:

  1. Detenga el contenedor Portainer actual: docker stop portainer.
  2. Elimine el contenedor antiguo: docker rm portainer.
  3. Descargue la última versión de la imagen de Portainer: docker pull portainer/portainer-ce:latest.
  4. Inicie el nuevo contenedor, utilizando los mismos parámetros y el mismo volumen de datos portainer_data:
    
    docker run -d \
      -p 8000:8000 \
      -p 9443:9443 \
      --name portainer \
      --restart always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v portainer_data:/data \
      portainer/portainer-ce:latest
                

Después de esto, Portainer se iniciará con la nueva versión, utilizando todas sus configuraciones y datos anteriores.

Olvidé la contraseña de administrador de Portainer. ¿Cómo la restablezco?

Si olvidó la contraseña de administrador de Portainer, puede restablecerla siguiendo estos pasos:


# Detenga el contenedor Portainer
docker stop portainer

# Inicie un contenedor temporal para restablecer la contraseña
docker run --rm -it \
  -v portainer_data:/data \
  portainer/portainer-ce:latest \
  --admin-password "new_strong_password"

# Reemplace "new_strong_password" con su nueva contraseña.
# Después de ejecutar este comando, el contenedor temporal se eliminará.

# Inicie el contenedor principal de Portainer de nuevo
docker start portainer

Ahora puede iniciar sesión en Portainer con la nueva contraseña.

Conclusiones y próximos pasos

Diagrama: Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos

En esta guía detallada, hemos configurado con éxito Portainer Community Edition en su VPS, transformando el complejo proceso de gestión de contenedores Docker en una tarea intuitiva a través de una interfaz web. Ha pasado por todas las etapas: desde la preparación del servidor y la instalación de Docker hasta la configuración de acceso seguro a través de Caddy con certificados SSL automáticos, e implementado prácticas básicas de copia de seguridad y mantenimiento. Ahora tiene el control total de su infraestructura Docker, con una potente herramienta para desplegar, monitorear y gestionar sus aplicaciones.

Aquí hay algunas direcciones en las que puede avanzar para aprovechar al máximo las capacidades de su nuevo entorno:

  • Explore funciones adicionales de Portainer: Portainer ofrece muchas funciones avanzadas, como la gestión de pilas de Docker Compose, plantillas de aplicaciones, creación de equipos y gestión de acceso basada en roles (RBAC), integración con registros de imágenes y mucho más.
  • Implemente CI/CD: Integre Portainer en su flujo de trabajo de integración y entrega continua (CI/CD). Puede configurar el despliegue automático de nuevas versiones de sus aplicaciones en Portainer después de una compilación exitosa.
  • Monitoreo y registro: Considere instalar una pila de monitoreo, como Prometheus y Grafana, para un análisis profundo del rendimiento de sus contenedores y VPS. Para el registro centralizado, puede usar ELK Stack (Elasticsearch, Logstash, Kibana) o Grafana Loki.
  • Escalado: Si sus necesidades crecen, explore las capacidades de Docker Swarm o incluso Kubernetes. Portainer puede gestionar clústeres de Swarm y Kubernetes, proporcionando una interfaz unificada para escalar sus aplicaciones.

Su VPS es ahora una plataforma potente y flexible para alojar cualquiera de sus proyectos, y Portainer hace que la gestión de esta plataforma sea sencilla y eficiente.

¿Te fue útil esta guía?

Instalación de Portainer en VPS: fácil gestión de contenedores Docker
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.