bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Налаштування LXD на VPS

calendar_month Aug 28, 2026 schedule 20 хв. читання visibility 34 переглядів
Настройка LXD на VPS для изоляции сервисов и запуска легковесных контейнеров
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Налаштування LXD на VPS для ізоляції сервісів та запуску легковежних контейнерів

TL;DR

У цьому детальному посібнику ми налаштуємо LXD на вашому VPS, щоб створювати та керувати ізольованими, легковежними контейнерами. LXD дозволяє запускати кілька застосунків або сервісів, кожен у своєму чистому середовищі, мінімізуючи конфлікти та підвищуючи безпеку, при цьому ефективно використовуючи ресурси сервера. Ви навчитеся встановлювати LXD, конфігурувати його мережу та сховище, запускати контейнери, а також забезпечувати їх стабільну роботу та резервне копіювання.

  • Встановлення та ініціалізація LXD: Детальні кроки зі встановлення LXD на Ubuntu 24.04 LTS та його базового налаштування.
  • Ізоляція та безпека: Створення ізольованих контейнерів для кожного сервісу, використовуючи переваги легковежньої віртуалізації LXD.
  • Керування ресурсами: Налаштування профілів для контейнерів з лімітами за CPU, RAM та дисковим простором.
  • Мережева конфігурація: Налаштування мостової мережі для контейнерів, що забезпечує доступ ззовні та внутрішній зв'язок.
  • Резервне копіювання: Реалізація стратегії бекапів з використанням снапшотів LXD та зовнішнього сховища.
  • Обслуговування: Рекомендації щодо оновлення LXD та керування життєвим циклом контейнерів.

Що ми налаштовуємо і навіщо

Схема: Що ми налаштовуємо і навіщо
Схема: Що ми налаштовуємо і навіщо

У цьому посібнику ми займемося налаштуванням LXD — менеджера системних контейнерів — на вашому віртуальному приватному сервері (VPS). LXD дозволяє запускати повноцінні операційні системи (наприклад, Ubuntu, Debian, Alpine) всередині легковежних контейнерів, які, на відміну від віртуальних машин (таких як KVM), використовують ядро основної операційної системи хоста. Це забезпечує значно менші накладні витрати, швидший запуск та високу щільність розміщення сервісів на одному сервері, зберігаючи при цьому високий рівень ізоляції.

Що отримає читач у підсумку: Ви навчитеся ефективно використовувати ресурси свого VPS, запускаючи різні сервіси (веб-сервери, бази даних, ігрові сервери, ноди блокчейну) в окремих, повністю ізольованих контейнерах. Кожен контейнер матиме свою файлову систему, мережевий стек та набір процесів, що запобігатиме конфліктам залежностей та спростить керування. Це ідеальне рішення для розробників, фаундерів SaaS та ентузіастів, яким потрібна гнучкість та контроль над своєю інфраструктурою без необхідності орендувати безліч окремих VPS.

Які альтернативи існують і чому self-hosted на VPS:

  • Віртуальні машини (KVM, VMware): Надають повну апаратну ізоляцію, але мають значні накладні витрати на ресурси (кожній ВМ потрібне своє ядро ОС, більше RAM та CPU). LXD ефективніший для завдань, де потрібна ізоляція на рівні ОС, а не апаратна.
  • Docker: Чудовий інструмент для контейнеризації застосунків, але орієнтований на запуск окремих процесів або мікросервісів, а не повноцінних операційних систем. LXD, своєю чергою, дозволяє запускати "віртуальні машини" на рівні контейнерів, що зручніше для міграції існуючих застосунків або запуску сервісів, які вимагають повноцінної init-системи (systemd).
  • Cloud-managed сервіси (AWS EC2, Google Cloud Compute): Зручні та масштабовані, але часто дорожчі та менш гнучкі для тих, хто хоче повний контроль над своїм середовищем. Самостійне налаштування LXD на VPS дає вам повний доступ до системи, дозволяє оптимізувати витрати та підлаштовувати конфігурацію під свої унікальні потреби.

Вибір self-hosted LXD на VPS виправданий, коли вам потрібна гнучкість, ізоляція, ефективне використання ресурсів, але при цьому ви хочете уникнути високих витрат та обмежень хмарних провайдерів.

Який VPS-конфіг потрібен для цього завдання

Схема: Який VPS-конфіг потрібен для цього завдання
Схема: Який VPS-конфіг потрібен для цього завдання

Вибір відповідного VPS для LXD залежить від кількості та типу контейнерів, які ви плануєте запускати. LXD сам по собі дуже легковежний, але кожен запущений контейнер споживає ресурси.

Мінімальні вимоги для хоста LXD (без урахування контейнерів):

  • CPU: 1-2 vCPU (для хоста та кількох легковежних контейнерів). Сучасні процесори з інструкціями віртуалізації (VT-x/AMD-V) бажані, але LXD може працювати і без них, хоча й з меншою продуктивністю.
  • RAM: 2 GB (для хоста та базових операцій LXD). Якщо ви плануєте запускати контейнери з базами даних або веб-серверами, знадобиться більше.
  • Диск: 40-60 GB NVMe SSD. LXD може працювати з HDD, але SSD значно підвищує продуктивність вводу-виводу, що критично для контейнерів. NVMe забезпечує максимальну швидкість.
  • Мережа: 1 Gbps порт (стандарт для більшості VPS).

Конкретний VPS-план для завдання (наприклад, для 3-5 контейнерів: веб-сервер, база даних, VPN-сервер):

  • CPU: 4 vCPU
  • RAM: 8 GB
  • Диск: 160-200 GB NVMe SSD (з урахуванням місця для даних контейнерів та снапшотів)
  • Мережа: 1 Gbps, без обмежень за трафіком або з великим лімітом.

Для оренди VPS із зазначеними характеристиками, переконайтеся, що провайдер пропонує NVMe SSD та достатню кількість ядер/RAM для ваших потреб. Більшість сучасних VPS-провайдерів пропонують такі конфігурації.

Коли потрібен dedicated, а не VPS:

Якщо ви плануєте запускати десятки контейнерів, високонавантажені бази даних, ігрові сервери з великою кількістю гравців, або у вас дуже специфічні вимоги до апаратного забезпечення (наприклад, GPU для машинного навчання), тоді варто розглянути виділений сервер (dedicated server). Dedicated сервери надають вам усі фізичні ресурси машини, що виключає "сусідський шум" та дає максимальну продуктивність. Також dedicated сервери часто мають більш гнучкі опції щодо дискової підсистеми (RAID, HDD+SSD).

Локація: на що впливає

Вибір локації VPS відіграє важливу роль, особливо для сервісів, критичних до затримок (latency):

  • Затримка (Latency): Чим ближче сервер до вашої цільової аудиторії, тим нижча затримка та швидша відповідь. Для веб-сайтів це впливає на швидкість завантаження сторінок, для ігрових серверів — на пінг.
  • Геополітичні фактори та законодавство: У деяких країнах діють суворіші закони щодо зберігання даних або цензури. Враховуйте це при виборі локації для конфіденційних даних або сервісів, що вимагають високого ступеня приватності.
  • Вартість: Ціни на VPS можуть варіюватися залежно від локації через різницю у вартості електроенергії, оренди ЦОД та податків.

Завжди вибирайте локацію, яка знаходиться географічно ближче до більшості ваших користувачів або до вас, якщо ви є основним споживачем сервісу.

Підготовка сервера

Схема: Підготовка сервера
Схема: Підготовка сервера

Перед встановленням LXD необхідно виконати базове налаштування вашого VPS для забезпечення безпеки та стабільності. Ми будемо використовувати Ubuntu Server 24.04 LTS як основну операційну систему хоста.

1. Підключення за SSH

Підключіться до вашого сервера як користувач root або користувач, наданий провайдером:


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

2. Оновлення системи

Насамперед оновіть усі пакети до актуальних версій:


sudo apt update          # Оновлення списку пакетів
sudo apt upgrade -y      # Оновлення встановлених пакетів без запиту підтвердження
sudo apt autoremove -y   # Видалення непотрібних залежностей
    

3. Створення нового користувача з правами sudo (якщо ще немає)

Працювати під root небезпечно. Створіть нового користувача та надайте йому права sudo.


adduser ваш_пользователь          # Створення нового користувача
usermod -aG sudo ваш_пользователь # Додавання користувача до групи sudo
    

Тепер вийдіть із сесії root та увійдіть під новим користувачем:


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

4. Налаштування SSH-ключів (рекомендується)

Для підвищення безпеки рекомендується використовувати SSH-ключі замість паролів. Якщо у вас ще немає ключів, згенеруйте їх на локальній машині:


# На вашій локальній машині
ssh-keygen -t rsa -b 4096 -C "ваш[email protected]"
    

Потім скопіюйте публічний ключ на сервер:


# На вашій локальній машині
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС
    

Після перевірки входу за ключем, вимкніть автентифікацію за паролем у /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config
    

Знайдіть рядки та встановіть значення:


PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
    

Перезапустіть SSH-сервіс:


sudo systemctl restart sshd
    

5. Налаштування Firewall (UFW)

Увімкніть брандмауер UFW та дозвольте лише необхідні порти (SSH, HTTP/HTTPS, а також порти, які використовуватимуться контейнерами).


sudo apt install ufw -y              # Встановлення UFW
sudo ufw allow OpenSSH               # Дозволити SSH (порт 22)
sudo ufw allow http                  # Дозволити HTTP (порт 80)
sudo ufw allow https                 # Дозволити HTTPS (порт 443)
sudo ufw enable                      # Увімкнути UFW
sudo ufw status verbose              # Перевірити статус UFW
    

Пізніше, якщо ваші контейнери використовуватимуть інші порти, їх також потрібно буде відкрити.

6. Встановлення Fail2Ban

Fail2Ban допомагає захистити сервер від атак методом перебору паролів, блокуючи IP-адреси, з яких відбуваються численні невдалі спроби входу.


sudo apt install fail2ban -y         # Встановлення Fail2Ban
sudo systemctl enable fail2ban       # Увімкнення автозапуску сервісу
sudo systemctl start fail2ban        # Запуск сервісу
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Створення локального конфігу
    

Ви можете відредагувати /etc/fail2ban/jail.local для налаштування правил, але типові налаштування для SSH вже досить хороші.


sudo systemctl restart fail2ban      # Перезапуск Fail2Ban після змін
    

Ваш сервер тепер базово захищений та готовий до встановлення LXD.

Встановлення ПЗ — покроково

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

Тепер, коли сервер підготовлений, переходимо до встановлення LXD. Ми будемо використовувати пакет snap, оскільки це рекомендований і найактуальніший спосіб встановлення LXD на Ubuntu.

1. Встановлення LXD через Snap

LXD на Ubuntu постачається як snap-пакет, що забезпечує його актуальність та ізоляцію. Для Ubuntu 24.04 LTS snap вже встановлений за замовчуванням.


sudo snap install lxd --channel=6.0/stable # Встановлення LXD 6.0 LTS (актуальна версія на 2026 рік)
    

Після встановлення додайте вашого користувача до групи lxd, щоб ви могли керувати LXD без sudo:


sudo usermod -aG lxd ваш_пользователь # Додавання користувача до групи lxd
newgrp lxd                            # Застосування змін групи без перелогіну (або просто перелогіньтеся)
    

Переконайтеся, що LXD встановлений і доступний:


lxd --version                         # Перевірка версії LXD
    

2. Ініціалізація LXD

Після встановлення LXD необхідно ініціалізувати його, задавши базові налаштування сховища та мережі. Це інтерактивний процес.


lxd init                              # Запуск інтерактивної ініціалізації LXD
    

Під час ініціалізації вам будуть задані наступні питання. Ось рекомендовані відповіді для більшості VPS-сценаріїв:

  • Would you like to use LXD clustering? (yes/no) [default=no]: no (для одного VPS кластер не потрібен)
  • Do you want to setup a new storage pool? (yes/no) [default=yes]: yes
  • Name of the new storage pool [default=default]: default (або будь-яке інше ім'я)
  • Would you like to use an existing block device? (yes/no) [default=no]: no (якщо у вас немає окремого диска)
  • Would you like to use a new loop device? (yes/no) [default=yes]: yes (створить файл-образ для зберігання контейнерів)
  • Size in GiB of the new loop device (minimum 4GiB) [default=100GiB]: 50GiB (або більше, залежно від розміру вашого диска та планів. Залиште запас для хоста)
  • 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 (стандартна назва)
  • 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 (або будь-який інший приватний діапазон, який не перетинається з вашою локальною мережею)
  • Would you like LXD to NAT traffic on its own? (yes/no) [default=yes]: yes (для доступу контейнерів в інтернет)
  • What IPv6 address should be used? (CIDR format, e.g. fd42:42:42:42::1/64) [default=none]: none (якщо IPv6 не потрібен)
  • Would you like the LXD daemon to be available over the network? (yes/no) [default=no]: no (якщо ви не плануєте керувати LXD віддалено)
  • 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

Після завершення ініціалізації LXD готовий до роботи. Ви можете перевірити статус мережі:


lxc network list                      # Перегляд налаштованих мереж LXD
    

3. Запуск першого контейнера

Тепер давайте запустимо наш перший контейнер. Наприклад, Ubuntu 22.04 LTS.


lxc launch ubuntu:22.04 my-first-container # Запуск контейнера з образом Ubuntu 22.04 LTS під іменем my-first-container
    

Перевірте статус контейнера:


lxc list                              # Список усіх запущених контейнерів
    

Ви побачите статус RUNNING та IP-адресу, присвоєну контейнеру в мережі lxdbr0.

4. Вхід у контейнер та базове налаштування

Ви можете отримати командний рядок всередині контейнера:


lxc exec my-first-container bash      # Виконання команди bash всередині контейнера
    

Всередині контейнера можна працювати як на звичайній Ubuntu-системі. Оновіть його:


apt update && apt upgrade -y          # Оновлення пакетів всередині контейнера
exit                                  # Вихід з контейнера
    

5. Налаштування профілю для контейнерів (приклад)

Профілі LXD дозволяють застосовувати стандартні налаштування (ресурси, мережа) до кількох контейнерів. Створимо профіль для веб-сервера.


lxc profile copy default webserver    # Копіювання дефолтного профілю в новий 'webserver'
lxc profile edit webserver            # Редагування нового профілю
    

У YAML-файлі, що відкрився, додайте або змініть секцію limits:


config:
  limits.cpu: "2"                     # Обмеження CPU до 2 ядер
  limits.memory: "2GB"                # Обмеження RAM до 2GB
  limits.disk: "50GB"                 # Обмеження диска до 50GB (якщо використовуєте pool з квотами)
  user.user-data: |                   # Приклад cloud-init для початкового налаштування
    #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
    

Збережіть та закрийте файл. Тепер ви можете запускати контейнери з цим профілем:


lxc launch ubuntu:22.04 my-web-server --profile webserver # Запуск контейнера з профілем webserver
    

Це забезпечує стандартизацію та спрощує керування ресурсами.

6. Прокидання портів на хості для доступу до контейнерів

За замовчуванням контейнери мають приватні IP-адреси. Щоб зробити сервіс всередині контейнера доступним з інтернету, потрібно прокинути порт з хоста на контейнер. Наприклад, якщо Nginx у контейнері my-web-server слухає порт 80, а ви хочете, щоб він був доступний за портом 80 вашого VPS:


lxc config device add my-web-server myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:10.200.200.X:80 # Прокидання порту 80 з хоста на контейнер
    

Замініть 10.200.200.X на реальну IP-адресу вашого контейнера (можна дізнатися через lxc list). Не забудьте відкрити порт 80 в UFW хоста, якщо він ще не відкритий.

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Після встановлення LXD та запуску базового контейнера, наступним кроком є більш детальна конфігурація. Це включає налаштування сховища, мережі, а також розгортання та забезпечення безпеки сервісів всередині контейнерів.

1. Управління сховищем LXD

При ініціалізації LXD ви обрали тип сховища (за замовчуванням loop device). LXD підтримує різні драйвери: dir (каталог), zfs, btrfs, ceph. Для більшості VPS dir або zfs є найбільш підходящими.

  • dir: Простий і надійний, зберігає дані контейнерів у звичайній файловій системі хоста. Не підтримує знімки на рівні файлової системи.
  • zfs: Рекомендується для більш просунутих сценаріїв. ZFS надає потужні функції, такі як миттєві знімки, клонування, стиснення та дедуплікація даних. Вимагає більше RAM на хості.

Якщо ви хочете перейти на ZFS, спочатку встановіть пакети:


sudo apt install zfsutils-linux -y    # Встановлення утиліт ZFS
    

Потім ви можете створити новий ZFS-пул або використовувати існуючий. Якщо ви хочете використовувати ZFS для LXD, це краще робити при першій ініціалізації LXD або створити новий пул і призначити його:


lxc storage create myzfs zfs source=/var/snap/lxd/common/lxd/disks/myzfs.img size=100GiB # Створення ZFS-пулу на файлі
# Або, якщо є окремий диск:
# lxc storage create myzfs zfs source=/dev/sdb
lxc profile device add default root disk path=/ pool=myzfs # Прив'язка пулу до профілю
    

Тепер усі нові контейнери, що використовують профіль default, будуть використовувати сховище myzfs.

2. Мережева конфігурація контейнерів

LXD за замовчуванням створює мостову мережу (lxdbr0). Кожен контейнер отримує IP-адресу з цієї підмережі. Для доступу до контейнерів ззовні, як було показано раніше, використовується проксіювання портів.

Для більш складних сценаріїв, наприклад, якщо ви хочете, щоб контейнери мали публічні IP-адреси (якщо ваш провайдер надає додаткові IP), ви можете налаштувати міст з хост-інтерфейсом. Це розширена конфігурація, що вимагає ручного налаштування мережі хоста.

Приклад налаштування статичної IP всередині контейнера (якщо DHCP не підходить):

Увійдіть у контейнер та відредагуйте конфігурацію netplan (для Ubuntu):


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

Приклад статичної конфігурації:


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                         # Застосування змін
exit
    

3. Розгортання сервісів всередині контейнера (Приклад: Nginx)

Припустимо, ми хочемо запустити Nginx у контейнері my-web-server.


lxc exec my-web-server bash           # Вхід у контейнер
apt update && apt install nginx -y    # Встановлення Nginx
systemctl enable nginx                # Увімкнення автозапуску Nginx
systemctl start nginx                 # Запуск Nginx
exit
    

Тепер, якщо ви налаштували прокидання порту 80, ви можете звернутися до IP-адреси вашого VPS у браузері, і побачите сторінку Nginx за замовчуванням.

4. TLS/HTTPS через Caddy або Certbot

Для забезпечення HTTPS-з'єднань всередині контейнера можна використовувати Caddy або Certbot з Nginx/Apache.

Варіант 1: Caddy (простіше)

Caddy автоматично отримує та оновлює SSL-сертифікати Let's Encrypt.


lxc exec my-web-server bash
curl -sL https://raw.githubusercontent.com/caddyserver/install/main/install.sh | bash -s personal # Встановлення Caddy
nano /etc/caddy/Caddyfile             # Редагування Caddyfile
    

Приклад Caddyfile:


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

Замініть your_domain.com на ваш домен. Переконайтеся, що DNS-запис домену вказує на IP-адресу вашого VPS. Після цього прокиньте порти 80 і 443 з хоста на контейнер:


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
    

У контейнері:


systemctl enable caddy                # Увімкнення автозапуску Caddy
systemctl start caddy                 # Запуск Caddy
exit
    
Варіант 2: Certbot з Nginx

lxc exec my-web-server bash
apt install certbot python3-certbot-nginx -y # Встановлення Certbot для Nginx
nginx -t && systemctl reload nginx    # Перевірка конфігурації Nginx та перезавантаження
certbot --nginx -d your_domain.com -d www.your_domain.com # Отримання сертифіката
    

Дотримуйтесь інструкцій Certbot. Він автоматично змінить конфігурацію Nginx. Не забудьте прокинути порти 80 і 443 з хоста на контейнер, як описано вище.

5. Секрети та змінні оточення

Ніколи не зберігайте паролі, API-ключі та інші секрети безпосередньо у файлах конфігурації, які можуть бути випадково скомпрометовані. Використовуйте змінні оточення або спеціалізовані інструменти управління секретами.

Всередині контейнера можна використовувати файли .env для додатків або встановлювати змінні оточення при запуску сервісів через systemd unit-файли.


# Приклад systemd unit-файлу для програми, що використовує змінні оточення
# /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
    

Для LXD ви можете передавати змінні оточення в контейнер при його запуску або зміні конфігурації:


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

Або, що безпечніше, використовуйте cloud-init для ін'єкції секретів при першому запуску контейнера.

6. Перевірка працездатності

Після розгортання сервісів завжди перевіряйте їх працездатність.

  • lxc list: Перевірте, що контейнери запущені.
  • lxc exec my-web-server systemctl status nginx: Перевірте статус сервісу всередині контейнера.
  • curl http://ВАША_IP_АДРЕСА або curl https://your_domain.com: Перевірте доступність сервісу ззовні.
  • ping 10.200.200.X: Перевірте мережеву зв'язність між хостом і контейнером.

Резервне копіювання та обслуговування

Схема: Резервне копіювання та обслуговування
Схема: Резервне копіювання та обслуговування

Регулярне резервне копіювання та своєчасне обслуговування є критично важливими для будь-якого production-середовища. LXD надає зручні інструменти для створення снапшотів контейнерів, що значно спрощує цей процес.

1. Що резервувати

  • LXD-контейнери: Повні снапшоти стану контейнерів (файлова система, конфігурація).
  • Дані всередині контейнерів: Бази даних, файли користувачів, завантажені медіафайли. Навіть за наявності снапшотів контейнера, критично важливі дані можуть вимагати окремого резервного копіювання для частіших інтервалів або для відновлення окремих файлів.
  • Конфігураційні файли LXD: Профілі, налаштування мережі, глобальні налаштування LXD.
  • Конфігураційні файли хоста: /etc/fstab, /etc/network/interfaces (або netplan), /etc/ssh/sshd_config, конфігурація firewall тощо.

2. Простий скрипт авторезервного копіювання для LXD-контейнерів

LXD дозволяє створювати снапшоти (миттєві знімки стану контейнера). Їх можна потім експортувати та зберігати в безпечному місці.

Створимо скрипт, який буде робити снапшоти, видаляти старі та експортувати їх.


#!/bin/bash

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

mkdir -p "$BACKUP_DIR"

echo "=== Скрипт резервного копіювання контейнерів LXD ==="
echo "Початок резервного копіювання о $(date)"

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

for CONTAINER_NAME in $CONTAINERS; do
    echo "Обробка контейнера: $CONTAINER_NAME"

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

    # 2. Видалення старих снапшотів
    echo "  - Очищення старих снапшотів для $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 "    - Видалення старого снапшота: $SNAP (вік $DIFF_DAYS днів)"
                lxc delete "$CONTAINER_NAME/$SNAP"
            fi
        fi
    done

    # 3. Експорт останнього снапшота (або всіх, якщо потрібно)
    # Для простоти експортуємо поточний снапшот
    echo "  - Експорт снапшота '$SNAPSHOT_NAME' до $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 "Резервне копіювання завершено о $(date)"
    

Збережіть цей скрипт як /usr/local/bin/lxd-backup.sh та зробіть його виконуваним:


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

3. Налаштування Cron для автоматичного запуску

Заплануйте виконання скрипта щодня за допомогою Cron:


sudo crontab -e
    

Додайте рядок для щоденного запуску, наприклад, о 3 годині ночі:


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

4. Куди зберігати резервні копії

Зберігати резервні копії на тому ж сервері, що й оригінальні дані, вкрай не рекомендується. У разі апаратного збою або компрометації сервера ви втратите і дані, і їх копії. Використовуйте зовнішні сховища:

  • Хмарне S3-сумісне сховище: Amazon S3, DigitalOcean Spaces, Backblaze B2. Використовуйте утиліти на кшталт rclone для синхронізації.
  • Окремий VPS або dedicated сервер: Якщо у вас є інший сервер, можна використовувати rsync або scp для передачі резервних копій.
  • Network Attached Storage (NAS): Якщо це можливо у вашій інфраструктурі.

Приклад синхронізації з S3 за допомогою rclone:


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

Після налаштування додайте до скрипта lxd-backup.sh рядок для синхронізації:


# Додати в кінець скрипта lxd-backup.sh
echo "  - Синхронізація резервних копій з S3..."
rclone sync "$BACKUP_DIR" "s3_remote_name:bucket_name/lxd_backups" --delete-excluded --exclude="*.tmp"
    

5. Оновлення: rolling vs maintenance window

  • Оновлення хоста: Рекомендується виконувати у "вікно обслуговування" (maintenance window), коли навантаження мінімальне. Перед оновленням зробіть снапшот всього VPS (якщо провайдер підтримує) або хоча б lxd export для всіх критичних контейнерів.
    
    sudo apt update && sudo apt upgrade -y
    sudo reboot                          # Перезавантаження після оновлення ядра
                
  • Оновлення LXD: Оскільки LXD встановлено через snap, він оновлюється автоматично у фоновому режимі. Ви можете вручну перевірити та оновити його:
    
    sudo snap refresh lxd                # Оновлення snap-пакета LXD
                
  • Оновлення контейнерів: Для кожного контейнера рекомендується налаштувати автоматичне оновлення або виконувати його вручну відповідно до ваших політик.
    
    lxc exec my-web-server bash -- apt update && apt upgrade -y
                

Завжди тестуйте оновлення на некритичних контейнерах або в тестовому середовищі, перш ніж застосовувати їх до production-сервісів.

Вирішення проблем + FAQ

Як перевірити статус LXD та контейнерів?

Для перевірки загального стану LXD використовуйте lxc info. Щоб побачити список запущених контейнерів та їх статуси, використовуйте lxc list. Якщо контейнер не запускається, перевірте логи командою lxc monitor --type=lifecycle або lxc info ІМ'Я_КОНТЕЙНЕРА.

Мій контейнер не отримує IP-адресу або не має доступу до інтернету. Що робити?

Переконайтеся, що міст lxdbr0 запущений та налаштований коректно. Перевірте lxc network list та ip a на хості. Переконайтеся, що на хості увімкнено IP-форвардинг (sysctl net.ipv4.ip_forward має бути 1) та правила NAT для lxdbr0 в iptables присутні. Якщо ви використовуєте UFW, переконайтеся, що він не блокує трафік на lxdbr0. Можливо, знадобиться додати правила для lxdbr0 до /etc/ufw/before.rules.

Як прокинути порт з хоста на кілька контейнерів?

Ви не можете прокинути один і той самий порт хоста на кілька контейнерів. Кожен контейнер, якому потрібен доступ ззовні, повинен використовувати унікальний порт хоста. Наприклад, контейнер 1: listen=tcp:0.0.0.0:8080 connect=tcp:10.200.200.X:80, контейнер 2: listen=tcp:0.0.0.0:8081 connect=tcp:10.200.200.Y:80. Альтернативно, використовуйте зворотний проксі-сервер (наприклад, Nginx або Caddy) на хості, який буде маршрутизувати трафік на потрібні контейнери на основі доменного імені або шляху URL.

Навіщо використовувати LXD замість Docker?

LXD призначений для запуску повних системних контейнерів, які поводяться як легкі віртуальні машини з власною init-системою (systemd, OpenRC). Docker фокусується на контейнеризації окремих застосунків або мікросервісів. Якщо вам потрібно запустити кілька традиційних застосунків, кожен зі своїм стеком і залежностями, або мігрувати існуючу VM, LXD часто є більш підходящим вибором. Docker краще підходить для розробки та деплою хмарних нативних застосунків.

Як обмежити ресурси для контейнера?

Використовуйте профілі LXD. Створіть або відредагуйте профіль командою lxc profile edit ІМ'Я_ПРОФІЛЮ та додайте до секції config параметри limits.cpu, limits.memory, limits.disk. Наприклад: limits.cpu: "2", limits.memory: "4GB", limits.disk: "50GB". Потім застосуйте цей профіль до контейнера (lxc profile assign КОНТЕЙНЕР ІМ'Я_ПРОФІЛЮ) або запускайте нові контейнери з ним.

Який VPS-конфіг мінімально підійде?

Для запуску LXD та одного-двох легких контейнерів (наприклад, VPN-сервер та невеликий веб-сайт) мінімальний конфіг може бути: 2 vCPU, 2-4 GB RAM, 40-60 GB NVMe SSD. Однак для більш серйозних завдань, таких як запуск кількох веб-застосунків, баз даних або ігрових серверів, рекомендується 4 vCPU, 8 GB RAM, 160-200 GB NVMe SSD.

Що вибрати — VPS чи dedicated для цього завдання?

Для більшості завдань, таких як запуск особистих проєктів, невеликих SaaS-застосунків, ігрових серверів для друзів або кількох нод блокчейну, VPS цілком достатньо. Він економічний і легко масштабується. Виділений сервер (dedicated) стає необхідним, якщо ви стикаєтеся з обмеженнями VPS щодо продуктивності (наприклад, через "шум сусідів"), вам потрібна максимальна ізоляція та гарантії ресурсів, або якщо ви плануєте запускати дуже багато контейнерів та сервісів, що вимагають повного контролю над фізичним обладнанням.

Як отримати доступ до файлів контейнера з хоста?

Ви можете використовувати команду lxc file pull КОНТЕЙНЕР/шлях/до/файлу /локальний/шлях для копіювання файлів з контейнера на хост, або lxc file push /локальний/шлях КОНТЕЙНЕР/шлях/до/файлу для копіювання з хоста в контейнер. Також, якщо ви використовуєте сховище dir, файли контейнера знаходяться в /var/snap/lxd/common/lxd/storage-pools/default/containers/ІМ'Я_КОНТЕЙНЕРА/rootfs/, але пряме редагування тут не рекомендується.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

Ви успішно налаштували LXD на своєму VPS, створили та сконфігурували контейнери, забезпечили їх базову безпеку та налаштували систему резервного копіювання. Тепер ваш VPS став потужною, гнучкою та ефективною платформою для розміщення різних сервісів в ізольованих середовищах, що значно спрощує керування та підвищує надійність ваших застосунків.

Куди рухатися далі:

  1. Моніторинг ресурсів: Встановіть інструменти моніторингу (наприклад, Netdata, Prometheus з Grafana) на хості та в ключових контейнерах, щоб відстежувати використання CPU, RAM, диска та мережі. Це допоможе виявляти вузькі місця та оптимізувати продуктивність.
  2. Автоматизація розгортання: Вивчіть інструменти автоматизації, такі як Ansible, Puppet або SaltStack. Вони дозволять вам автоматично розгортати нові контейнери, налаштовувати сервіси та керувати конфігураціями, що особливо корисно при масштабуванні.
  3. Покращена мережева конфігурація: Для складніших мережевих сценаріїв розгляньте використання OVN (Open Virtual Network) з LXD для створення програмно-визначених мереж, або налаштування L3-маршрутизації для надання контейнерам публічних IP-адрес, якщо ваш провайдер їх надає.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

Telegram VKVK WhatsApp Facebook LinkedIn XX

налаштування LXD на VPS для ізоляції сервісів і запуску легкова
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.