Montar un servidor casero gestionado con Docker Compose

servidor docker portainer
6 minutos, 33 segundos

Soy un tipo curioso y me gusta aprender. Llevo 40 años jugando y trasteando con ordenadores como hobby, desde el primer MSX que entró en casa he sentido curiosidad por probar cosas nuevas en este mundillo de la informática, soy totalmente autodidacta y es de las pocas aficiones que todavía me mantienen despierto. Dentro de esta curiosidad continua, llevaba un tiempo leyendo acerca de los contenedores, que si LXC, Docker, Proxmox, Kubernetes... y comencé a investigar como aprovechar esta tecnología para darle una nueva vida a mi vieja Raspberry Pi 3b+.

En mis ratos libres, que no son muchos, empecé a juguetear con OpenMediaVault y CasaOS dos sistemas operativos que cuidan la imagen y prometen poca curva de aprendizaje, pero dentro de la Pi3b+ se me quedaba corto en cuanto a capacidades. Con la Pi3b+ se pueden contenerizar muchos servicios pero en el momento que necesitas algo de rendimiento esta se queda congelada, está limitada en cuanto RAM y procesador y se nota con servicios que requieren mas "chicha". El primer uso que le quise dar era la gestión web de esta web, la tenia alojada en el proveedor de hosting pero me capaba la mitad de las opciones de WordPress, así que instale el contenedor de WordPress en la Pi3b+ y cloné el tema del hosting. El problema principal, como ya he dicho antes, era el rendimiento porque WordPress se come el solito toda la RAM para gestionar un simple cambio de imagen, así que me tuve que plantear una actualización de hardware (todavía no conocía el CMS que uso ahora, Grav, o la otra alternativa que he probado, Hugo, dos CMS que consumen muy pocos recursos).

HARDWARE

En estas estaba cuando cotilleando por Chollometro me encontré una oferta de Aliexpress de un MiniPC BMax B4Plus que ahora mismo está soportando esta web entre otros tantos servicios. Aquí tengo decir que hay cientos de opciones para montar un servidor casero, puedes usar un viejo ordenador de sobremesa, un viejo portátil, un viejo servidor, un SBC (Raspberry o equivalentes) o meterte en un PC nuevo, o un portátil nuevo o un MiniPC como hice yo. Para gustos los colores y no os engaño, primero busqué el ultimo modelo de Raspberry pero la subida de precios de los últimos tiempos han dejado a estos SBC como una opción bastante cara. Tras descartar Raspberry me planteé un MiniPC por estos motivos:

  • Consumo muy bajo.
  • Tamaño compacto. Lo tengo al lado del router y ninguna visita se ha dado cuenta.
  • Son silenciosos. Al menos este BMax, sé que está encendido por la luz frontal pero ruido ni uno.
  • Potencia. Son pequeños, pero los procesadores Intel/AMD que montan superan a cualquier SBC.

El modelo que uso yo tiene un procesador Intel N100, que creo que es lo mínimo que debes plantearte al montar un servidor casero. ¿Puedo poner un N95?,por supuesto, la diferencia no es mucha pero los precios ya se han igualado bastante, así que mejor tirar al superior. ¿Puedo poner un N150?, sin duda ganarías aproximadamente un 10% de potencia, pero el precio supera con creces ese 10%. Luego están los MiniPC que montan procesadores AMD y son tan buena opción como los Intel, posiblemente mejores, pero no me voy a meter en esto, aunque si hubiera encontrado una oferta de un MiniPC Ryzen por el mismo precio que me costó este BMax me hubiera tirado de cabeza...

SOFTWARE

Aquí es donde te puedes liar con todo lo que quieras, hay opciones para parar un tren a la hora de montar un servidor. El MiniPC traía pre-instalado Windows 11 y puedes instalar Docker Desktop, pero para el concepto que tengo de estas cosas, depender de Microsoft me "molesta" un poco, prefiero tirar hacia Linux o equivalentes por aquello del software libre, supongo que será la edad... También hay sistemas operativos ya preparados para este tipo de gestiones:

  • Proxmox es un sistema preparado para la virtualización y para Linux Containers. Súper profesional, con montones de opciones y configuraciones y es fácil encontrar ayuda en internet.
  • Unraid es otro sistema mas destinado al usuario domestico, con una comunidad enorme. Es un sistema con una curva de aprendizaje muy baja.
  • TrueNAS tiene unas características muy avanzadas pero necesitas un hardware superior, es recomendable usar un PC para moverlo sin problemas.
  • OpenMediaVault es otra opción sencilla, pero está mas enfocado a la gestion de un NAS. Aunque admite contenedores no es su principal objetivo.

Pero yo tenía claro que buscaba algo mas sencillo y fácil de configurar, la opción de Docker encaja de forma perfecta en esto, solo me faltaba la base. Para uso profesional tengo un PC con Windows y para el personal me manejo con un PC con Windows y Linux Mint, no le tengo miedo a Linux, así que elegí a Debian como la base de mi servidor. Debian es una de las bases de Linux, y es un sistema que prima la estabilidad, así que instalé la ultima versión (Trixie) sin entorno gráfico para ahorrar recursos y configuré el protocolo SSH para poder acceder de forma remota. No voy a profundizar es este apartado, pero si necesitas ayuda aquí tienes la guía oficial de instalación.

INSTALAR DOCKER

Una vez funcionando el sistema operativo toca instalar la base que va a gestionar los servicios a instalar en el servidor. Yo me decanté por Docker, que es un sistema de empaquetado de aplicaciones junto a todo lo que necesita para funcionar.

Tip

El logo de Docker explica muy bien su funcionamiento:

Imagina un barco de carga. Antes de los contenedores, subir mercancías de distintas formas y tamaños al barco era un caos, algunas cosas se dañaban o no encajaban. Con los contenedores metálicos estándar da igual si llevas ropa, comida o televisores, todo va dentro de su caja cerrada. El barco solo transporta cajas. Docker hace exactamente lo mismo con el software. Mete un programa, junto con sus versiones exactas de librerías y códigos, dentro de un contenedor.

Un contenedor de Docker es mucho más ligero, comparte los recursos esenciales del sistema operativo del servidor donde esta instalado, pero mantiene la aplicación aislada. Por eso arranca en segundos y ocupa muy poco espacio.

Vamos a instalar Docker sobre el sistema operativo Debian:

  • Actualizar sistema operativo Debian
    sudo apt update
    sudo apt upgrade
  • Crear un directorio para los contenedores
    mkdir docker
  • Descargar e instalar Docker
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
  • Añadir usuario al grupo Docker
    sudo usermod -a -G docker $USER
  • Reiniciar sistema operativo
    sudo reboot
  • Verificar la instalación de Docker
    docker --version
    docker run hello-world
    docker compose --versión

Después de verificar la instalación, confirmando que “hello-world” esta funcionando y verificar la versión activa de Docker Compose (la herramienta que nos permitirá crear los archivos de configuración de cada contenedor), vamos a instalar un panel gráfico para la gestión de Docker. Este panel de gestión web se llama “Portainer” y su función principal es facilitarnos la gestión de los contenedores a través de una interfaz gráfica.

Para instalar Portainer, vamos a seguir estas instrucciones:

  • Crear el volumen de datos para Portainer
    docker volume create portainer_data
  • Ejecutar Portainer
    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
  • Acceso Web a Portainer
    https://ip_del_servidor:9443

Una vez instalado Portainer vamos a acceder a la plataforma, nos pide crear una cuenta de usuario, la creamos y una vez dentro veremos que el contenedor “hello-world” esta todavía en funcionamiento. Ahora podemos pararlo y eliminarlo; es un contenedor de prueba y ya no es necesario.

Antes de finalizar este articulo, dos notas mas

Note

  • Actualizar Portainer
    docker stop portainer
    docker rm portainer
    docker pull portainer/portainer-ce:latest
    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
  • Actualizar contenedores docker desde su propia carpeta
    docker compose pull
    docker compose up -d
Escrito sin uso de Inteligencia Artificial. Gracias por leer el post.