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

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Configuración de LXD en VPS para

calendar_month Aug 28, 2026 schedule 20 min de lectura visibility 35 vistas
Настройка LXD на VPS для изоляции сервисов и запуска легковесных контейнеров
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

Configuración de LXD en un VPS para aislamiento de servicios y ejecución de contenedores ligeros

TL;DR

En esta guía detallada, configuraremos LXD en su VPS para crear y gestionar contenedores aislados y ligeros. LXD permite ejecutar múltiples aplicaciones o servicios, cada uno en su propio entorno limpio, minimizando conflictos y mejorando la seguridad, mientras utiliza eficientemente los recursos del servidor. Aprenderá a instalar LXD, configurar su red y almacenamiento, iniciar contenedores y asegurar su funcionamiento estable y copias de seguridad.

  • Instalación e inicialización de LXD: Pasos detallados para instalar LXD en Ubuntu 24.04 LTS y su configuración básica.
  • Aislamiento y seguridad: Creación de contenedores aislados para cada servicio, aprovechando las ventajas de la virtualización ligera de LXD.
  • Gestión de recursos: Configuración de perfiles para contenedores con límites de CPU, RAM y espacio en disco.
  • Configuración de red: Configuración de una red puente para contenedores, que permite el acceso externo y la comunicación interna.
  • Copia de seguridad: Implementación de una estrategia de copias de seguridad utilizando instantáneas de LXD y almacenamiento externo.
  • Mantenimiento: Recomendaciones para actualizar LXD y gestionar el ciclo de vida de los contenedores.

Qué configuramos y por qué

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

En esta guía, nos centraremos en la configuración de LXD — un gestor de contenedores de sistema — en su servidor privado virtual (VPS). LXD permite ejecutar sistemas operativos completos (por ejemplo, Ubuntu, Debian, Alpine) dentro de contenedores ligeros que, a diferencia de las máquinas virtuales (como KVM), utilizan el kernel del sistema operativo anfitrión principal. Esto proporciona una sobrecarga significativamente menor, un arranque más rápido y una alta densidad de servicios en un solo servidor, manteniendo un alto nivel de aislamiento.

Qué obtendrá el lector al final: Aprenderá a utilizar eficientemente los recursos de su VPS, ejecutando diversos servicios (servidores web, bases de datos, servidores de juegos, nodos de blockchain) en contenedores separados y completamente aislados. Cada contenedor tendrá su propio sistema de archivos, pila de red y conjunto de procesos, lo que evitará conflictos de dependencias y simplificará la gestión. Esta es una solución ideal para desarrolladores, fundadores de SaaS y entusiastas que necesitan flexibilidad y control sobre su infraestructura sin la necesidad de alquilar múltiples VPS individuales.

Qué alternativas existen y por qué self-hosted en un VPS:

  • Máquinas virtuales (KVM, VMware): Proporcionan aislamiento de hardware completo, pero tienen una sobrecarga significativa de recursos (cada VM requiere su propio kernel de SO, más RAM y CPU). LXD es más eficiente para tareas donde se requiere aislamiento a nivel de SO, no de hardware.
  • Docker: Una excelente herramienta para la contenerización de aplicaciones, pero está orientada a la ejecución de procesos individuales o microservicios, no de sistemas operativos completos. LXD, a su vez, permite ejecutar "máquinas virtuales" a nivel de contenedores, lo que es más conveniente para migrar aplicaciones existentes o ejecutar servicios que requieren un sistema init completo (systemd).
  • Servicios gestionados en la nube (AWS EC2, Google Cloud Compute): Convenientes y escalables, pero a menudo más caros y menos flexibles para quienes desean un control total sobre su entorno. La configuración self-hosted de LXD en un VPS le brinda acceso completo al sistema, le permite optimizar los costos y adaptar la configuración a sus necesidades únicas.

La elección de LXD self-hosted en un VPS se justifica cuando necesita flexibilidad, aislamiento, uso eficiente de los recursos, pero al mismo tiempo desea evitar altos costos y las limitaciones de los proveedores de la nube.

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

La elección de un VPS adecuado para LXD depende de la cantidad y el tipo de contenedores que planee ejecutar. LXD en sí mismo es muy ligero, pero cada contenedor en ejecución consume recursos.

Requisitos mínimos para el host LXD (sin contar los contenedores):

  • CPU: 1-2 vCPU (para el host y varios contenedores ligeros). Los procesadores modernos con instrucciones de virtualización (VT-x/AMD-V) son deseables, pero LXD puede funcionar sin ellos, aunque con menor rendimiento.
  • RAM: 2 GB (para el host y operaciones básicas de LXD). Si planea ejecutar contenedores con bases de datos o servidores web, necesitará más.
  • Disco: 40-60 GB NVMe SSD. LXD puede funcionar con HDD, pero un SSD mejora significativamente el rendimiento de E/S, lo cual es crítico para los contenedores. NVMe proporciona la máxima velocidad.
  • Red: Puerto de 1 Gbps (estándar para la mayoría de los VPS).

Plan de VPS específico para la tarea (por ejemplo, para 3-5 contenedores: servidor web, base de datos, servidor VPN):

  • CPU: 4 vCPU
  • RAM: 8 GB
  • Disco: 160-200 GB NVMe SSD (incluyendo espacio para datos de contenedores e instantáneas)
  • Red: 1 Gbps, sin restricciones de tráfico o con un límite alto.

Para alquilar un VPS con las características indicadas, asegúrese de que el proveedor ofrezca NVMe SSD y una cantidad suficiente de núcleos/RAM para sus necesidades. La mayoría de los proveedores de VPS modernos ofrecen estas configuraciones.

Cuándo se necesita un servidor dedicado, no un VPS:

Si planea ejecutar decenas de contenedores, bases de datos de alta carga, servidores de juegos con muchos jugadores, o tiene requisitos de hardware muy específicos (por ejemplo, GPU para aprendizaje automático), entonces debería considerar un servidor dedicado. Los servidores dedicados le proporcionan todos los recursos físicos de la máquina, lo que elimina el "ruido de vecinos" y ofrece el máximo rendimiento. Además, los servidores dedicados a menudo tienen opciones más flexibles para el subsistema de disco (RAID, HDD+SSD).

Ubicación: en qué influye

La elección de la ubicación del VPS juega un papel importante, especialmente para servicios críticos en cuanto a latencia:

  • Latencia: Cuanto más cerca esté el servidor de su público objetivo, menor será la latencia y más rápida la respuesta. Para los sitios web, esto afecta la velocidad de carga de las páginas; para los servidores de juegos, el ping.
  • Factores geopolíticos y legislación: En algunos países, existen leyes más estrictas sobre el almacenamiento de datos o la censura. Tenga esto en cuenta al elegir una ubicación para datos confidenciales o servicios que requieran un alto grado de privacidad.
  • Costo: Los precios de los VPS pueden variar según la ubicación debido a las diferencias en el costo de la electricidad, el alquiler del centro de datos y los impuestos.

Siempre elija una ubicación que esté geográficamente más cerca de la mayoría de sus usuarios o de usted, si es el principal consumidor del servicio.

Preparación del servidor

Esquema: Preparación del servidor
Esquema: Preparación del servidor

Antes de instalar LXD, es necesario realizar una configuración básica de su VPS para garantizar la seguridad y estabilidad. Utilizaremos Ubuntu Server 24.04 LTS como sistema operativo anfitrión principal.

1. Conexión por SSH

Conéctese a su servidor como usuario root o como el usuario proporcionado por el proveedor:


ssh root@ВАШ_IP_АДРЕС
    

2. Actualización del sistema

Primero, actualice todos los paquetes a las versiones más recientes:


sudo apt update          # Actualizar la lista de paquetes
sudo apt upgrade -y      # Actualizar los paquetes instalados sin pedir confirmación
sudo apt autoremove -y   # Eliminar dependencias innecesarias
    

3. Creación de un nuevo usuario con permisos sudo (si aún no existe)

Trabajar como root no es seguro. Cree un nuevo usuario y concédale permisos sudo.


adduser ваш_пользователь          # Crear un nuevo usuario
usermod -aG sudo ваш_пользователь # Añadir el usuario al grupo sudo
    

Ahora, cierre la sesión de root e inicie sesión con el nuevo usuario:


exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС
    

4. Configuración de claves SSH (recomendado)

Para mejorar la seguridad, se recomienda usar claves SSH en lugar de contraseñas. Si aún no tiene claves, genérelas en su máquina local:


# En su máquina local
ssh-keygen -t rsa -b 4096 -C "ваш[email protected]"
    

Luego, copie la clave pública al servidor:


# En su máquina local
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС
    

Después de verificar el inicio de sesión con clave, desactive la autenticación por contraseña en /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config
    

Encuentre las líneas y establezca los valores:


PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
    

Reinicie el servicio SSH:


sudo systemctl restart sshd
    

5. Configuración del Firewall (UFW)

Habilite el firewall UFW y permita solo los puertos necesarios (SSH, HTTP/HTTPS, así como los puertos que utilizarán los contenedores).


sudo apt install ufw -y              # Instalar UFW
sudo ufw allow OpenSSH               # Permitir SSH (puerto 22)
sudo ufw allow http                  # Permitir HTTP (puerto 80)
sudo ufw allow https                 # Permitir HTTPS (puerto 443)
sudo ufw enable                      # Habilitar UFW
sudo ufw status verbose              # Verificar el estado de UFW
    

Más tarde, si sus contenedores utilizarán otros puertos, también deberá abrirlos.

6. Instalación de Fail2Ban

Fail2Ban ayuda a proteger el servidor contra ataques de fuerza bruta, bloqueando las direcciones IP desde las cuales se producen numerosos intentos fallidos de inicio de sesión.


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
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Crear una configuración local
    

Puede editar /etc/fail2ban/jail.local para configurar las reglas, pero la configuración predeterminada para SSH ya es bastante buena.


sudo systemctl restart fail2ban      # Reiniciar Fail2Ban después de los cambios
    

Su servidor ahora está protegido de forma básica y listo para la instalación de LXD.

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 el servidor está preparado, procedemos a la instalación de LXD. Utilizaremos el paquete snap, ya que es el método recomendado y más actualizado para instalar LXD en Ubuntu.

1. Instalación de LXD a través de Snap

LXD en Ubuntu se distribuye como un paquete snap, lo que garantiza su actualidad y aislamiento. Para Ubuntu 24.04 LTS, snap ya viene instalado por defecto.


sudo snap install lxd --channel=6.0/stable # Instalación de LXD 6.0 LTS (versión actual para 2026)
    

Después de la instalación, añada su usuario al grupo lxd, para que pueda gestionar LXD sin sudo:


sudo usermod -aG lxd ваш_пользователь # Añadir usuario al grupo lxd
newgrp lxd                            # Aplicar cambios de grupo sin reiniciar sesión (o simplemente reinicie sesión)
    

Asegúrese de que LXD está instalado y disponible:


lxd --version                         # Verificar la versión de LXD
    

2. Inicialización de LXD

Después de instalar LXD, es necesario inicializarlo, configurando los ajustes básicos de almacenamiento y red. Este es un proceso interactivo.


lxd init                              # Iniciar la inicialización interactiva de LXD
    

Durante la inicialización, se le harán las siguientes preguntas. Aquí están las respuestas recomendadas para la mayoría de los escenarios de VPS:

  • Would you like to use LXD clustering? (yes/no) [default=no]: no (para un solo VPS, no se necesita clúster)
  • Do you want to setup a new storage pool? (yes/no) [default=yes]: yes
  • Name of the new storage pool [default=default]: default (o cualquier otro nombre)
  • Would you like to use an existing block device? (yes/no) [default=no]: no (si no tiene un disco separado)
  • Would you like to use a new loop device? (yes/no) [default=yes]: yes (creará un archivo de imagen para almacenar contenedores)
  • Size in GiB of the new loop device (minimum 4GiB) [default=100GiB]: 50GiB (o más, dependiendo del tamaño de su disco y sus planes. Deje espacio para el host)
  • Would you like to connect to a remote LXD daemon? (yes/no) [default=no]: no
  • Would you like to setup a new network bridge? (yes/no) [default=yes]: yes
  • What should the new bridge be called? [default=lxdbr0]: lxdbr0 (nombre estándar)
  • What IPv4 address should be used? (CIDR format, e.g. 10.0.0.1/24) [default=10.200.200.1/24]: 10.200.200.1/24 (o cualquier otro rango privado que no se superponga con su red local)
  • Would you like LXD to NAT traffic on its own? (yes/no) [default=yes]: yes (para el acceso de los contenedores a internet)
  • What IPv6 address should be used? (CIDR format, e.g. fd42:42:42:42::1/64) [default=none]: none (si no se necesita IPv6)
  • Would you like the LXD daemon to be available over the network? (yes/no) [default=no]: no (si no planea gestionar LXD de forma remota)
  • Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: yes
  • Would you like a YAML summary of your configuration? (yes/no) [default=yes]: yes

Una vez completada la inicialización, LXD está listo para funcionar. Puede verificar el estado de la red:


lxc network list                      # Ver el estado de las redes LXD configuradas
    

3. Iniciar el primer contenedor

Ahora, vamos a iniciar nuestro primer contenedor. Por ejemplo, Ubuntu 22.04 LTS.


lxc launch ubuntu:22.04 my-first-container # Iniciar un contenedor con la imagen de Ubuntu 22.04 LTS bajo el nombre my-first-container
    

Verifique el estado del contenedor:


lxc list                              # Lista de todos los contenedores en ejecución
    

Verá el estado RUNNING y la dirección IP asignada al contenedor en la red lxdbr0.

4. Acceso al contenedor y configuración básica

Puede obtener una línea de comandos dentro del contenedor:


lxc exec my-first-container bash      # Ejecutar el comando bash dentro del contenedor
    

Dentro del contenedor se puede trabajar como en un sistema Ubuntu normal. Actualícelo:


apt update && apt upgrade -y          # Actualizar paquetes dentro del contenedor
exit                                  # Salir del contenedor
    

5. Configuración de un perfil para contenedores (ejemplo)

Los perfiles de LXD permiten aplicar configuraciones estándar (recursos, red) a múltiples contenedores. Crearemos un perfil para un servidor web.


lxc profile copy default webserver    # Copiar el perfil predeterminado a uno nuevo 'webserver'
lxc profile edit webserver            # Editar el nuevo perfil
    

En el archivo YAML abierto, añada o modifique la sección limits:


config:
  limits.cpu: "2"                     # Límite de CPU a 2 núcleos
  limits.memory: "2GB"                # Límite de RAM a 2GB
  limits.disk: "50GB"                 # Límite de disco a 50GB (si usa un pool con cuotas)
  user.user-data: |                   # Ejemplo de cloud-init para la configuración inicial
    #cloud-config
    runcmd:
      - echo "Hello from cloud-init!" > /root/cloud-init-test.txt
    packages:
      - nginx
    users:
      - name: myuser
        sudo: ALL=(ALL) NOPASSWD:ALL
        groups: users, sudo
        shell: /bin/bash
        ssh_authorized_keys:
          - ssh-rsa AAAAB3NzaC... your_public_key_here
    

Guarde y cierre el archivo. Ahora puede iniciar contenedores con este perfil:


lxc launch ubuntu:22.04 my-web-server --profile webserver # Iniciar un contenedor con el perfil webserver
    

Esto garantiza la estandarización y simplifica la gestión de recursos.

6. Reenvío de puertos en el host para acceder a los contenedores

Por defecto, los contenedores tienen direcciones IP privadas. Para hacer que un servicio dentro de un contenedor sea accesible desde internet, es necesario reenviar un puerto del host al contenedor. Por ejemplo, si Nginx en el contenedor my-web-server escucha en el puerto 80, y usted quiere que sea accesible a través del puerto 80 de su VPS:


lxc config device add my-web-server myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:10.200.200.X:80 # Reenvío del puerto 80 del host al contenedor
    

Reemplace 10.200.200.X con la dirección IP real de su contenedor (puede averiguarlo con lxc list). No olvide abrir el puerto 80 en el UFW del host, si aún no está abierto.

Configuración

Esquema: Configuración
Esquema: Configuración

Después de instalar LXD e iniciar un contenedor base, el siguiente paso es una configuración más detallada. Esto incluye la configuración del almacenamiento, la red, así como el despliegue y la seguridad de los servicios dentro de los contenedores.

1. Gestión del almacenamiento de LXD

Al inicializar LXD, seleccionó un tipo de almacenamiento (por defecto, loop device). LXD soporta varios controladores: dir (directorio), zfs, btrfs, ceph. Para la mayoría de los VPS, dir o zfs son los más adecuados.

  • dir: Simple y fiable, almacena los datos de los contenedores en el sistema de archivos normal del host. No soporta instantáneas a nivel de sistema de archivos.
  • zfs: Recomendado para escenarios más avanzados. ZFS proporciona potentes funciones como instantáneas, clonación, compresión y deduplicación de datos. Requiere más RAM en el host.

Si desea cambiar a ZFS, primero instale los paquetes:


sudo apt install zfsutils-linux -y    # Instalación de utilidades ZFS
    

Luego puede crear un nuevo pool ZFS o usar uno existente. Si desea usar ZFS para LXD, es mejor hacerlo durante la inicialización inicial de LXD o crear un nuevo pool y asignarlo:


lxc storage create myzfs zfs source=/var/snap/lxd/common/lxd/disks/myzfs.img size=100GiB # Creación de un pool ZFS en un archivo
# O, si hay un disco separado:
# lxc storage create myzfs zfs source=/dev/sdb
lxc profile device add default root disk path=/ pool=myzfs # Vinculación del pool al perfil
    

Ahora todos los nuevos contenedores que usen el perfil default utilizarán el almacenamiento myzfs.

2. Configuración de red de los contenedores

LXD crea una red en puente (lxdbr0) por defecto. Cada contenedor recibe una dirección IP de esta subred. Para acceder a los contenedores desde el exterior, como se mostró anteriormente, se utiliza el proxy de puertos.

Para escenarios más complejos, por ejemplo, si desea que los contenedores tengan direcciones IP públicas (si su proveedor proporciona IPs adicionales), puede configurar un puente con la interfaz del host. Esta es una configuración avanzada que requiere la configuración manual de la red del host.

Ejemplo de configuración de IP estática dentro de un contenedor (si DHCP no es adecuado):

Acceda al contenedor y edite la configuración de netplan (para Ubuntu):


lxc exec my-web-server bash
nano /etc/netplan/50-cloud-init.yaml
    

Ejemplo de configuración estática:


network:
    version: 2
    ethernets:
        eth0:
            dhcp4: no
            addresses: [10.200.200.100/24]
            routes:
                - to: default
                  via: 10.200.200.1
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
    

netplan apply                         # Aplicación de cambios
exit
    

3. Despliegue de servicios dentro de un contenedor (Ejemplo: Nginx)

Supongamos que queremos ejecutar Nginx en el contenedor my-web-server.


lxc exec my-web-server bash           # Acceso al contenedor
apt update && apt install nginx -y    # Instalación de Nginx
systemctl enable nginx                # Habilitar el inicio automático de Nginx
systemctl start nginx                 # Iniciar Nginx
exit
    

Ahora, si ha configurado el reenvío del puerto 80, puede acceder a la dirección IP de su VPS en el navegador y verá la página predeterminada de Nginx.

4. TLS/HTTPS a través de Caddy o Certbot

Para asegurar las conexiones HTTPS dentro del contenedor, puede usar Caddy o Certbot con Nginx/Apache.

Opción 1: Caddy (más fácil)

Caddy obtiene y renueva automáticamente los certificados SSL de Let's Encrypt.


lxc exec my-web-server bash
curl -sL https://raw.githubusercontent.com/caddyserver/install/main/install.sh | bash -s personal # Instalación de Caddy
nano /etc/caddy/Caddyfile             # Edición de Caddyfile
    

Ejemplo de Caddyfile:


your_domain.com {
    root  /var/www/html
    file_server
    encode gzip
}
    

Reemplace your_domain.com con su dominio. Asegúrese de que el registro DNS del dominio apunte a la dirección IP de su VPS. Después de esto, reenvíe los puertos 80 y 443 del host al contenedor:


lxc config device add my-web-server myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:10.200.200.X:80
lxc config device add my-web-server myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:10.200.200.X:443
    

Dentro del contenedor:


systemctl enable caddy                # Habilitar el inicio automático de Caddy
systemctl start caddy                 # Iniciar Caddy
exit
    
Opción 2: Certbot con Nginx

lxc exec my-web-server bash
apt install certbot python3-certbot-nginx -y # Instalación de Certbot para Nginx
nginx -t && systemctl reload nginx    # Verificación de la configuración de Nginx y recarga
certbot --nginx -d your_domain.com -d www.your_domain.com # Obtención de certificado
    

Siga las instrucciones de Certbot. Modificará automáticamente la configuración de Nginx. No olvide reenviar los puertos 80 y 443 del host al contenedor, como se describió anteriormente.

5. Secretos y variables de entorno

Nunca almacene contraseñas, claves API u otros secretos directamente en archivos de configuración que puedan ser comprometidos accidentalmente. Utilice variables de entorno o herramientas especializadas de gestión de secretos.

Dentro del contenedor, puede usar archivos .env para aplicaciones o establecer variables de entorno al iniciar servicios a través de archivos unit de systemd.


# Ejemplo de archivo unit de systemd para una aplicación que usa variables de entorno
# /etc/systemd/system/my-app.service
[Unit]
Description=My Application
After=network.target

[Service]
Environment="DB_HOST=localhost"
Environment="DB_USER=myapp"
Environment="DB_PASSWORD=mysecretpassword"
ExecStart=/usr/local/bin/my-app-binary
Restart=always

[Install]
WantedBy=multi-user.target
    

Para LXD, puede pasar variables de entorno al contenedor al iniciarlo o cambiar su configuración:


lxc config set my-container environment.MY_SECRET_KEY="supersecret"
    

O, lo que es más seguro, use cloud-init para inyectar secretos en el primer inicio del contenedor.

6. Verificación de la operatividad

Después de desplegar los servicios, siempre verifique su operatividad.

  • lxc list: Verifique que los contenedores estén en ejecución.
  • lxc exec my-web-server systemctl status nginx: Verifique el estado del servicio dentro del contenedor.
  • curl http://SU_DIRECCIÓN_IP o curl https://your_domain.com: Verifique la disponibilidad del servicio desde el exterior.
  • ping 10.200.200.X: Verifique la conectividad de red entre el host y el contenedor.

Copias de seguridad y mantenimiento

Esquema: Copias de seguridad y mantenimiento
Esquema: Copias de seguridad y mantenimiento

Las copias de seguridad regulares y el mantenimiento oportuno son cruciales para cualquier entorno de producción. LXD proporciona herramientas convenientes para crear instantáneas de contenedores, lo que simplifica significativamente este proceso.

1. Qué respaldar

  • Contenedores LXD: Instantáneas completas del estado de los contenedores (sistema de archivos, configuración).
  • Datos dentro de los contenedores: Bases de datos, archivos de usuario, archivos multimedia cargados. Incluso con instantáneas de contenedores, los datos críticos pueden requerir una copia de seguridad separada para intervalos más frecuentes o para la recuperación de archivos individuales.
  • Archivos de configuración de LXD: Perfiles, configuraciones de red, configuraciones globales de LXD.
  • Archivos de configuración del host: /etc/fstab, /etc/network/interfaces (o netplan), /etc/ssh/sshd_config, configuración del firewall, etc.

2. Script simple de copia de seguridad automática para contenedores LXD

LXD permite crear instantáneas (snapshots) del estado del contenedor. Estas se pueden exportar y almacenar en un lugar seguro.

Crearemos un script que tomará instantáneas, eliminará las antiguas y las exportará.


#!/bin/bash

# Каталог для временного хранения экспортированных снапшотов
BACKUP_DIR="/var/backups/lxd_containers"
RETENTION_DAYS=7 # Сколько дней хранить снапшоты

mkdir -p "$BACKUP_DIR"

echo "=== LXD Container Backup Script ==="
echo "Starting backup at $(date)"

# Получаем список всех запущенных контейнеров
CONTAINERS=$(lxc list --format csv --columns n)

for CONTAINER_NAME in $CONTAINERS; do
    echo "Processing container: $CONTAINER_NAME"

    # 1. Создание снапшота
    SNAPSHOT_NAME="backup-$(date +%Y%m%d%H%M%S)"
    echo "  - Creating snapshot '$SNAPSHOT_NAME'..."
    lxc snapshot "$CONTAINER_NAME" "$SNAPSHOT_NAME"

    # 2. Удаление старых снапшотов
    echo "  - Cleaning up old snapshots for $CONTAINER_NAME..."
    lxc info "$CONTAINER_NAME" | grep "Snapshots:" | awk '{print $2}' | while read -r SNAP; do
        SNAPSHOT_DATE=$(echo "$SNAP" | cut -d'-' -f2 | cut -d'(' -f1) # Извлекаем дату из имени
        if [[ -n "$SNAPSHOT_DATE" ]]; then
            SNAPSHOT_TIMESTAMP=$(date -d "$SNAPSHOT_DATE" +%s)
            CURRENT_TIMESTAMP=$(date +%s)
            DIFF_SECONDS=$((CURRENT_TIMESTAMP - SNAPSHOT_TIMESTAMP))
            DIFF_DAYS=$((DIFF_SECONDS / 86400))

            if (( DIFF_DAYS > RETENTION_DAYS )); then
                echo "    - Deleting old snapshot: $SNAP ($DIFF_DAYS days old)"
                lxc delete "$CONTAINER_NAME/$SNAP"
            fi
        fi
    done

    # 3. Экспорт последнего снапшота (или всех, если нужно)
    # Для простоты экспортируем текущий снапшот
    echo "  - Exporting snapshot '$SNAPSHOT_NAME' to $BACKUP_DIR/${CONTAINER_NAME}_${SNAPSHOT_NAME}.tar.gz"
    lxc publish "$CONTAINER_NAME/$SNAPSHOT_NAME" --alias "${CONTAINER_NAME}_${SNAPSHOT_NAME}"
    lxc image export "${CONTAINER_NAME}_${SNAPSHOT_NAME}" -o "$BACKUP_DIR/${CONTAINER_NAME}_${SNAPSHOT_NAME}.tar.gz"
    lxc image delete "${CONTAINER_NAME}_${SNAPSHOT_NAME}" # Удаляем временный образ

done

echo "Backup finished at $(date)"
    

Guarde este script como /usr/local/bin/lxd-backup.sh y hágalo ejecutable:


sudo nano /usr/local/bin/lxd-backup.sh
sudo chmod +x /usr/local/bin/lxd-backup.sh
    

3. Configuración de Cron para el inicio automático

Programe la ejecución diaria del script usando Cron:


sudo crontab -e
    

Agregue una línea para la ejecución diaria, por ejemplo, a las 3 de la mañana:


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

4. Dónde almacenar las copias de seguridad

No se recomienda en absoluto almacenar las copias de seguridad en el mismo servidor que los datos originales. En caso de fallo de hardware o compromiso del servidor, perderá tanto los datos como sus copias. Utilice almacenamiento externo:

  • Almacenamiento en la nube compatible con S3: Amazon S3, DigitalOcean Spaces, Backblaze B2. Utilice utilidades como rclone para la sincronización.
  • VPS o servidor dedicado separado: Si tiene otro servidor, puede usar rsync o scp para transferir las copias de seguridad.
  • Network Attached Storage (NAS): Si es posible en su infraestructura.

Ejemplo de sincronización con S3 usando rclone:


sudo apt install rclone -y           # Установка rclone
rclone config                        # Интерактивная настройка S3-хранилища
    

Después de la configuración, agregue una línea al script lxd-backup.sh para la sincronización:


# Добавить в конец скрипта lxd-backup.sh
echo "  - Syncing backups to S3..."
rclone sync "$BACKUP_DIR" "s3_remote_name:bucket_name/lxd_backups" --delete-excluded --exclude="*.tmp"
    

5. Actualizaciones: rolling vs ventana de mantenimiento

  • Actualizaciones del host: Se recomienda realizarlas en una "ventana de mantenimiento" cuando la carga es mínima. Antes de actualizar, haga una instantánea de todo el VPS (si el proveedor lo soporta) o al menos un lxd export para todos los contenedores críticos.
    
    sudo apt update && sudo apt upgrade -y
    sudo reboot                          # Перезагрузка после обновления ядра
                
  • Actualizaciones de LXD: Dado que LXD está instalado a través de snap, se actualiza automáticamente en segundo plano. Puede verificarlo y actualizarlo manualmente:
    
    sudo snap refresh lxd                # Обновление snap-пакета LXD
                
  • Actualizaciones de contenedores: Para cada contenedor, se recomienda configurar la actualización automática o realizarla manualmente de acuerdo con sus políticas.
    
    lxc exec my-web-server bash -- apt update && apt upgrade -y
                

Siempre pruebe las actualizaciones en contenedores no críticos o en un entorno de prueba antes de aplicarlas a los servicios de producción.

Resolución de problemas + Preguntas frecuentes

¿Cómo verificar el estado de LXD y los contenedores?

Para verificar el estado general de LXD, use lxc info. Para ver una lista de los contenedores en ejecución y sus estados, use lxc list. Si un contenedor no se inicia, verifique los registros con el comando lxc monitor --type=lifecycle o lxc info NOMBRE_DEL_CONTENEDOR.

Mi contenedor no obtiene una dirección IP o no tiene acceso a internet. ¿Qué debo hacer?

Asegúrese de que el puente lxdbr0 esté en ejecución y configurado correctamente. Verifique lxc network list e ip a en el host. Asegúrese de que el reenvío de IP esté habilitado en el host (sysctl net.ipv4.ip_forward debe ser 1) y que las reglas NAT para lxdbr0 en iptables estén presentes. Si usa UFW, asegúrese de que no esté bloqueando el tráfico en lxdbr0. Es posible que deba agregar reglas para lxdbr0 en /etc/ufw/before.rules.

¿Cómo reenviar un puerto del host a varios contenedores?

No puede reenviar el mismo puerto del host a varios contenedores. Cada contenedor que necesite acceso externo debe usar un puerto de host único. Por ejemplo, contenedor 1: listen=tcp:0.0.0.0:8080 connect=tcp:10.200.200.X:80, contenedor 2: listen=tcp:0.0.0.0:8081 connect=tcp:10.200.200.Y:80. Alternativamente, use un servidor proxy inverso (por ejemplo, Nginx o Caddy) en el host que enrutará el tráfico a los contenedores deseados según el nombre de dominio o la ruta URL.

¿Por qué usar LXD en lugar de Docker?

LXD está diseñado para ejecutar contenedores de sistema completos que se comportan como máquinas virtuales ligeras con su propio sistema init (systemd, OpenRC). Docker se enfoca en la contenerización de aplicaciones individuales o microservicios. Si necesita ejecutar varias aplicaciones tradicionales, cada una con su propia pila y dependencias, o migrar una VM existente, LXD suele ser una opción más adecuada. Docker es más adecuado para el desarrollo y la implementación de aplicaciones nativas de la nube.

¿Cómo limitar los recursos para un contenedor?

Utilice perfiles LXD. Cree o edite un perfil con el comando lxc profile edit NOMBRE_DEL_PERFIL y agregue los parámetros limits.cpu, limits.memory, limits.disk en la sección config. Por ejemplo: limits.cpu: "2", limits.memory: "4GB", limits.disk: "50GB". Luego, aplique este perfil al contenedor (lxc profile assign CONTENEDOR NOMBRE_DEL_PERFIL) o inicie nuevos contenedores con él.

¿Cuál es la configuración mínima de VPS adecuada?

Para ejecutar LXD y uno o dos contenedores ligeros (por ejemplo, un servidor VPN y un pequeño sitio web), la configuración mínima puede ser: 2 vCPU, 2-4 GB de RAM, 40-60 GB de SSD NVMe. Sin embargo, para tareas más serias, como ejecutar varias aplicaciones web, bases de datos o servidores de juegos, se recomienda 4 vCPU, 8 GB de RAM, 160-200 GB de SSD NVMe.

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

Para la mayoría de las tareas, como ejecutar proyectos personales, pequeñas aplicaciones SaaS, servidores de juegos para amigos o varios nodos de blockchain, un VPS es suficiente. Es económico y fácilmente escalable. Un servidor dedicado se vuelve necesario si se enfrenta a limitaciones de rendimiento del VPS (por ejemplo, debido al "ruido de los vecinos"), si necesita el máximo aislamiento y garantías de recursos, o si planea ejecutar muchos contenedores y servicios que requieren control total sobre el hardware físico.

¿Cómo acceder a los archivos de un contenedor desde el host?

Puede usar el comando lxc file pull CONTENEDOR/ruta/al/archivo /ruta/local para copiar archivos del contenedor al host, o lxc file push /ruta/local CONTENEDOR/ruta/al/archivo para copiar del host al contenedor. Además, si usa el almacenamiento dir, los archivos del contenedor se encuentran en /var/snap/lxd/common/lxd/storage-pools/default/containers/NOMBRE_DEL_CONTENEDOR/rootfs/, pero no se recomienda la edición directa aquí.

Conclusiones y próximos pasos

Esquema: Conclusiones y próximos pasos
Esquema: Conclusiones y próximos pasos

Ha configurado LXD con éxito en su VPS, ha creado y configurado contenedores, ha garantizado su seguridad básica y ha establecido un sistema de copias de seguridad. Ahora su VPS se ha convertido en una plataforma potente, flexible y eficiente para alojar diversos servicios en entornos aislados, lo que simplifica significativamente la gestión y aumenta la fiabilidad de sus aplicaciones.

Próximos pasos:

  1. Monitoreo de recursos: Instale herramientas de monitoreo (por ejemplo, Netdata, Prometheus con Grafana) en el host y en los contenedores clave para rastrear el uso de CPU, RAM, disco y red. Esto ayudará a identificar cuellos de botella y optimizar el rendimiento.
  2. Automatización del despliegue: Explore herramientas de automatización como Ansible, Puppet o SaltStack. Le permitirán desplegar automáticamente nuevos contenedores, configurar servicios y gestionar configuraciones, lo cual es especialmente útil al escalar.
  3. Configuración de red mejorada: Para escenarios de red más complejos, considere usar OVN (Open Virtual Network) con LXD para crear redes definidas por software, o configurar el enrutamiento L3 para proporcionar direcciones IP públicas a los contenedores, si su proveedor las ofrece.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

Configuración LXD en VPS para aislamiento de servicios y ejecución de contenedores ligeros
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.