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

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)
- Создайте системного пользователя pleroma без возможности входа и домашней директорией /opt/pleroma:
$ sudo adduser --system --shell /bin/false --home /opt/pleroma pleroma- Переключитесь на root, затем на пользователя pleroma для загрузки релиза:
$ sudo su
$ su pleroma -s $SHELL -l- Скачайте бинарный релиз (пример для 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- Вернитесь к 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 секунд после старта.

Шаг 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Резервное копирование
- Остановите сервис:
$ systemctl stop pleroma- Сделайте дамп Postgres (пример):
$ cd /opt/pleroma
$ sudo -Hu postgres pg_dump -d --format=custom -f - Скопируйте также файлы:
- config/prod.secret.exs
- config/setup_db.sql
- папку uploads (/var/lib/pleroma/uploads)
- Запустите сервис:
$ systemctl start pleromaВосстановление
- Переустановите Pleroma (как в шаге 4), убедитесь, что сервис отключён.
- Верните файлы на свои места.
- Удалите существующую базу и пользователя (если требуется):
$ sudo -Hu postgres psql -c 'DROP DATABASE ;' ; sudo -Hu postgres psql -c 'DROP USER ;' - Восстановите роли и схему:
$ sudo -Hu postgres psql -f config/setup_db.psql
$ sudo -Hu postgres pg_restore -d -v -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 — необходима репликация БД, автоматическое переключение и резервные ноды.
Мини‑методология принятия решений
- Оцените предполагаемую нагрузку (пользователи/медиа).
- Начните с простого развёртывания (локальное хранилище, один сервер).
- Наблюдайте метрики и определите узкие места.
- Горизонтально или вертикально масштабируйте в зависимости от узких мест.
Решение «развернуть или использовать хостинг» (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), опишите ваш сценарий — помогу адаптировать конфигурацию.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента