# Cómo instalar Portainer en un VPS Linux

**URL:** <https://forum.boxtoplay.com/t/como-instalar-portainer-en-un-vps-linux/31869>\
**Category:** VPS\
**Tags:** español, vps\
**Created:** [Août 27, 2026, 3:34 UTC](https://forum.boxtoplay.com/t/como-instalar-portainer-en-un-vps-linux/31869 "2026-08-27T15:34:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![BoxToPlay-helper](https://forum.boxtoplay.com/user_avatar/forum.boxtoplay.com/boxtoplay-helper/32/5468_2.png) [@BoxToPlay-helper](https://forum.boxtoplay.com/u/BoxToPlay-helper)\
**Post date:** [Août 27, 2026, 3:34 UTC](https://forum.boxtoplay.com/t/como-instalar-portainer-en-un-vps-linux/31869/1 "2026-08-27T15:34:59Z")

</div>

![Cómo instalar Portainer en un VPS Linux](https://forum.boxtoplay.com/uploads/default/original/2X/9/95abac90840e58c59ab8dbf775789fe1a195eb73.jpeg)

### Instalar Portainer en un **VPS Linux**

[Portainer](https://www.portainer.io/) es una interfaz web para Docker. En lugar de hacerlo todo por SSH, ves contenedores, imágenes, volúmenes y stacks de Docker Compose en un panel, con botones para arrancar, parar, leer logs o desplegar un archivo Compose. El proyecto es de código abierto: el código está en el [repositorio oficial de GitHub](https://github.com/portainer/portainer).

Esta guía cubre **Portainer Community Edition** (CE), la edición gratuita. Encaja bien en un VPS personal o un laboratorio pequeño. La interfaz oficial está solo en inglés, así que las etiquetas de las capturas coinciden con lo que verás tras la instalación.

Al terminar tendrás:

- un contenedor Portainer que Docker reinicia solo
- una cuenta de administrador protegida con contraseña
- Docker local ya detectado y listo para gestionarse en el navegador
- el puerto `9443` limitado a tu IP, con `8000` y `9000` dejados cerrados

Así se ve el panel cuando Docker local ya está conectado: menú a la izquierda, barra superior, datos del entorno y, en el centro, los contadores (stacks, contenedores, imágenes, volúmenes, redes).

 ![Panel de Portainer con el menú local y los datos de Docker](https://forum.boxtoplay.com/uploads/default/original/2X/4/460bedd3ee6f1f6b1b5f153759e38c04caa1d68f.png)

### El plan

Si Docker ya funciona en el VPS, se resume en cinco gestos:

1. Crea el volumen `portainer_data` y arranca el contenedor oficial.
2. Abre `https://xxxx:9443/` en el navegador (certificado autofirmado en la primera visita).
3. Recupera el **setup token** en los logs y crea el admin en menos de cinco minutos.
4. Pulsa **Get Started** para quedarte en Docker local.
5. Restringe el puerto `9443`: Portainer habla con Docker con los mismos derechos que root.

### Requisitos previos

Antes de pegar los comandos:

- estás conectado como **root** en un VPS Linux de BoxToPlay, en general **Ubuntu 24.04** o **Debian 12** y más recientes
- **Docker** ya funciona. Si no, empieza por [Instalar Docker en Linux, guía práctica para empezar](https://www.boxtoplay.com/es/news/instalar-docker-en-linux-guia-practica-para-empezar-31748)
- el puerto TCP **9443** no lo usa otro servicio
- puedes autorizar el puerto **9443/tcp** en el cortafuegos hardware de tu espacio de cliente BoxToPlay, **solo desde tu IP** , antes de arrancar Portainer

Docker debe venir del repositorio oficial, no de un paquete `snap` de Ubuntu. Portainer lo desaconseja, y nuestra guía de Docker ya usa la secuencia `get.docker.com`.

### Paso 1: arrancar Portainer

Crea primero el volumen que guarda la base interna de Portainer (usuarios, ajustes, historial). Sin ese volumen, un simple `docker rm` borra también la cuenta admin.

```bash
docker volume create portainer_data

```

Descarga explícitamente la última imagen LTS para no reutilizar una versión antigua que haya quedado en la caché de Docker:

```bash
docker pull portainer/portainer-ce:lts

```

Lanza después la imagen oficial con la etiqueta **`lts`** , no `latest`. Es la recomendación actual de Portainer para un servidor.

```bash
docker run -d \
  -p 9443:9443 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

```

Respecto a la documentación oficial, simplificamos tres puntos:

- **no** publicamos el puerto `8000`. Sirve al túnel de los **Edge agents**. En un VPS único que solo gestiona su propio Docker no lo necesitas
- **no** publicamos el puerto HTTP `9000` por defecto. El acceso normal es **HTTPS en 9443**. El `9000` solo existe para marcadores antiguos
- el montaje de `/var/run/docker.sock` es de lectura-escritura, como en el procedimiento oficial. Una versión `:ro` rompería la creación de contenedores desde la interfaz

Comprueba que el contenedor está **Up** :

```bash
docker ps --filter name=portainer

```

Ejemplo de salida:

```plaintext
CONTAINER ID IMAGE STATUS PORTS NAMES
a1b2c3d4e5f6 portainer/portainer-ce:lts Up 8 seconds 8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, [::]:9443->9443/tcp portainer

```

Los `8000/tcp` y `9000/tcp` **sin** `0.0.0.0` son puertos expuestos por la imagen, no publicados en el VPS. No escuchan en Internet. Solo `9443` está realmente abierto, también en IPv6 si Docker lo mapea.

Si de verdad necesitas el HTTP antiguo además del HTTPS, añade `-p 9000:9000` al `docker run`. No es el camino que recomendamos.

### Paso 2: crear el primer administrador

Abre en el navegador:

```plaintext
https://xxxx:9443/

```

Sustituye `xxxx` por la IP pública o el DNS de tu VPS. En la primera carga, el navegador muestra un aviso de certificado: Portainer genera un certificado **autofirmado** hasta que le des uno real. Es lo esperado. Continúa solo si estás en **tu** máquina.

Una instancia nueva de Portainer CE exige un **setup token**. Sin ese token, cualquiera que alcance el puerto `9443` en los primeros minutos podría autoproclamarse admin. El token es de un solo uso, solo para crear la primera cuenta o restaurar una copia de seguridad.

Muéstralo en los logs:

```bash
docker logs portainer

```

Busca `setup_token=`. Copia solo la cadena hexadecimal larga que sigue, nada más. La [FAQ oficial del setup token](https://docs.portainer.io/faqs/installing/setup-token) describe el mismo gesto.

Tienes **cinco minutos** para crear el usuario. Pasado ese plazo, Portainer rechaza el setup por seguridad. Si ocurre, usa el bloque plegable al final de este artículo: reiniciar el contenedor genera un token **nuevo**.

La pantalla se parece a esta. La contraseña debe tener **al menos 12 caracteres**. El nombre propuesto es `admin`; puedes cambiarlo.

 ![Pantalla de creación del primer administrador de Portainer con el campo Setup token](https://forum.boxtoplay.com/uploads/default/original/2X/2/21c36d1235c2510039488c606b46193d80b958e6.png)

Escribe la contraseña dos veces, pega el setup token y pulsa **Create user**. No dejes esa contraseña en un repositorio, un ticket o un canal de Discord.

### Paso 3: quedarse en Docker local

Justo después se abre el **Environment Wizard**. Portainer ya ha visto el socket Docker del VPS. En un servidor único, pulsa **Get Started**. **Add Environments** sirve para enlazar otros hosts (agent, Kubernetes, nube). Aquí no hace falta. Esa pantalla aparece una sola vez: el siguiente inicio de sesión abre **Home** directamente.

 ![Pantalla Environment Wizard de Portainer con Get Started para Docker local](https://forum.boxtoplay.com/uploads/default/original/2X/0/05a645b38e039a89932e29ccb85e21af788481ab.png)

Llegas a la página **Home**. El entorno se llama **local** , el estado **Up** , y la URL mostrada es el socket Unix `/var/run/docker.sock`. Pulsa esa tarjeta para abrir el dashboard de Docker.

 ![Página Home de Portainer con el entorno Docker local](https://forum.boxtoplay.com/uploads/default/original/2X/0/013783a21dd5eff4cd5a58416250c9040529a6a3.png)

### Paso 4: contenedores y stacks

El menú izquierdo cubre el día a día:

- **Containers** : lista, start/stop, logs, consola
- **Images** : lo que ya está descargado
- **Volumes** y **Networks**
- **Stacks** : desplegar un archivo Docker Compose

La lista de contenedores, justo después de instalar, suele mostrar solo Portainer:

 ![Lista de contenedores de Portainer con solo el puerto HTTPS 9443 publicado](https://forum.boxtoplay.com/uploads/default/original/2X/8/83ee55da09b4b86b3b1b1bebb3b0040ebd9f2bbb.png)

**Stacks** empieza vacío. Lo más simple: **Add stack** , un nombre (por ejemplo `web`), el Compose pegado en el editor y **Deploy the stack**. Git y la subida también existen si los prefieres.

 ![Lista vacía de stacks de Portainer con el botón Add stack](https://forum.boxtoplay.com/uploads/default/original/2X/3/34772854198e2fbc5121f5af9208e841ac503ac3.png)

Un ejemplo mínimo para comprobar que un despliegue web funciona. Deja Nginx accesible solo desde el propio VPS en `127.0.0.1:8080`. Para exponerlo a Internet, elige explícitamente una publicación pública y protege ese puerto en el cortafuegos hardware de BoxToPlay.

```yaml
services:
  web:
    image: nginx:alpine
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped

```

Una vez desplegado, el stack `web` aparece en **Stacks** , y el contenedor suele llamarse `web-web-1` en **Containers**. Arranque, parada y logs se hacen desde la interfaz, sin volver a teclear `docker compose` por SSH.

### Seguridad: trata Portainer como un acceso root

Montar `docker.sock` no es un detalle. Quien pueda iniciar sesión en Portainer puede, en la práctica, lanzar cualquier contenedor, montar el disco del host y convertirse en root del VPS. La contraseña admin no es «otro login más»: es la llave de la máquina.

Configura el cortafuegos hardware de BoxToPlay **antes** del `docker run` y permite `9443/tcp` solo desde tu IP, nunca desde `0.0.0.0/0`. Revisa también la regla IPv6 si tu VPS tiene una dirección IPv6. Completa el setup inmediatamente después, sin dejar Portainer abierto «para más tarde».

Un puerto publicado por Docker puede saltarse las reglas UFW clásicas. Un comando como `ufw allow 9443/tcp` también permitiría todas las IP de origen en lugar de limitar el acceso a la tuya. Del mismo modo, una regla añadida a la cadena iptables `INPUT` no filtra correctamente el tráfico reenviado hacia un contenedor Docker.

Para añadir una restricción directamente en el VPS, usa la cadena `DOCKER-USER` con la IP de origen y la interfaz de red reales. Es una configuración avanzada que depende de la red del servidor, así que no pegues una regla genérica a ciegas. El cortafuegos hardware de BoxToPlay sigue siendo la forma más sencilla de limitar el acceso antes del primer arranque.

**No** publiques `8000` hasta que tengas Edge agents de verdad, y no compartas la URL de Portainer, ni siquiera «solo el rato de instalar». Portainer ya tiene autenticación web: una **Basic Auth** extra en el reverse proxy no es obligatoria. Sigue siendo útil si quieres un DNS y un certificado Let’s Encrypt limpios.

> **Reverse proxy HTTPS opcional con Nginx**
>
> Si prefieres `https://portainer.xxxx/` en lugar del puerto `9443` directamente en la IP del servidor, pon Nginx (o Apache) delante con un certificado válido y haz proxy hacia `https://127.0.0.1:9443`. Recrea Portainer con `-p 127.0.0.1:9443:9443` para que solo el reverse proxy pueda alcanzar ese puerto y deja que Nginx escuche en 443.
> 
> Recuerda que el certificado interno de Portainer es autofirmado: según el proxy, o bien das a Portainer un certificado real, o bien configuras el backend para aceptar ese certificado interno. El objetivo no es apilar tres capas de auth. Es una URL limpia y un solo puerto expuesto.

### Actualizar y hacer copias de seguridad

Los datos duraderos viven en el volumen `portainer_data`. Para actualizar:

```bash
docker pull portainer/portainer-ce:lts
docker stop portainer
docker rm portainer

```

Vuelve a lanzar **exactamente** el mismo `docker run` que en la instalación (mismos puertos, mismos volúmenes, misma etiqueta `lts`). No recrees el volumen: cuentas y ajustes se quedan.

Para una copia manual, para el contenedor y archiva el volumen, o haz un snapshot del VPS desde el espacio de cliente BoxToPlay antes de una actualización importante. El volumen con nombre `portainer_data` sobrevive a `docker rm`, también con la opción `-v`. La instalación solo se borra si eliminas ese volumen explícitamente, por ejemplo con `docker volume rm portainer_data` después de retirar el contenedor.

> **La instalación inicial ha caducado**
>
> Si ves un mensaje del tipo _timed out for security purposes_, la ventana de cinco minutos se ha cerrado. Reinicia el contenedor, vuelve a leer los logs y usa el `setup_token` **nuevo** :
> 
> ```bash
> docker stop portainer
> docker start portainer
> docker logs portainer
> 
> ```
> 
> No reutilices el token antiguo. Recrea el admin enseguida, otra vez en menos de cinco minutos.

### Y después

Portainer no sustituye las copias de seguridad, el cortafuegos ni las actualizaciones del sistema. Es práctico cada día, y peligroso si queda abierto a Internet.

Si buscas un **VPS Linux** entregado con acceso root, listo para Docker y con cortafuegos hardware en el espacio de cliente, puedes [lanzar tu servidor en BoxToPlay](https://www.boxtoplay.com/es/alquiler-vps/servidor-vps).
