Как развернуть собственный Mastodon на Ubuntu с Docker и Nginx

Коротко о Mastodon и зачем это нужно
Mastodon — это свободная федеративная социальная сеть, похожая по идее на Twitter, где «тооты» ограничены 500 символами. Самохостинг Mastodon даёт вам полный контроль над политикой модерации, конфиденциальностью и доступом. Этот гайд ориентирован на Ubuntu Server и предполагает минимальный уровень навыков системного администратора: работа в SSH, базовые команды Linux и редактирование конфигураций.
Важно: перед началом убедитесь, что у вас есть:
- VPS с Ubuntu Server (можно арендовать у провайдеров вроде Vultr, DigitalOcean и т. п.),
- выделенный домен, указывающий на IP сервера,
- почтовый сервис для исходящей почты (например, Mailgun) для подтверждений и уведомлений.
Что понадобится (краткий список)
- Ubuntu Server (LTS предпочительно)
- SSH-доступ с правами администратора
- Docker и Docker Compose
- Git
- Nginx (в роли обратного прокси)
- Mailgun или другой SMTP для регистрации пользователей
- Let’s Encrypt для SSL
Роль элементов и одно предложение-определение
- Docker — контейнеризация сервисов; упрощает запуск зависимостей Mastodon.
- Mastodon — программа самой социальной сети (включает веб, Sidekiq, streaming и т. д.).
- Nginx — обратный прокси и TLS-терминатор.
Шаг 0 — предварительные замечания
Важно: резервные копии базы данных и папки хранения медиа необходимы до любой обновляющей операции. Прежде чем менять .env.production, сохраняйте копию: /home/mastodon/mastodon/.env.production.backup.
Шаг 1: подключение по SSH и установка Docker
Подключитесь к вашему серверу по SSH и выполните команды от имени администратора. Создайте пользователя mastodon, добавьте в sudo и переключитесь на него:
adduser mastodon
usermod -aG sudo mastodon
su - mastodonОбновите индекс пакетов и установите вспомогательные утилиты:
sudo apt-get update
sudo apt-get install apt-transport-https software-properties-common git nano curlУстановите Docker и Docker Compose:
sudo apt install docker.io
sudo usermod -aG docker $(whoami)
# Выйдите и зайдите снова для вступления в силу группы docker
exit
su - mastodonЗапустите и включите Docker при старте системы:
sudo systemctl start docker
sudo systemctl enable dockerУстановите Docker Compose (пакет из репозитория) или скачайте официальный бинарный файл при необходимости:
sudo apt install docker-composeВажно: если вы планируете использовать отдельный каталог для томов Docker, убедитесь, что на диске достаточно места и включено резервное копирование этих томов.
Шаг 2: загрузка Mastodon и запуск мастера установки
Перейдите в домашнюю папку mastodon и клонируйте репозиторий:
cd /home/mastodon
git clone https://github.com/tootsuite/mastodon.git
cd mastodon
nano docker-compose.ymlВ файле docker-compose.yml найдите секции с ключом build: и закомментируйте их (в Docker Compose local build может конфликтовать с уже собранными образами). Сохраните Ctrl+O, затем Ctrl+X.
Запустите мастер установки, который подготовит .env.production и предложит базовые настройки:
docker-compose run --rm web bundle exec rake mastodon:setupМастер задаст вопросы про домен, почту и т. п. Используйте ваш домен и параметры Mailgun (Default SMTP Login и Default Password) для полей SMTP_LOGIN и SMTP_PASSWORD в .env.production. Отправьте тестовое письмо через мастер — убедитесь, что вы получаете его.
Сохраните сгенерированные учетные данные администратора (имя пользователя и временный пароль).
Если вы используете Mailgun, зайдите в app.mailgun.com/app/domains → ваша домен-запись → Default SMTP Login и Default Password.
Шаг 3: настройка Nginx как обратного прокси
Установите Nginx:
sudo apt-get install nginxУдалите профиль по умолчанию и создайте конфигурацию для вашего домена:
sudo rm /etc/nginx/sites-available/default
sudo rm /etc/nginx/sites-enabled/default
sudo touch /etc/nginx/sites-available/mastodon
sudo ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon
sudo nano /etc/nginx/sites-available/mastodonСкопируйте пример конфигурации с официального репозитория Mastodon (или с шаблона, который вы используете). Во всех местах example.com замените на ваш домен (без www). Сохраните и выйдите.
Важно: проверьте синтаксис nginx перед перезапуском:
sudo nginx -tШаг 4: получение SSL и запуск сервисов
Установите Certbot и временно остановите Nginx, чтобы Certbot мог использовать standalone-режим:
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update && sudo apt-get install certbot
sudo systemctl stop nginx.serviceГенерация сертификата (замените example.com на ваш домен):
sudo certbot certonly --standalone -d example.comПосле успешного получения сертификата вернитесь в каталог Mastodon и выключите контейнеры перед сборкой и миграциями:
cd /home/mastodon/mastodon
docker-compose downСоберите образы, скомпилируйте ассеты и примените миграции, затем запустите контейнеры в фоне:
docker-compose build
docker-compose run --rm web rails assets:precompile
docker-compose run --rm web rails db:migrate
docker-compose up -dЗапустите Nginx снова:
sudo systemctl restart nginx.serviceЕсли всё прошло успешно, откройте https://your-domain и завершите создание администратора, подтвердив почту.
Если при запуске появились ошибки, проверьте .env.production, логи Docker и настройки Mailgun, а также DNS-записи домена.
Шаг 5: автоматизация задач и плановое обслуживание
Создайте скрипт для периодической очистки медиа-кэша и очередей (cron):
cd /home/mastodon
nano mastodon_cronВставьте в файл:
cd /home/mastodon/mastodon
docker-compose run --rm web rake mastodon:media:clear
docker-compose run --rm web rake mastodon:push:refresh
docker-compose run --rm web rake mastodon:push:clear
docker-compose run --rm web rake mastodon:feeds:clearСделайте файл исполняемым и откройте crontab:
sudo chmod +x mastodon_cron && sudo crontab -eДобавьте строку, чтобы запуск происходил ежедневно в полночь:
0 0 * * * /home/mastodon/mastodon_cron > /home/mastodon/mastodon_log 2>&1Автоматическое продление SSL
Добавьте в crontab задачи на понедельник для проверки и продления сертификата и перезагрузки Nginx:
sudo crontab -eДобавьте в конец:
0 1 * * 1 /usr/bin/certbot renew >> /home/mastodon/letsencrypt.log 2>&1
5 1 * * 1 /bin/systemctl reload nginxЭти строки будут пробовать обновлять сертификаты раз в неделю и перезагружать Nginx при необходимости.
Администрирование Mastodon
Создайте свою учётную запись, подтвердите почту, затем выполните из каталога mastodon команду для повышения прав:
cd /home/mastodon/mastodon
docker-compose run --rm web rails mastodon:make_admin USERNAME=yourusernameВ веб-интерфейсе перейдите в Preferences → Administration, чтобы управлять пользователями, настройками сайта и модерацией.
Рекомендации по безопасности и стабильности
Важно: самохостинг накладывает на вас ответственность за безопасность и приватность данных. Ключевые шаги:
- Резервное копирование: делайте регулярные бэкапы базы данных PostgreSQL и тома с медиа (S3 или локальные копии).
- Фаервол: откройте только нужные порты (22 для SSH, 80/443 для HTTP/HTTPS). Используйте ufw:
sudo apt install ufw
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable- Fail2ban: защитит от перебора паролей и брутфорс-атак.
- Мониторинг: настраивайте систему оповещений для дискового пространства, нагрузок и ошибок контейнеров.
- Обновления: регулярно обновляйте Docker-образы Mastodon и систему Ubuntu. Перед крупным обновлением делайте бэкап.
- Ограничьте доступ к .env.production: храните файл с правами 600 и владельцем mastodon.
Приватность и соответствие требованиям (GDPR и другие)
- Храните минимальные личные данные пользователей.
- Обеспечьте возможность удаления аккаунтов и всех связанных данных по запросу; Mastodon имеет механизмы удаления учётных записей и контента, но вам нужно документировать процесс.
- Логи SMTP/почты и бэкапы могут содержать персональные данные: ограничьте доступ и храните их зашифрованными при долгосрочном хранении.
- Если вы ожидаете пользователей из ЕС, подготовьте политику конфиденциальности с описанием типов собираемых данных и контактной точки для запросов на удаление.
Чек-листы по ролям
Администратор (контент и модерация):
- Проверить регистрацию и подтверждение почты.
- Настроить правила модерации и автоматические проверки.
- Управлять блокировками федерации и фильтрами контента.
Системный администратор (инфраструктура):
- Настроить бэкапы PostgreSQL и томов медиа.
- Обновлять Docker-образы и систему.
- Контролировать диск, память и использование CPU.
- Проверять логи Nginx и контейнеров.
Security engineer (безопасность):
- Настроить Fail2ban и ufw.
- Проверять права на файлы и секреты.
- Периодически проводить аудит уязвимостей и обновлений.
Когда самохостинг не подходит
- Если нужны гарантии высокой доступности и SLA — лучше использовать коммерческий хостинг или платформу.
- Если вы не готовы поддерживать безопасность и обновления — будьте готовы к риску взлома и утечки данных.
- Если ожидается очень высокая нагрузка (тысячи активных пользователей) — потребуются ресурсные кластеры и масштабирование за пределы одного VPS.
Альтернативные подходы
- Использовать управляемые Mastodon-хостинги (платные сервисы), если не хочется заниматься поддержкой.
- Запуск в Kubernetes для лучшей масштабируемости и управления контейнерами.
- Использование S3-совместимого хранилища для медиа вместо локальных томов.
Быстрые проверки при неполадках (troubleshooting)
- 403/502 на nginx — проверьте синтаксис, права на сокеты и наличие контейнеров.
- Не приходят письма — проверьте .env.production и параметры Mailgun; есть ли блокировка по DNS/спискам.
- Ошибки миграций — откатите изменения и проверьте логи rails и базы.
- Полный диск — очистите старые образы Docker: docker system prune и проверьте тома.
Критерии приёмки
- Сайт открывается по HTTPS и не даёт ошибок сертификата.
- Регистрация пользователей работает, подтверждение по почте приходит.
- Администратор может зайти в панель и управлять настройками.
- Cron-задачи выполняются и логируются.
Мини-методология резервного восстановления
- Остановите контейнеры: docker-compose down.
- Восстановите бэкап базы PostgreSQL в отдельную базу и проверьте целостность.
- Восстановите том с медиа в том же пути /var/lib/docker/volumes или в S3.
- Запустите миграцию, затем docker-compose up -d.
- Проверьте веб-интерфейс и логи.
Краткий справочник терминов
- Toot — сообщение в Mastodon.
- Instance — отдельный сервер Mastodon с собственным доменом и политикой.
- Federation — взаимодействие между инстансами Mastodon через ActivityPub.
Последние советы и вывод
Самостоятельный запуск Mastodon даёт гибкость и контроль, но требует регулярного обслуживания: обновлений, бэкапов и мониторинга. Если вы готовы инвестировать время в администрирование, самохостинг — отличный способ создать сообщество с собственными правилами. В противном случае рассмотрите управляемые решения или альтернативные платформы.
Краткое резюме:
- Установите Docker и Docker Compose.
- Клонируйте Mastodon, настройте .env.production через мастер.
- Настройте Nginx, получите SSL через Certbot.
- Автоматизируйте cron-задачи и продление сертификатов.
- Настройте резервное копирование и безопасность.
Важно: перед публичным запуском проведите тестовую регистрацию и несколько сценариев восстановления, чтобы убедиться в надёжности сервиса.
Похожие материалы
Настройка почты Bluehost — создать, подключить к Gmail
Как начать писать на Medium — руководство
Безопасная гибридная работа: практические рекомендации
Как контролировать личные сообщения в Instagram
Возврат по делу FTC против Epic Games (Fortnite)