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

Получить VPS arrow_forward
eco Начальный Туториал

Развёртывание Lemmy на VPS: собственный сервер федеративной социальной сети

calendar_month Jul 03, 2026 schedule 26 мин. чтения visibility 16 просмотров
Развёртывание 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 (image proxy)
# ...

Сохраните 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 перед обновлением, чтобы ознакомиться с изменениями и возможными инструкциями по миграции.

Troubleshooting + 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.