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

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

Розгортання Lemmy на

calendar_month Jul 03, 2026 schedule 26 хв. читання visibility 22 переглядів
Развёртывание Lemmy на VPS: собственный сервер федеративной социальной сети
info

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

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

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

Розгортання Lemmy на VPS: власний сервер федеративної соціальної мережі

TL;DR

У цьому детальному посібнику ми крок за кроком налаштуємо власний сервер Lemmy на віртуальному приватному сервері (VPS) або виділеному сервері. Ви дізнаєтеся, як підготувати операційну систему Ubuntu 24.04 LTS, встановити Docker та Docker Compose, розгорнути Lemmy з використанням PostgreSQL та налаштувати веб-сервер Caddy для автоматичного отримання HTTPS-сертифікатів. В результаті ви отримаєте повністю функціональну, незалежну та масштабовану федеративну соціальну мережу Lemmy, готову до використання та керування.

  • Налаштування безпечного та актуального (2026 рік) середовища Ubuntu 24.04 LTS.
  • Розгортання Lemmy за допомогою Docker Compose для спрощення керування компонентами.
  • Конфігурація PostgreSQL як бази даних для Lemmy.
  • Використання Caddy для автоматичного керування HTTPS-сертифікатами (Let's Encrypt).
  • Детальні інструкції щодо резервного копіювання та обслуговування вашого Lemmy-інстансу.
  • Відповіді на часті запитання та поради щодо усунення несправностей.

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

Схема: Что мы настраиваем и зачем
Схема: Що ми налаштовуємо і навіщо

У сучасному цифровому ландшафті, де централізовані соціальні мережі часто піддаються критиці за цензуру, збір даних та непрозорі алгоритми, федеративні платформи пропонують привабливу альтернативу. Lemmy — це один із таких проєктів: вільна та відкрита платформа для агрегації посилань та обговорень, аналогічна Reddit, але побудована на протоколі ActivityPub. Це означає, що ваш Lemmy-сервер (також званий "інстансом") може взаємодіяти з іншими інстансами Lemmy, а також із серверами інших федеративних мереж, таких як Mastodon, Kbin та Pixelfed.

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

У підсумку читач отримає повністю функціонуючий сервер Lemmy, доступний за власним доменним ім'ям, з автоматичним HTTPS-шифруванням, налаштованими резервними копіями та розумінням того, як підтримувати систему в актуальному стані. Ви станете адміністратором власної мікро-соціальної мережі, здатної інтегруватися з ширшим федеративним всесвітом.

Існують альтернативи, такі як використання хмарних керованих сервісів (хоча для Lemmy їх не так багато, як для, наприклад, WordPress) або інші self-hosted платформи (Mastodon для мікроблогів, Kbin як ширший агрегатор контенту). Однак вибір self-hosted рішення на VPS для Lemmy зумовлений кількома ключовими перевагами:

  • Повний контроль: Ви володієте всіма даними, керуєте програмним забезпеченням та інфраструктурою без посередників.
  • Гнучкість та кастомізація: Можливість тонкого налаштування всіх параметрів сервера, встановлення плагінів та тем, які можуть бути недоступні на керованих платформах.
  • Конфіденційність: Відсутність третіх сторін, які могли б збирати або продавати дані ваших користувачів.
  • Економічна ефективність: Часто, за певного рівня використання, власний VPS виявляється дешевшим, ніж підписка на керований сервіс, особливо в довгостроковій перспективі.
  • Навчання та розвиток навичок: Процес встановлення та налаштування дає безцінний досвід роботи з серверними технологіями.

Саме ці переваги роблять self-hosting на VPS привабливим вибором для розгортання Lemmy, дозволяючи вам створити унікальну та незалежну онлайн-спільноту.

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

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

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

Мінімальні вимоги для невеликого інстансу (до 50 активних користувачів)

  • CPU: 2 ядра (сучасних процесорів, наприклад, Intel Xeon E3/E5 або AMD EPYC).
  • RAM: 4 ГБ DDR4. Lemmy та PostgreSQL досить ресурсомісткі, і 4 ГБ — це абсолютний мінімум для стабільної роботи.
  • Диск: 50 ГБ SSD. Для операційної системи, Docker-образів, бази даних та невеликого обсягу завантажень користувачів. SSD є обов'язковим для хорошої продуктивності БД.
  • Сеть: 1 Гбіт/с порт з необмеженим трафіком або достатнім запасом (мінімум 1 ТБ/місяць).

Рекомендований VPS-план для середнього інстансу (до 500 активних користувачів)

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

  • CPU: 4 ядра (сучасних процесорів).
  • RAM: 8 ГБ DDR4. Це забезпечить достатній буфер для PostgreSQL та Lemmy, а також для кешування.
  • Диск: 100-200 ГБ NVMe SSD. NVMe значно прискорить дискові операції, що критично для продуктивності бази даних та завантаження медіафайлів.
  • Сеть: 1 Гбіт/с порт з необмеженим трафіком.

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

Коли потрібен виділений сервер (Dedicated Server)

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

Для дуже великих інстансів Lemmy, які можуть обслуговувати тисячі користувачів, можна розглянути відповідний dedicated сервер. На такому сервері ви зможете виділити більше ядер CPU, значно збільшити обсяг оперативної пам'яті (наприклад, 32 ГБ і більше), використовувати RAID-масиви для дисків для підвищення надійності та швидкості, а також отримати повний контроль над мережевою картою.

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

Вибір географічної локації вашого VPS також має значення:

  • Затримка (Latency): Розміщуйте сервер якомога ближче до вашої основної аудиторії, щоб мінімізувати затримки при доступі до сайту.
  • Законодавство: Враховуйте закони про конфіденційність даних (GDPR, CCPA тощо) та свободу слова в країні, де розташований сервер. Це може бути критично для модерації контенту та обробки даних користувачів.
  • Вартість: Ціни на VPS можуть значно відрізнятися в різних регіонах.
  • Мережева зв'язність: Деякі локації мають кращу зв'язність з певними регіонами світу.

Для більшості проєктів оптимальним вибором буде VPS у дата-центрі, розташованому в Західній Європі або Північній Америці, що забезпечує хороший баланс між законодавством, зв'язністю та вартістю.

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

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

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

1. Підключення по SSH та початкове оновлення

Підключіться до вашого VPS як користувач root, використовуючи IP-адресу, надану вашим провайдером. Якщо ви використовуєте Windows, можете скористатися PuTTY або вбудованим SSH-клієнтом PowerShell/CMD. Для Linux/macOS:


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

Після успішного входу оновіть список пакетів та встановіть усі доступні оновлення. Це забезпечить актуальність системи та її безпеку.


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

2. Створення нового користувача з правами sudo

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


adduser lemmyadmin          # Створення нового користувача з іменем lemmyadmin
usermod -aG sudo lemmyadmin # Додавання користувача lemmyadmin до групи sudo

Встановіть надійний пароль для нового користувача, коли система попросить про це. Потім вийдіть із сесії root та увійдіть під новим користувачем:


exit                        # Вихід із сесії root
ssh lemmyadmin@ВАШ_IP_АДРЕС # Вхід під новим користувачем

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

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


ssh-keygen -t rsa -b 4096 -C "[email protected]"

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


ssh-copy-id lemmyadmin@ВАШ_IP_АДРЕС

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


sudo nano /etc/ssh/sshd_config

Знайдіть рядки:


#PasswordAuthentication yes

І змініть їх на:


PasswordAuthentication no
PermitRootLogin no

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


sudo systemctl restart sshd

Спробуйте знову підключитися по SSH з використанням ключа. Якщо все працює, ви успішно підвищили безпеку.

4. Налаштування файрволу (UFW)

Брандмауер UFW (Uncomplicated Firewall) за замовчуванням встановлений в Ubuntu. Налаштуємо його, щоб дозволити лише необхідні порти:


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

При запиті підтвердження введіть y. UFW тепер активний і захищає ваш сервер.

5. Встановлення Fail2ban

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


sudo apt install fail2ban -y  # Встановлення Fail2ban
sudo systemctl enable fail2ban # Увімкнення автозапуску Fail2ban
sudo systemctl start fail2ban  # Запуск Fail2ban

Fail2ban за замовчуванням налаштований для захисту SSH. Ви можете створити файл /etc/fail2ban/jail.local для кастомізації правил, але для більшості користувачів налаштування за замовчуванням є достатніми.

6. Налаштування часового поясу та синхронізації часу

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


sudo timedatectl set-timezone Europe/Moscow # Замініть на ваш часовий пояс
timedatectl status                          # Перевірка статусу

Ubuntu 24.04 LTS використовує systemd-timesyncd для синхронізації часу за NTP, що зазвичай достатньо. Переконайтеся, що сервіс активний:


timedatectl show-timesync --value # Показати статус синхронізації

Якщо потрібна більш просунута синхронізація, можна встановити chrony:


sudo apt install chrony -y
sudo systemctl enable chrony
sudo systemctl start chrony
chronyc sources -v

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

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

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

Для розгортання Lemmy ми будемо використовувати Docker та Docker Compose. Цей підхід значно спрощує керування залежностями, ізоляцію компонентів та оновлення системи. Як веб-сервер та зворотний проксі з автоматичним HTTPS буде використовуватися Caddy.

1. Встановлення Docker та Docker Compose

Спочатку встановимо Docker Engine. Ми будемо використовувати офіційний репозиторій Docker для отримання актуальних версій (на 2026 рік це буде, ймовірно, Docker 26.x+).


# Оновлення пакетів та встановлення необхідних залежностей для репозиторію Docker
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# Додавання офіційного GPG ключа Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Додавання репозиторію Docker до APT джерел
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] 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 update

# Встановлення Docker Engine, Docker CLI та containerd
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Додавання вашого користувача до групи docker для роботи без sudo
sudo usermod -aG docker lemmyadmin

Після додавання користувача до групи docker, вам потрібно або вийти і знову увійти в SSH-сесію, або виконати newgrp docker, щоб зміни набули чинності. Перевіримо встановлення Docker:


docker run hello-world # Запуск тестового контейнера Docker

Якщо ви бачите повідомлення "Hello from Docker!", значить, Docker встановлено правильно. Docker Compose Plugin вже встановлено разом з Docker Engine.

2. Встановлення Caddy (зворотний проксі та HTTPS)

Caddy — це потужний, простий у використанні веб-сервер з автоматичною підтримкою HTTPS через Let's Encrypt. Встановимо його з офіційного репозиторію Caddy.


# Встановлення необхідних пакетів для репозиторію Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

# Додавання GPG ключа Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Додавання репозиторію Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Оновлення списку пакетів та встановлення Caddy
sudo apt update
sudo apt install -y caddy

# Перевірка статусу Caddy
sudo systemctl status caddy

Caddy має бути встановлений та запущений. Ми налаштуємо його пізніше.

3. Клонування репозиторію Lemmy Docker Compose

Lemmy надає офіційні файли Docker Compose для зручного розгортання. Ми клонуємо їх та налаштуємо під себе.


# Встановлення Git, якщо ще не встановлений
sudo apt install -y git

# Перехід до домашньої директорії користувача
cd ~

# Клонування офіційного репозиторію Lemmy Docker Compose
git clone https://github.com/LemmyNet/lemmy-docker-compose.git
cd lemmy-docker-compose

# Перемикання на стабільну версію (наприклад, v0.19.x або v0.20.x, актуальна на 2026 рік)
# Перевірте актуальні релізи на GitHub LemmyNet/lemmy-docker-compose
git checkout tags/0.19.3 -b 0.19.3-branch # Приклад для версії 0.19.3. Замініть на актуальну.

Важливо: Завжди перевіряйте актуальні стабільні версії Lemmy на офіційному GitHub-репозиторії та використовуйте відповідний тег для git checkout. На 2026 рік, ймовірно, будуть доступні версії 0.19.x або навіть 0.20.x.

4. Налаштування файлу .env та docker-compose.yml

У каталозі lemmy-docker-compose знаходяться файли конфігурації. Скопіюйте приклади для подальшого налаштування:


cp lemmy.env.example .env       # Копіювання файлу змінних середовища
cp docker-compose.yml.example docker-compose.yml # Копіювання основного файлу Docker Compose

Тепер відредагуйте файл .env. Це ключовий файл, що містить секрети та основні налаштування:


nano .env

У цьому файлі вам потрібно буде змінити наступні параметри (приклади актуальні для 2026 року):

  • LEMMY_HOSTNAME=your.lemmy.domain.com: Вкажіть ваше доменне ім'я, за яким буде доступний Lemmy.
  • LEMMY_DATABASE_NAME=lemmy: Ім'я бази даних (можна залишити за замовчуванням).
  • LEMMY_DATABASE_USER=lemmy: Користувач бази даних (можна залишити за замовчуванням).
  • LEMMY_DATABASE_PASSWORD=ВАШ_ОЧЕНЬ_СЛОЖНЫЙ_ПАРОЛЬ: Обов'язково змініть на складний, унікальний пароль.
  • LEMMY_DATABASE_HOST=lemmy_db: Хост бази даних (за замовчуванням, не змінюйте).
  • LEMMY_DATABASE_PORT=5432: Порт бази даних (за замовчуванням, не змінюйте).
  • LEMMY_APU_KEY=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_APU: Згенеруйте випадковий рядок довжиною 32+ символи.
  • PICTRS_API_KEY=ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_PICTRS: Згенеруйте випадковий рядок довжиною 32+ символи. Pict-rs — це сервіс для обробки зображень.

Збережіть зміни (Ctrl+O, Enter, Ctrl+X).

У файлі docker-compose.yml вам, можливо, знадобиться внести мінімальні зміни, якщо ви хочете використовувати Caddy замість Nginx (який йде за замовчуванням). У стандартному docker-compose.yml.example Lemmy часто включає Nginx. Ми видалимо або закоментуємо секцію Nginx і переконаємося, що Lemmy-сервіс доступний на порту 8536 (або іншому, вказаному в конфігурації Lemmy) для Caddy. Якщо ви клонували актуальний репозиторій, можливо, Caddy вже буде запропонований як опція або знадобиться мінімальна адаптація для його використання.

Для простоти, ми будемо припускати, що lemmy-ui та lemmy сервіси в docker-compose.yml не публікують свої порти назовні (тобто, немає ports: секцій, які б мапили 8536 або 1234 на хост-систему), а доступні лише всередині Docker-мережі. Caddy звертатиметься до них за іменами сервісів.

5. Запуск Lemmy

Тепер, коли все налаштовано, можна запустити Lemmy:


docker compose build --no-cache # Збірка образів Lemmy (може зайняти час)
docker compose up -d            # Запуск усіх сервісів у фоновому режимі

Після запуску перевірте статус контейнерів:


docker compose ps

Ви повинні побачити, що всі сервіси (lemmy_db, lemmy, lemmy_ui, pict-rs) знаходяться в статусі "running".

На цьому етапі Lemmy запущений всередині Docker-мережі, але ще не доступний ззовні. Для цього нам потрібна конфігурація Caddy, яка буде описана в наступному розділі.

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

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

Тепер, коли основні компоненти Lemmy запущені в Docker, необхідно налаштувати зовнішній доступ через веб-сервер Caddy, який виконуватиме роль зворотного проксі та автоматично керуватиме HTTPS-сертифікатами.

1. Налаштування DNS-записів

Перш ніж налаштовувати Caddy, переконайтеся, що ваш домен (наприклад, your.lemmy.domain.com) вказує на IP-адресу вашого VPS. Додайте або оновіть A-запис у вашого реєстратора доменних імен:

  • Тип: A
  • Ім'я/Хост: your.lemmy.domain.com (або @, якщо це кореневий домен)
  • Значення/IP-адреса: ВАША_IP_АДРЕСА_VPS

Зачекайте кілька хвилин, поки зміни DNS поширяться мережею (це може зайняти до кількох годин).

2. Конфігурація Caddyfile

Caddy використовує файл конфігурації під назвою Caddyfile. Відкрийте його для редагування:


sudo nano /etc/caddy/Caddyfile

Видаліть весь вміст за замовчуванням і вставте наступну конфігурацію, замінивши your.lemmy.domain.com на ваш фактичний домен:


your.lemmy.domain.com {
    # Увімкнути автоматичне стиснення GZIP
    encode gzip

    # Зворотний проксі для статичних файлів UI
    handle /pictrs/ {
        reverse_proxy pict-rs:8080
    }
    handle /api/ {
        reverse_proxy lemmy:8536
    }
    handle /feeds/ {
        reverse_proxy lemmy:8536
    }
    handle /nodeinfo/ {
        reverse_proxy lemmy:8536
    }
    handle /ap/ {
        reverse_proxy lemmy:8536
    }
    handle /actor/ {
        reverse_proxy lemmy:8536
    }
    handle /inbox/ {
        reverse_proxy lemmy:8536
    }
    handle /outbox/ {
        reverse_proxy lemmy:8536
    }
    handle /well-known/ {
        reverse_proxy lemmy:8536
    }
    handle /person/ {
        reverse_proxy lemmy:8536
    }

    # Зворотний проксі для UI
    reverse_proxy lemmy-ui:1234 {
        # Заголовки для коректної роботи WebSocket та інших функцій
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Увімкнення логування
    log {
        output file /var/log/caddy/lemmy_access.log
        format console
    }
}

Пояснення до Caddyfile:

  • your.lemmy.domain.com: Caddy автоматично запитає та оновить HTTPS-сертифікати для цього домену.
  • encode gzip: Вмикає стиснення GZIP для прискорення завантаження.
  • handle /pictrs/: Перенаправляє запити до сервісу Pict-rs (обробка зображень).
  • handle /api/ та інші: Перенаправляють запити до Lemmy API.
  • reverse_proxy lemmy-ui:1234: Основний проксі для користувацького інтерфейсу Lemmy.
  • lemmy, lemmy-ui, pict-rs: Це імена сервісів у вашому docker-compose.yml. Caddy, запущений на хост-машині, не може безпосередньо бачити контейнери за їхніми іменами, якщо вони не в одній Docker-мережі або якщо Caddy не запущений як контейнер у тій самій мережі. Для коректної роботи Caddy з контейнерами Docker, Caddy має бути або запущений як Docker-контейнер у тій самій мережі, або ви повинні явно вказати IP-адреси контейнерів чи використовувати Docker-проксі.

Корекція для Caddy на хості: Якщо Caddy запущений на хості, а Lemmy в Docker, Caddy не зможе розпізнати імена lemmy, lemmy-ui, pict-rs. Є два основні рішення:

  1. Запустити Caddy як Docker-контейнер у тій самій мережі, що й Lemmy. Це складніше, але краще.
  2. Змінити docker-compose.yml, щоб Lemmy та Lemmy-UI публікували свої порти на хост (наприклад, lemmy:8536 на 127.0.0.1:8536), і тоді Caddy проксіюватиме на localhost:8536. Це простіше для цього посібника.

Давайте змінимо docker-compose.yml, щоб Lemmy та Pict-rs були доступні на localhost. Відкрийте docker-compose.yml:


nano docker-compose.yml

Знайдіть секції lemmy, lemmy-ui та pict-rs. Додайте або змініть секцію ports, щоб вони виглядали так:


# ...
services:
  lemmy:
    image: dessalines/lemmy:0.19.3 # Замініть на актуальну версію
    # ...
    ports:
      - "127.0.0.1:8536:8536" # Lemmy API/Backend

  lemmy-ui:
    image: dessalines/lemmy-ui:0.19.3 # Замініть на актуальну версію
    # ...
    ports:
      - "127.0.0.1:1234:1234" # Lemmy UI

  pict-rs:
    image: kaniini/pict-rs:0.4.0 # Замініть на актуальну версію
    # ...
    ports:
      - "127.0.0.1:8080:8080" # Pict-rs (проксі зображень)
# ...

Збережіть docker-compose.yml, потім перезапустіть Lemmy, щоб застосувати зміни портів:


docker compose down
docker compose up -d

Тепер Caddyfile має бути скоригований для використання localhost:


your.lemmy.domain.com {
    encode gzip

    handle /pictrs/ {
        reverse_proxy 127.0.0.1:8080 # Зворотний проксі для Pict-rs
    }
    handle /api/ {
        reverse_proxy 127.0.0.1:8536 # Зворотний проксі для Lemmy API
    }
    handle /feeds/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /nodeinfo/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /ap/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /actor/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /inbox/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /outbox/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /well-known/ {
        reverse_proxy 127.0.0.1:8536
    }
    handle /person/ {
        reverse_proxy 127.0.0.1:8536
    }

    reverse_proxy 127.0.0.1:1234 { # Зворотний проксі для Lemmy UI
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    log {
        output file /var/log/caddy/lemmy_access.log
        format console
    }
}

Збережіть Caddyfile.

3. Перевірка та перезапуск Caddy

Перевірте синтаксис Caddyfile та перезапустіть Caddy, щоб застосувати нову конфігурацію:


sudo caddy validate --config /etc/caddy/Caddyfile # Перевірка синтаксису
sudo systemctl reload caddy                       # Перезапуск Caddy
sudo systemctl status caddy                       # Перевірка статусу

Якщо все гаразд, Caddy має успішно запуститися та почати прослуховувати порти 80 і 443. Перевірте логи Caddy на наявність помилок, особливо пов'язаних з отриманням HTTPS-сертифікатів:


sudo journalctl -u caddy --no-pager

Ви маєте побачити повідомлення про те, що Caddy успішно отримав сертифікати Let's Encrypt.

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

Відкрийте ваш домен (https://your.lemmy.domain.com) у веб-браузері. Ви маєте побачити інтерфейс Lemmy. Якщо ні, перевірте наступне:

  • DNS: Переконайтеся, що ваш домен правильно вказує на IP вашого VPS.
  • Firewall (UFW): Переконайтеся, що порти 80 і 443 відкриті.
  • Caddy logs: Перевірте sudo journalctl -u caddy --no-pager на помилки.
  • Docker logs: Перевірте логи контейнерів Lemmy: docker compose logs lemmy, docker compose logs lemmy-ui, docker compose logs pict-rs.

Після успішного завантаження сторінки Lemmy, зареєструйте першого користувача. Цей користувач автоматично стане адміністратором інстансу.

5. Додаткове налаштування Lemmy (lemmy.hjson)

Файл lemmy.hjson (або lemmy.toml залежно від версії) містить налаштування самого Lemmy. Він знаходиться в томі Docker-контейнера Lemmy. Щоб його відредагувати, вам потрібно буде або підключитися до контейнера, або змонтувати його як том. Найпростіше це зробити, додавши volumes до docker-compose.yml для файлу конфігурації.

У вашому docker-compose.yml, у секції lemmy, додайте (або змініть) том:


# ...
services:
  lemmy:
    image: dessalines/lemmy:0.19.3
    # ...
    volumes:
      - ./lemmy.hjson:/app/lemmy.hjson # Шлях до файлу конфігурації
    # ...

Потім створіть файл lemmy.hjson у тій самій директорії, що й docker-compose.yml:


touch lemmy.hjson
nano lemmy.hjson

Приклад вмісту lemmy.hjson (актуальна версія може мати інші параметри, див. офіційну документацію):


{
  "hostname": "your.lemmy.domain.com",
  "database": {
    "url": "postgres://lemmy:ВАШ_ОЧЕНЬ_СЛОЖНЫЙ_ПАРОЛЬ@lemmy_db:5432/lemmy"
  },
  "federation": {
    "enabled": true,
    "allowed_instances": [],
    "blocked_instances": []
  },
  "captcha": {
    "enabled": false
  },
  "log_level": "info",
  "port": 8536
}

Важливо: Переконайтеся, що hostname відповідає вашому домену. Пароль у database.url має збігатися з LEMMY_DATABASE_PASSWORD з .env. Після зміни lemmy.hjson, перезапустіть Lemmy:


docker compose restart lemmy

Тепер ваш Lemmy-інстанс повністю сконфігурований і доступний для використання.

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

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

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

1. Що потрібно резервувати

Для повного відновлення Lemmy вам знадобляться три основні компоненти:

  1. База даних PostgreSQL: Містить всю інформацію про користувачів, дописи, коментарі, спільноти, федерацію та налаштування. Це найважливіший компонент.
  2. Файли конфігурації Lemmy: Файл .env (із секретами) та lemmy.hjson.
  3. Користувацькі дані (медіафайли): Зображення та інші файли, завантажені користувачами, зберігаються в томі Docker-контейнера pict-rs.

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

Створимо простий скрипт, який виконуватиме резервне копіювання цих компонентів. Ми будемо використовувати pg_dump для бази даних і tar для файлів.


# Перехід у домашню директорію користувача
cd ~
mkdir -p lemmy_backups # Створення директорії для резервних копій

# Створення скрипта резервного копіювання
nano ~/backup_lemmy.sh

Вставте наступний вміст у файл backup_lemmy.sh:


#!/bin/bash

# Налаштування
BACKUP_DIR="/home/lemmyadmin/lemmy_backups" # Директорія для зберігання резервних копій
TIMESTAMP=$(date +%Y%m%d%H%M%S)
DOCKER_COMPOSE_DIR="/home/lemmyadmin/lemmy-docker-compose" # Шлях до вашої директорії lemmy-docker-compose
DB_CONTAINER="lemmy_db" # Ім'я контейнера бази даних
DB_USER="lemmy"         # Користувач бази даних з .env
DB_NAME="lemmy"         # Ім'я бази даних з .env
DB_PASSWORD="ВАШ_ОЧЕНЬ_СЛОЖНЫЙ_ПАРОЛЬ" # Пароль бази даних з .env
PICTRS_VOLUME="lemmy-docker-compose_pict-rs_data" # Ім'я тому pict-rs (перевірте docker volume ls)

# Очищення старих резервних копій (наприклад, старших за 7 днів)
find "$BACKUP_DIR" -type f -name ".tar.gz" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name ".sql" -mtime +7 -delete

echo "--- Починаємо процес резервного копіювання Lemmy ($TIMESTAMP) ---"

# 1. Резервна копія бази даних PostgreSQL
echo "Створення резервної копії бази даних..."
export PGPASSWORD=$DB_PASSWORD
docker exec -t $DB_CONTAINER pg_dump -U $DB_USER -d $DB_NAME > "$BACKUP_DIR/lemmy_db_backup_$TIMESTAMP.sql"
if [ $? -eq 0 ]; then
    echo "Резервна копія бази даних успішно створена: $BACKUP_DIR/lemmy_db_backup_$TIMESTAMP.sql"
else
    echo "Помилка при створенні резервної копії бази даних!"
fi
unset PGPASSWORD

# 2. Резервна копія файлів конфігурації (.env та lemmy.hjson)
echo "Копіювання файлів конфігурації..."
cp "$DOCKER_COMPOSE_DIR/.env" "$BACKUP_DIR/lemmy_env_backup_$TIMESTAMP.env"
cp "$DOCKER_COMPOSE_DIR/lemmy.hjson" "$BACKUP_DIR/lemmy_hjson_backup_$TIMESTAMP.hjson"
cp "$DOCKER_COMPOSE_DIR/docker-compose.yml" "$BACKUP_DIR/lemmy_docker-compose_$TIMESTAMP.yml"
echo "Файли конфігурації скопійовано."

# 3. Резервна копія користувацьких даних (pict-rs volume)
echo "Створення архіву користувацьких даних (pict-rs)..."
# Зупиняємо pict-rs для консистентного резервного копіювання, якщо це можливо, або використовуємо rsync
# Для простоти, ми створимо tar архів тому.
# Отримуємо шлях до тому pict-rs на хост-системі
PICTRS_VOLUME_PATH=$(docker volume inspect $PICTRS_VOLUME --format '{{ .Mountpoint }}')
if [ -d "$PICTRS_VOLUME_PATH" ]; then
    tar -czf "$BACKUP_DIR/lemmy_pict-rs_data_$TIMESTAMP.tar.gz" -C "$PICTRS_VOLUME_PATH" .
    if [ $? -eq 0 ]; then
        echo "Резервна копія pict-rs даних успішно створена: $BACKUP_DIR/lemmy_pict-rs_data_$TIMESTAMP.tar.gz"
    else
        echo "Помилка при створенні резервної копії pict-rs даних!"
    fi
else
    echo "Шлях до тому pict-rs не знайдено або він не існує."
fi

echo "--- Процес резервного копіювання завершено ---"

Важливо: Замініть ВАШ_ОЧЕНЬ_СЛОЖНЫЙ_ПАРОЛЬ на фактичний пароль з вашого файлу .env. Також переконайтеся, що ім'я тому PICTRS_VOLUME відповідає імені, яке Docker присвоїв вашому тому pict-rs (зазвичай це <имя_директории>-docker-compose_pict-rs_data). Ви можете перевірити це за допомогою docker volume ls.

Зробіть скрипт виконуваним:


chmod +x ~/backup_lemmy.sh

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

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

  • Зовнішнє S3-сумісне сховище: Amazon S3, DigitalOcean Spaces, Backblaze B2, MinIO. Це найбільш надійний та масштабований варіант. Використовуйте утиліти на кшталт rclone, restic або borgbackup для шифрування та завантаження резервних копій.
  • Окремий VPS: Ви можете налаштувати другий, менш потужний VPS для прийому резервних копій за допомогою SFTP/RSYNC.
  • Локальний комп'ютер: Для дуже невеликих інстансів можна періодично завантажувати резервні копії на свій комп'ютер.

Наприклад, якщо ви хочете завантажувати резервні копії на S3-сумісне сховище за допомогою rclone, вам потрібно встановити rclone, налаштувати його (rclone config), а потім додати команду до вашого скрипта backup_lemmy.sh:


# ... (після створення всіх резервних копій)
echo "Завантаження резервних копій на віддалене сховище S3..."
rclone sync "$BACKUP_DIR" "remote_s3_name:lemmy-backups" # Замініть remote_s3_name на ваше ім'я віддаленого сховища
if [ $? -eq 0 ]; then
    echo "Резервні копії успішно завантажено на S3."
else
    echo "Помилка при завантаженні резервних копій на S3!"
fi

4. Планування резервного копіювання за допомогою Cron

Налаштуємо Cron для щоденного виконання скрипта резервного копіювання. Відкрийте таблицю Cron для вашого користувача:


crontab -e

Додайте наступний рядок у кінець файлу, щоб скрипт виконувався щодня о 3:00 ночі:


0 3   * /home/lemmyadmin/backup_lemmy.sh >> /home/lemmyadmin/lemmy_backup.log 2>&1

Це виконуватиме скрипт щодня та записуватиме вивід у файл lemmy_backup.log для відстеження.

5. Оновлення: Rolling vs. Maintenance Window

Оновлення Lemmy та його компонентів (Docker, Caddy) важливі для безпеки та отримання нових функцій.

  • Оновлення ОС та базових пакетів: Регулярно запускайте sudo apt update && sudo apt upgrade -y (наприклад, раз на тиждень).
  • Оновлення Docker та Caddy: Виконуйте в міру виходу нових стабільних версій, використовуючи ті ж команди, що й при встановленні.
  • Оновлення Lemmy: Це вимагає зупинки контейнерів, отримання нових образів та їх запуску.
    
    cd ~/lemmy-docker-compose
    git pull origin main # Оновлення репозиторію lemmy-docker-compose
    # Якщо ви використовували гілку тегу, вам, можливо, доведеться переключитися на новий тег
    # git fetch --tags
    # git checkout tags/НОВАЯ_ВЕРСИЯ -b НОВАЯ_ВЕРСИЯ-branch
    
    docker compose down # Зупинка всіх контейнерів Lemmy
    docker compose pull # Завантаження нових образів
    docker compose up -d # Запуск нових контейнерів
    docker image prune -f # Видалення старих невикористовуваних образів
                

    Це буде короткочасне переривання роботи (кілька хвилин), тому краще виконувати його в так зване "maintenance window" — час, коли активність користувачів мінімальна.

Завжди перевіряйте офіційні релізи Lemmy та lemmy-docker-compose на GitHub перед оновленням, щоб ознайомитися зі змінами та можливими інструкціями з міграції.

Усунення несправностей + FAQ

У цьому розділі зібрано відповіді на поширені запитання та рішення типових проблем, які можуть виникнути під час розгортання та експлуатації Lemmy.

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

Для невеликого інстансу Lemmy (до 50 активних користувачів) мінімально підійде VPS з 2 ядрами CPU, 4 ГБ оперативної пам'яті та 50 ГБ SSD-диска. Важливо, щоб диск був SSD, оскільки продуктивність бази даних сильно залежить від швидкості введення-виведення. Мережевий канал має бути не менше 1 Гбіт/с з достатнім обсягом трафіку (мінімум 1 ТБ/місяць). Цей конфіг дозволить запустити Lemmy, PostgreSQL та Pict-rs з прийнятною продуктивністю, але для зростання та більш комфортної роботи рекомендується 4 ядра CPU, 8 ГБ RAM та 100-200 ГБ NVMe SSD.

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

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

Lemmy не запускається після docker compose up -d. Що робити?

Насамперед перевірте логи кожного контейнера. Перейдіть до директорії lemmy-docker-compose та виконайте:


docker compose ps             # Проверить статус контейнеров
docker compose logs lemmy     # Проверить логи основного сервиса Lemmy
docker compose logs lemmy_ui  # Проверить логи пользовательского интерфейса
docker compose logs lemmy_db  # Проверить логи базы данных PostgreSQL
docker compose logs pict-rs   # Проверить логи сервиса изображений

Шукайте помилки, такі як проблеми з підключенням до бази даних (неправильний пароль у .env), конфлікти портів, відсутність необхідних файлів. Переконайтеся, що всі змінні в .env коректні, особливо паролі та доменне ім'я.

Не працює HTTPS, браузер видає помилку "з'єднання не захищено".

Це зазвичай пов'язано з проблемами в конфігурації Caddy або DNS. Перевірте наступне:

  • DNS-записи: Переконайтеся, що ваш A-запис для домену Lemmy (наприклад, your.lemmy.domain.com) вказує на IP-адресу вашого VPS. Використовуйте dig your.lemmy.domain.com або онлайн-інструменти.
  • Файрвол (UFW): Переконайтеся, що порти 80 (HTTP) та 443 (HTTPS) відкриті. sudo ufw status verbose.
  • Caddyfile: Перевірте синтаксис /etc/caddy/Caddyfile на наявність друкарських помилок. Переконайтеся, що домен вказано правильно.
  • Логи Caddy: Перегляньте логи Caddy на предмет помилок при отриманні сертифікатів Let's Encrypt: sudo journalctl -u caddy --no-pager. Якщо є помилки типу "rate limit exceeded" або "DNS problem", зачекайте та повторіть спробу.
  • Конфлікти портів: Переконайтеся, що жоден інший сервіс не займає порти 80 або 443.

Lemmy працює дуже повільно або видає помилки 50x.

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

  • Використання ресурсів VPS: Використовуйте htop для моніторингу CPU та RAM. Якщо RAM заповнена або CPU постійно під 100%, можливо, вашому VPS не вистачає ресурсів.
  • Логи Docker-контейнерів: Перевірте логи lemmy та lemmy_db на наявність помилок, пов'язаних з продуктивністю або підключенням.
  • Статистика Docker: docker stats покаже використання CPU, RAM та I/O для кожного контейнера.
  • База даних: Переконайтеся, що PostgreSQL працює стабільно і не перевантажений. У дуже активних інстансах може знадобитися оптимізація PostgreSQL.

Як оновити Lemmy до нової версії?

Оновлення Lemmy зазвичай зводиться до наступних кроків:

  1. Перейдіть до директорії lemmy-docker-compose.
  2. Зупиніть поточні контейнери: docker compose down.
  3. Оновіть репозиторій lemmy-docker-compose (git pull або git checkout на новий тег версії).
  4. Завантажте нові Docker-образи: docker compose pull.
  5. Запустіть контейнери з новими образами: docker compose up -d.
  6. (Опціонально) Видаліть старі невикористовувані образи: docker image prune -f.

Завжди читайте release notes для нової версії Lemmy, оскільки іноді можуть знадобитися додаткові кроки міграції бази даних або зміни конфігурації.

Як відновити дані з резервної копії?

Відновлення даних включає кілька кроків:

  1. Зупиніть Lemmy: docker compose down.
  2. Відновіть базу даних: Спочатку видаліть поточну базу даних (якщо це нове розгортання) або очистіть її. Потім завантажте ваш .sql файл резервної копії в контейнер PostgreSQL:
    
    cat "$BACKUP_DIR/lemmy_db_backup_$TIMESTAMP.sql" | docker exec -i lemmy_db psql -U lemmy -d lemmy
                
    Переконайтеся, що контейнер lemmy_db запущено для цього.
  3. Відновіть файли конфігурації: Скопіюйте .env та lemmy.hjson з резервної копії до вашої директорії lemmy-docker-compose.
  4. Відновіть користувацькі дані: Розпакуйте lemmy_pict-rs_data_$TIMESTAMP.tar.gz у відповідний том Docker. Вам може знадобитися визначити шлях до тому за допомогою docker volume inspect lemmy-docker-compose_pict-rs_data.
  5. Запустіть Lemmy: docker compose up -d.

Після відновлення перевірте логи та функціональність Lemmy.

Я забув пароль адміністратора Lemmy. Як його скинути?

Якщо ви забули пароль адміністратора, ви можете скинути його, виконавши команди всередині контейнера PostgreSQL. Спочатку знайдіть ID користувача-адміністратора в таблиці person, потім оновіть пароль (встановивши його в NULL) та скиньте токен сесії. Після цього ви зможете увійти під цим ім'ям користувача без пароля та встановити новий пароль через веб-інтерфейс.


# Подключиться к контейнеру PostgreSQL
docker exec -it lemmy_db psql -U lemmy -d lemmy

# Внутри psql:
# 1. Найти ID вашего пользователя-администратора (замените 'your_admin_username' на имя пользователя)
SELECT id, name FROM person WHERE name = 'your_admin_username';
# Запомните ID (например, 1)

# 2. Обновить пароль и очистить токен сессии для этого ID
UPDATE person SET password_hashed = NULL, matrix_user_id = NULL, email_verified = false WHERE id = 1;
UPDATE person_agg SET auth_token = NULL WHERE person_id = 1;

# 3. Выйти из psql
\q

# Перезапустить контейнер Lemmy
docker compose restart lemmy

Тепер ви зможете увійти в Lemmy під своїм ім'ям користувача без пароля, і система запропонує вам встановити новий пароль.

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

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

Вітаємо! Ви успішно розгорнули власний інстанс Lemmy на VPS, налаштували його для роботи з базою даних PostgreSQL та забезпечили безпечний доступ через Caddy з автоматичним HTTPS. Тепер у вас є повністю функціонуюча федеративна соціальна мережа, готова до прийому користувачів та інтеграції з Fediverse. Цей процес не тільки надав вам робочу платформу, але й поглибив ваше розуміння серверного адміністрування, Docker та веб-серверів.

Що робити далі?

  • Модерація та управління: Ознайомтеся з інструментами модерації Lemmy, налаштуйте правила спільноти та вирішіть, з якими іншими інстансами Lemmy або ActivityPub ви хочете федеративно взаємодіяти.
  • Масштабування та оптимізація: У міру зростання вашого інстансу, можливо, знадобиться оптимізувати конфігурацію PostgreSQL, збільшити ресурси VPS або навіть розглянути виділений сервер для бази даних, якщо навантаження стане занадто високим.
  • Спільнота та просування: Запрошуйте друзів, діліться посиланням на ваш інстанс, щоб почати формувати активну спільноту. Беріть участь у Fediverse, щоб ваш інстанс став частиною ширшої мережі.

Поділитися цим записом:

розгортання Lemmy на VPS: власний сервер федеративної соціальної мережі
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.