¿Qué cabe en un VPS de 2€?

Hasta la fecha, tengo varios servicios desperdigados entre varios servidores, alguna web en algún hosting, proyectos de un cliente en un servidor, el podcast en otro....y finalmente he decidido contratar un nuevo servidor en el que alojar ciertos servicios que quiero que funcionen al 100% y con los que no quiero tener problemas por el hecho de estar conviviendo junto a otros proyectos que se crean y se destruyen...

 Aprovechando esta situación, me animo a inaugurar el blog y dejar aquí documentado todo el proceso.

Para empezar decidr que he utilizado un VPS de ionos, concretamente el S+ con 2 vCPU, 2 GB de RAM y 60 GB de disco, como sistema operativo he elegido ubuntu 24.04

Configuración dominio / DNS 

 Lo primero una vez IONOS me ha dado el servidor ha sido revisar la zona DNS de mi dominio en cloudflare y apuntar los subdominios correspondientes a los servicios que voy a alojar a la IP del VPS, aquí mencionar que no he habilitado la capa de proxy de cloudflare, quiero que las cosas funcionen haya futbol o no.

Concretamente voy a alojar estos servicios:

  • nginx proxy manager 
  • pihole
  • wireguard
  • vaultwarden
  • appflowy 
  • navidrome
  • dropbot
  • n8n

Instalación de Docker 

Ya teniendo los nombres DNS, me he contado por SSH y he actualizado todo: 

 sudo apt-get update && sudo apt-get upgrade

He seguido con la instalación de Docker

# Add Docker's official GPG key:
sudo apt update
sudo apt 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

# Add the repository to Apt sources:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

 sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 

Instalación de Nginx Proxy Manager y SSL 

Ya con docker instalado, me he creado una carpeta: mkdir /root/docker y me he movido a su anterior para ir creando una carpeta para cada serivcio, por ejemplo: mdkir /root/docker/nginxpm

En este primer caso de nginx proxy manager, el compose.yml es este:

services:
  app:
    image: 'jc21/nginx-proxy-manager:2.16.0'
    restart: unless-stopped
    ports:
      - '443:443'
      - '8443:81'
    environment:
      TZ: "Europe/Madrid"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
 

Mencionar que he quitado el puerto 80 que habitualmente se publica para el HTTP Challenge a la hora de generar certificados SSL porqué yo uso DNS Challenge, y he cambiado el puerto 81 a 8443 porqué en el caso de IONOS, el 8443 ya viene abierto en el firewall y así evitaba tocar. 

Ya con el compose.yml creado, levanto el servicio con: docker compose up -d y accedo vía web para hacer la configuración inicial:

 

Lo primero que haré para ganar tiempo es generar un API Token en mi cuenta de cloudflare con los permisos necesarios para editar la zona DNS de mi dominio: https://dash.cloudflare.com/profile/api-tokens

Ya con el token creado, en Nginx Proxy Manager, voy a crear un certificado que sirva para todos los servicios, para ello voy a Certificates -> Add certificate y Let's encrypt via DNS

 

 Elegimos los valores seleccionados en la foto:

 

 Y en el campo Credentials File Content ponemos el token que hemos creado en cloudflare

Quedará tal que así:

 

 Instalación de PIHole

 Para instalar Pihole en Ubuntu 24.04, se da la circumstancia que el sistema ya levanta un servicio de DNS en el puerto 53, eso impide que pihole pueda escuchar en el mismo puerto, para solucionar esto hay que deshabilitar el servicio que ya viene, editamos /etc/systemd/resolved.conf y descomentmaos esta linea y ponemos su valor a "no"

 

Ahora ejecutamos:

sudo ln -sfn /run/systemd/resolve/resolv.conf /etc/resolv.conf

sudo systemctl restart systemd-resolved

 Otra cosa a tener en cuenta es que estoy detrás del firewall de IONOS, y aquí no hay otro peurto que pueda reaprovechar, así que me toca abrir el puerto 53 TCP.

 Y ahora sí, vamos con el compose.yml:

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Madrid'
      FTLCONF_webserver_api_password: 'password1234'
      FTLCONF_dns_listeningMode: 'ALL'
    volumes:
      - './etc-pihole:/etc/pihole'
    restart: unless-stopped

Levanto el contenedor y voy a nginx proxy manager a crear el nuevo host, aquí comentar que en el campo destination he tenido que poner la IP pública del serivdor porqué docker usa la red por defecto.
 

 

Comentarios

Entradas populares de este blog

136. El blog del podcast

129. Smart Launcher 6