Владеть своим соцаккаунтом — отличная идея, пока не вспоминаешь, что аккаунт живёт на чужом сервере, по чужим правилам и с чужим аптаймом. Свой инстанс Mastodon это решает: ваш адрес — @you@your-domain, и отключить его можете только вы. Подвох в том, что Mastodon — совсем не маленькое приложение. Лучше заранее понимать, во что ввязываешься.
Для кого это
- Однопользовательский инстанс — для себя или для официального аккаунта компании.
- Небольшое сообщество друзей или команда проекта — десятки человек, не тысячи.
Для большего вы уже запускаете сервис с обязанностями модерации, жалобами и настоящей инфраструктурой. Это отдельный разговор.
Что реально нужно
Mastodon держит несколько процессов сразу: веб-приложение на Rails, фоновые воркеры Sidekiq, сервер стриминга, PostgreSQL и Redis. Из-за федерации сервер продолжает забирать посты и медиа с других серверов, даже пока вы спите.
| Инстанс | Тариф |
|---|---|
| Один пользователь, немного подписок | Small-IP — 2 vCPU, 4 ГБ, $16/мес |
| Небольшое сообщество, активная федерация | Medium-IP — 4 vCPU, 6 ГБ, $20/мес |
На 4 ГБ работать можно, но впритык: очереди Sidekiq копятся, когда популярный пост из вашей ленты собирает тысячи ответов. 6 ГБ дают запас. Второе ограничение — диск, о нём в разделе про медиа.
Ещё нужен домен и выделенный IP: другие серверы доставляют на ваш по порту 443.
Установка в Docker
В официальном репозитории есть docker-compose.yml. На свежем сервере с Ubuntu 24.04 и установленным Docker:
git clone https://github.com/mastodon/mastodon.git
cd mastodon
git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)
touch .env.production
docker compose run --rm -v $(pwd)/.env.production:/opt/mastodon/.env.production \
web bundle exec rake mastodon:setup
docker compose up -d
Задача установки спросит домен, настройки базы и Redis (значения по умолчанию подходят к compose-файлу), почту и первого администратора. Всё запишется в .env.production. Прочитайте release notes версии, которую выбрали: между мажорными версиями шаги иногда меняются.
В Mastodon есть шаблон nginx — dist/nginx.conf. Скопируйте его в /etc/nginx/sites-available/, замените домен и получите сертификат через certbot. Оба шага описаны в наших инструкциях по обратному прокси и привязке домена.
Почта: через релей
Mastodon отправляет письма с подтверждением и сбросом пароля. Порты 25 и 465 на наших серверах закрыты, поэтому направьте Mastodon на внешний сервис транзакционной почты через порт 587:
SMTP_SERVER=smtp.your-provider.example
SMTP_PORT=587
SMTP_LOGIN=apikey
SMTP_PASSWORD=your-smtp-password
SMTP_FROM_ADDRESS=notifications@your-domain.example
Честно говоря, релей стоит взять в любом случае. Письма с совсем нового IP обычно падают в спам, а у релея есть репутация, которой у вас пока нет.
Медиа: главный пожиратель диска
Каждая картинка и каждое видео от аккаунтов, которые видит ваш сервер, кэшируются локально. На живом инстансе это гигабайты в неделю. Чистите старые чужие медиа по расписанию:
docker compose exec web tootctl media remove --days 7
docker compose exec web tootctl preview_cards remove --days 30
Поставьте эти команды в ежедневный cron. Если инстанс растёт, вынесите медиа в S3-совместимое хранилище через настройки S3_* в .env.production, и тогда на диске VPS останется только база.
Сопровождение
- Обновления: забираете новый тег,
docker compose pull, запускаете миграции по release notes, перезапускаете. Мажорные версии не перескакивайте. - Бэкапы: дамп PostgreSQL и сохранённый
.env.production— без его секретов восстановление не заработает. Копии вне сервера — в нашей инструкции по restic, а Managed Backups добавят ежедневные точки восстановления всего сервера. - Домен — навсегда. Он зашит в адрес каждого аккаунта во всём федиверсе. Выберите его до создания первого аккаунта.
Нужно что-то полегче для командного чата? Возможно, лучше подойдёт сервер Matrix.
Комментарии
Пока нет комментариев. Будьте первым.