Розгортання 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 є критично важливим для стабільної та ефективної роботи вашого 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. Є два основні рішення:
- Запустити Caddy як Docker-контейнер у тій самій мережі, що й Lemmy. Це складніше, але краще.
- Змінити
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 вам знадобляться три основні компоненти:
- База даних PostgreSQL: Містить всю інформацію про користувачів, дописи, коментарі, спільноти, федерацію та налаштування. Це найважливіший компонент.
- Файли конфігурації Lemmy: Файл
.env(із секретами) таlemmy.hjson. - Користувацькі дані (медіафайли): Зображення та інші файли, завантажені користувачами, зберігаються в томі 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 зазвичай зводиться до наступних кроків:
- Перейдіть до директорії
lemmy-docker-compose. - Зупиніть поточні контейнери:
docker compose down. - Оновіть репозиторій
lemmy-docker-compose(git pullабоgit checkoutна новий тег версії). - Завантажте нові Docker-образи:
docker compose pull. - Запустіть контейнери з новими образами:
docker compose up -d. - (Опціонально) Видаліть старі невикористовувані образи:
docker image prune -f.
Завжди читайте release notes для нової версії Lemmy, оскільки іноді можуть знадобитися додаткові кроки міграції бази даних або зміни конфігурації.
Як відновити дані з резервної копії?
Відновлення даних включає кілька кроків:
- Зупиніть Lemmy:
docker compose down. - Відновіть базу даних: Спочатку видаліть поточну базу даних (якщо це нове розгортання) або очистіть її. Потім завантажте ваш
.sqlфайл резервної копії в контейнер PostgreSQL:
Переконайтеся, що контейнерcat "$BACKUP_DIR/lemmy_db_backup_$TIMESTAMP.sql" | docker exec -i lemmy_db psql -U lemmy -d lemmylemmy_dbзапущено для цього. - Відновіть файли конфігурації: Скопіюйте
.envтаlemmy.hjsonз резервної копії до вашої директоріїlemmy-docker-compose. - Відновіть користувацькі дані: Розпакуйте
lemmy_pict-rs_data_$TIMESTAMP.tar.gzу відповідний том Docker. Вам може знадобитися визначити шлях до тому за допомогоюdocker volume inspect lemmy-docker-compose_pict-rs_data. - Запустіть 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, щоб ваш інстанс став частиною ширшої мережі.