Este artículo es parte de una serie donde mostraré como tengo configurado mi Homelab.
Los pasos son los siguientes:
- Editar la configuración de red para poder reservar una IP
- Instalar y configurar Cockpit
- Instalar y configurar Docker
- Instalar y configurar Portainer
Editar la configuración de red
¿Que significa esto? Básicamente Ubuntu usa un Client-ID que no es su dirección MAC cuando solicita DHCP. Esto significa que si creas una reservación para Ubuntu en tu servidor de DHCP, lo más probable sea que tu cliente reciba una dirección IP diferente a la que se reservó. Esto depende del comportamiento del servidor DHCP, así que para no dejarlo a la suerte podemos forzar Ubuntu a usar su dirección MAC cómo su Client-ID.
Para lograrlo, sólo debemos de editar el archivo de configuración de red ubicado en la ruta /etc/netplan/
. Eso lo hacemos con el comando:
sudo nano /etc/netplan/00-installer-config.yaml
Vamos a editar nuestro archivo cómo sigue:
# Esta es la configuración de red escrita por 'subiquity'
network:
ethernets:
eth0:
dhcp4: true
dhcp-identifier: mac
nameservers:
addresses: [1.1.1.1,8.8.8.8,9.9.9.9]
version: 2
renderer: NetworkManager
Aquí la tarjeta de red aparece cómo eth0
(puede ser diferente en tu caso), y nos aseguramos de que Ubuntu use su MAC como su Client-ID al agregar la línea dhcp-identifier: mac
. También agregamos nuestros servidores DNS favoritos con el bloque nameservers
y nos aseguramos que use Network Manager como su renderizador de red por defecto con renderer: NetworkManager
. Por favor ten en cuenta la jerarquía de las sangrías.
Cambiar el comportamiento de DNS (Opcional)
De forma predeterminada, Ubuntu usa resolvd para la resolución de DNS, lo que significa que apunta todas las solicitudes de DNS a la IP 127.0.0.53. Esto no es un problema en sí mismo, pero significa que Ubuntu se mantiene escuchando en el puerto 53, lo que impide que ningún servicio pueda escuchar en este puerto. Si deseas instalar Pi-Hole (o cualquier otro servidor DNS) en tu instancia de Ubuntu, entonces necesitas cambiar este comportamiento deshabilitando resolvd:
sudo systemctl disable systemd-resolved.service && sudo systemctl stop systemd-resolved
También debes de especificar tu servidor de DNS preferido en el archivo /etc/resolv.conf
en vez de 127.0.0.53.
Instalar y configurar Cockpit
Cockpit es una interfaz usuario que puedes abrir en tu navegador para administrar servidores Linux, y normalmente viene instalado por defecto en distribuciones basadas en RHEL, como Red Hat Enterprise Linux, CentOS Stream, Rocky Linux y AlmaLinux. Es una excelente manera de controlar sus servidores, administrar usuarios/grupos/almacenamiento/servicios, actualizar software, ver registros y mucho más.
Lamentablemente Cockpit no viene instalado en Ubuntu Server. Afortunadamente, el proceso de instalación de Cockpit en Ubuntu Server no es tan difícil, y vamos a hacer justamente eso.
Instalar Cockpit
Conéctate a tu instancia de Ubuntu Server y ejecuta el siguiente comando:
`sudo apt-get install cockpit -y`
Una vez terminada la instalación, habilita e inicia Cockpit con el comando:
`sudo systemctl enable --now cockpit.socket`
Ahora ya puedes iniciar sesión en Cockpit abriendo un navegador web y colocando la dirección https://ip_del_servidor:9090
. Te debería de aparecer una pantalla parecida a la siguiente:
Instalar y configurar Docker
Es perfectamente posible y valido instalar Docker desde los repositorios de Ubuntu con el comando sudo apt install docker.io -y
. Sin embargo, prefiero instalarlo directamente de los repositorios de Docker ya que son actualizados más frecuentemente y personalmente me gusta estar al día con el software que utilizo. La siguiente sección describe este proceso.
Instalar Docker desde su repositorio
- Configuramos el repositorio
apt
de Docker con los siguientes comandos:
# Añadimos la llave GPG oficial de Docker:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Añadimos el repositorio a las fuentes Apt:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- Instalamos los paquetes de Docker:
sudo apt-get install \
docker-ce docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
- Verificamos que la instalación de Docker fué exitosa corriendo la imagen
hello-world
(Hola Mundo):
sudo docker run hello-world
Administrar Docker sin root
El daemon de Docker se conecta a un socket Unix, no a un puerto TCP. De forma predeterminada, el usuario root es el propietario de dicho socket, y otros usuarios solo pueden acceder a él usando sudo
. El daemon de Docker siempre se ejecuta como usuario root.
Si no quieres anteponer el comando docker
con sudo
, crea un grupo llamado docker y agréguele usuarios. Cuando el daemon de Docker inicia, se crea un socket Unix al que pueden acceder los miembros del grupo de Docker. En algunas distribuciones de Linux, el sistema crea automáticamente este grupo al instalar Docker mediante un administrador de paquetes. En ese caso, no es necesario crear manualmente el grupo.
Para crear el grupo docker
y agregar tu usuario, usa los siguientes comandos:
sudo groupadd docker
sudo usermod -aG docker $USER
Luego cierra la sesión en inicia nuevamente para que se actualize la lista de grupos a las que pertenece el usuario, o activa los cambios con el comando:
newgrp docker
Verifica que puedes correr los comandos de docker
sin sudo
:
docker run hello-world
Configurar Docker para que inicie con el servidor
En Debian y Ubuntu, el servicio de Docker por defecto inicia con el encendido. Si por alguna razón no es tu caso, puedes iniciar Docker y containerd de manera automática en el encendido con los comandos siguientes:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Instalar y configurar Portainer
Portainer es una poderosa herramienta de código libre que permite crear y manejar contenedores de manera sencilla con Docker, Docker Swarm, Kubernetes y Azure ACI.
Portainer esconde la complejidad de administrar contenedores detrás de una interfaz fácil de usar. Removiendo la necesidad de usar la consola, escribir YAML o entender archivos de manifests, Portainer hace que desplegar aplicaciones y resolver problemas sea tan fácil que cualquiera pueda hacerlo.
Para instalar Portainer, primero necesitamos crearle un volumen para almacenar sus datos.
docker volume create portainer_data
Luego, descargamos e instalamos el contenedor de 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
Por ultimo, podemos verificar que Portainer está corriendo usando el comando docker ps
:
root@server:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de5b28eb2fa9 portainer/portainer-ce:latest "/portainer" 4 weeks ago Up 3 days 0.0.0.0:8000->8000/tcp, 0.0.0.0:9443->9443/tcp portainer
Ahora ya puedes iniciar sesión en Portainer abriendo un navegador web y colocando la dirección https://ip_del_servidor:9443
. Te debería de aparecer una pantalla parecida a la siguiente: