Гид по технологиям

Установка Pleroma на Ubuntu 20.04

• 6 min read • Руководство • Обновлено 23 Nov 2025
Pleroma на Ubuntu 20.04 — установка и настройка
Pleroma на Ubuntu 20.04 — установка и настройка

О чём эта инструкция

Pleroma — свободная federated social networking платформа, совместимая с Mastodon и другими реализациями ActivityPub. Один аккаунт на одном экземпляре (instance) может общаться со всем Fediverse. Эта инструкция показывает, как установить Pleroma на сервер под управлением Ubuntu 20.04 и настроить общие операционные задачи: HTTPS, Nginx, PostgreSQL, systemd, резервное копирование и обновления.

Важно: большинство команд выполняются с правами sudo или от пользователя pleroma/postgres. Внимательно копируйте команды и заменяйте примеры доменов и паролей на ваши значения.

Внешний вид панели Pleroma

TL;DR для опытного администратора

  • Подготовьте сервер Ubuntu 20.04 и пользователя с sudo.
  • Настройте ufw: разрешите OpenSSH, 80 и 443.
  • Установите PostgreSQL, Nginx, snap/certbot.
  • Установите Pleroma как системного пользователя /opt/pleroma.
  • Сгенерируйте config.exs, выполните psql-скрипт и миграции.
  • Получите SSL от Let’s Encrypt и настройте Nginx.
  • Включите systemd-сервис pleroma и создайте admin-учётку.

Основные преимущества и варианты использования

  • Лёгкая и быстрая альтернатива Mastodon при ограниченных ресурсах.
  • Подходит для сообществ, локальных инстансов и тестовых развёртываний.
  • Можно масштабировать: с локального хранения медиаконтента до S3/MinIO.

Требования (проверить перед началом)

  • Сервер с Ubuntu 20.04 LTS.
  • Нерoot-пользователь с sudo.
  • Свободный домен и доступ к DNS для A/AAAA записей.
  • Рекомендуем минимум 1–2 ГБ RAM для небольшого инстанса, больше для активного сообщества.

Быстрая проверка системы

Выполните обновление пакетов:

$ sudo apt update
$ sudo apt upgrade

Установите базовый набор утилит:

$ sudo apt install wget curl gnupg2 ca-certificates lsb-release gnupg zip libncurses5 libmagic-dev -y

Шаг 1 — конфигурация брандмауэра

Ubuntu содержит ufw (Uncomplicated Firewall). Проверьте статус:

$ sudo ufw status

Если статус inactive — включите правила, не потеряв SSH-соединение:

$ sudo ufw allow OpenSSH
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw enable

Проверьте статус снова:

$ sudo ufw status

Важно: при использовании нестандартного SSH-порта укажите его явно.

Шаг 2 — установка PostgreSQL

Добавьте репозиторий PostgreSQL и ключ репозитория:

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt update
$ sudo apt install postgresql -y

После установки проверьте службу:

$ sudo systemctl status postgresql

Совет: используйте отдельную базу/пользователя для Pleroma и сильный пароль.

Шаг 3 — установка Nginx

Установите Nginx из официальных репозиториев:

$ sudo apt install nginx -y

Проверьте, что Nginx слушает порт 80:

$ sudo ss -tlnp | grep nginx

Шаг 4 — установка Pleroma (OTP release)

  1. Создайте системного пользователя pleroma без возможности входа и домашней директорией /opt/pleroma:
$ sudo adduser --system --shell /bin/false --home /opt/pleroma pleroma
  1. Переключитесь на root, затем на пользователя pleroma для загрузки релиза:
$ sudo su
$ su pleroma -s $SHELL -l
  1. Скачайте бинарный релиз (пример для amd64):
$ curl "https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=amd64" -o /tmp/pleroma_amd64.zip
$ unzip /tmp/pleroma_amd64.zip -d /tmp/
$ mv /tmp/release/* /opt/pleroma
$ rm -rf /tmp/pleroma_amd64.zip /tmp/release
  1. Вернитесь к root и создайте каталоги для загрузок и статических файлов:
$ exit
$ mkdir -p /var/lib/pleroma/{uploads,static}
$ mkdir -p /etc/pleroma
$ chown -R pleroma /var/lib/pleroma /etc/pleroma

Совет: при использовании внешнего хранилища (S3/MinIO) позднее замените локальные пути в config.

Шаг 5 — генерация конфигурации Pleroma

Переключитесь обратно на пользователя pleroma и запустите генератор конфига:

$ su pleroma -s /bin/bash -l
$ ./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql

Вас попросят ввести домен, имя инстанса, почту администратора, параметры БД и другие опции. Примеры ответа находятся в подсказках. Если генератор предупреждает, что /etc/pleroma/config.exs не найден — это нормально до записи файла.

Пример диалога (фрагмент):

What domain will your instance use? [] example.com
What is the name of your instance? [nspeaks.com] Howtoforge Pleroma
What is your admin email address? [] admin@example.com
Do you want to store the configuration in the database (allows controlling it from admin-fe)? (y/n) [n] n
What is the hostname of your database? [localhost] localhost
What is the name of your database? [pleroma] pleroma
What is the user used to connect to your database? [pleroma] pleroma
What is the password used to connect to your database? [autogenerated] yourpassword
Writing config to /etc/pleroma/config.exs.
Writing the postgres script to /tmp/setup_db.psql.

Если выберете хранение конфига в базе (ответ y), впоследствии сможете править настройки через веб‑админку.

Создание базы и запуск миграций

Переключитесь на системного пользователя postgres и примените SQL-скрипт, сгенерированный Pleroma:

$ exit
$ su postgres -s /bin/bash -l
$ psql -f /tmp/setup_db.psql
$ exit
$ su pleroma -s /bin/bash -l
$ ./bin/pleroma_ctl migrate
$ exit

Проверьте, что миграции прошли без ошибок.

Шаг 6 — SSL через Let’s Encrypt (Certbot)

Ubuntu 20.04 поддерживает snapd; рекомендуем установить certbot через snap:

$ snap install core
$ snap refresh core
$ apt remove certbot -y
$ snap install --classic certbot
$ ln -s /snap/bin/certbot /usr/bin/certbot

Остановите Nginx, чтобы дать certbot занять порт 80:

$ systemctl stop nginx
$ certbot certonly --standalone --preferred-challenges http -d example.com

Сертификаты окажутся в /etc/letsencrypt/live/example.com. Создайте webroot для auto-renewal и крон‑задачу:

$ mkdir -p /var/lib/letsencrypt
$ nano /etc/cron.daily/certbot-renew

Вставьте:

#!/bin/sh
certbot renew --cert-name example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сделайте файл исполняемым:

$ chmod +x /etc/cron.daily/certbot-renew

Примечание: при использовании DNS-01 challenge или wildcard сертификатов процедура отличается.

Шаг 7 — настройка Nginx для Pleroma

Pleroma включает пример конфигурации Nginx. Перенесите его и отредактируйте:

$ mv /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.conf
$ sed -i 's/example\.tld/example.com/g' /etc/nginx/sites-available/pleroma.conf
$ nano /etc/nginx/sites-available/pleroma.conf

Разрешите блок ACME для Let’s Encrypt, чтобы certbot мог проверять владение доменом. Пример server-блока:

server {
    server_name    example.com;

    listen         80;
    listen         [::]:80;

    location ~ /\.well-known/acme-challenge {
        root /var/lib/letsencrypt/;
    }

    location / {
        return         301 https://$server_name$request_uri;
    }
}

Включите сайт и перезапустите Nginx:

$ ln -s /etc/nginx/sites-available/pleroma.conf /etc/nginx/sites-enabled/pleroma.conf
$ systemctl enable nginx
$ systemctl start nginx

Установите и включите systemd-сервис Pleroma:

$ mv /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
$ systemctl enable pleroma
$ systemctl start pleroma

Проверка: откройте https://example.com в браузере. Страница должна загрузиться в течение ~30 секунд после старта.

Главная страница Pleroma

Шаг 8 — финальная настройка Pleroma

Создание административного пользователя

Переключитесь на pleroma и создайте admin-учётку:

$ su pleroma -s /bin/bash -l
$ ./bin/pleroma_ctl user new example admin@example.com --password password123 --admin
$ exit

Выберите надёжный пароль и замените email на реальный.

Изменение настроек

Если вы выбрали не хранить конфиг в базе, правьте /etc/pleroma/config.exs напрямую:

$ nano /etc/pleroma/config.exs
$ systemctl restart pleroma

При включённой опции хранения в БД — часть настроек можно менять через веб‑админку.

Обновление Pleroma

Обновление стандартно выполняется через pleroma_ctl:

$ su pleroma -s $SHELL -lc "./bin/pleroma_ctl update"
$ systemctl stop pleroma
$ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
$ systemctl start pleroma

Резервное копирование

  1. Остановите сервис:
$ systemctl stop pleroma
  1. Сделайте дамп Postgres (пример):
$ cd /opt/pleroma
$ sudo -Hu postgres pg_dump -d  --format=custom -f 
  1. Скопируйте также файлы:
  • config/prod.secret.exs
  • config/setup_db.sql
  • папку uploads (/var/lib/pleroma/uploads)
  1. Запустите сервис:
$ systemctl start pleroma

Восстановление

  1. Переустановите Pleroma (как в шаге 4), убедитесь, что сервис отключён.
  2. Верните файлы на свои места.
  3. Удалите существующую базу и пользователя (если требуется):
$ sudo -Hu postgres psql -c 'DROP DATABASE ;' ; sudo -Hu postgres psql -c 'DROP USER ;' 
  1. Восстановите роли и схему:
$ sudo -Hu postgres psql -f config/setup_db.psql
$ sudo -Hu postgres pg_restore -d  -v -1 
  1. Запустите миграции и перезапустите сервис:
$ su pleroma -s $SHELL -lc "./bin/pleroma_ctl migrate"
$ systemctl restart pleroma
$ sudo -Hu postgres vacuumdb --all --analyze-in-stages

Эксплуатация и безопасность

  • Обновляйте систему и Pleroma регулярно.
  • Ограничьте доступ к серверу по SSH ключам.
  • Настройте автоматическое обновление и мониторинг диска, CPU и памяти (Prometheus/Node Exporter или простые скрипты).
  • Перенесите медиаконтент на S3/MinIO, если ожидается большой объём данных.
  • Используйте fail2ban или аналог для защиты от брутфорса.

Рекомендации по безопасности

  • TLS: включите строгую политику шифров, HSTS и OCSP Stapling на Nginx.
  • Бэкапы: проверяйте восстановление регулярно.
  • Логи: собирайте логи (systemd, nginx, pleroma) внешне для ретенции и анализа.

Быстрая шпаргалка (cheat sheet)

  • Проверить статус Pleroma: systemctl status pleroma
  • Логи: journalctl -u pleroma -f
  • Выполнить миграции: ./bin/pleroma_ctl migrate (от pleroma)
  • Обновить релиз: ./bin/pleroma_ctl update

Роли и чеклист перед запуском в продакшн

Администратор сервера:

  • Настроить брандмауэр и мониторинг.
  • Настроить бэкапы и регулярную проверку восстановлений.
  • Настроить SSL и автоматическое продление.

DevOps / Разработчик:

  • Настроить CI для обновлений и миграций.
  • Протестировать откат и восстановление данных.

Сопровождение/сообщество:

  • Настроить правила модерации и контакты для abuse.
  • Обеспечить канал связи с пользователями (почта/форум).

Критерии приёмки

  • Сайт доступен по HTTPS и корректно отдаёт статические файлы.
  • Пользователь может зарегистрироваться и разместить запись с изображением.
  • Веб‑админка (если включена) доступна и сохраняет настройки.
  • Резервная копия БД успешно восстанавливается в тестовой среде.

Тестовые кейсы

  • Попробовать регистрацию и вход под новым пользователем.
  • Загрузить изображение и проверить, что EXIF можно удалить (если включено).
  • Проверить федерацию: подписка на аккаунт в Mastodon/другом ActivityPub-экземпляре.
  • Проверить автообновление сертификата Let’s Encrypt в тестовом режиме: certbot renew –dry-run

Частые ошибки и устранение неполадок

  • «Проблемы с миграциями»: проверьте права пользователя БД и наличие созданной базы.
  • «Плерома не стартует»: смотрите journalctl -u pleroma -xe и /var/log/syslog.
  • «Nginx отдаёт 502»: проверьте, запущен ли pleroma и слушает ли порт, указанный в config.exs.
  • «Certbot не может получить challenge»: убедитесь, что сервер_name в Nginx совпадает с доменом и порт 80 доступен.

Когда этот подход не годится

  • Вам нужен инстанс для десятков тысяч пользователей — потребуется кластеризация и масштабирование: Redis/отдельные очереди, распределённое хранилище и балансировщики.
  • Требуется высокая доступность с минимальным RTO — необходима репликация БД, автоматическое переключение и резервные ноды.

Мини‑методология принятия решений

  1. Оцените предполагаемую нагрузку (пользователи/медиа).
  2. Начните с простого развёртывания (локальное хранилище, один сервер).
  3. Наблюдайте метрики и определите узкие места.
  4. Горизонтально или вертикально масштабируйте в зависимости от узких мест.

Решение «развернуть или использовать хостинг» (Mermaid)

flowchart TD
  A[Нужен инстанс Pleroma?] --> B{Низкая техническая компетенция}
  B -- Да --> C[Использовать хостинг/managed Pleroma]
  B -- Нет --> D{Ожидаемая нагрузка > 10k активных пользователей}
  D -- Да --> E[Проектировать масштабируемую архитектуру]
  D -- Нет --> F[Развернуть на одном сервере по этой инструкции]
  C --> G[Конфигурация и запуск]
  E --> G
  F --> G

Короткое резюме

  • Pleroma — гибкая fediverse-платформа, простая в развёртывании на Ubuntu 20.04.
  • Следуйте шагам по настройке ufw, PostgreSQL, Nginx и Certbot.
  • Обязательно настройте резервное копирование, мониторинг и поддержку SSL.

Если остались вопросы по конкретным шагам (например, настройка S3-хранилища, перенос медиа, или тонкая настройка nginx TLS), опишите ваш сценарий — помогу адаптировать конфигурацию.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро