−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS

VPS для Mastodon: свой небольшой инстанс

Размещаем небольшой инстанс Mastodon на VPS: честные требования к памяти и диску, установка в Docker, почта через SMTP-релей и чистка медиа, чтобы диск не забился.

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

Сопровождение

Нужно что-то полегче для командного чата? Возможно, лучше подойдёт сервер Matrix.

Готовы развернуть? Оплата криптой, без KYC — сервер за минуту.

Развернуть →

Частые вопросы

Сколько памяти нужно инстансу Mastodon?

Для однопользовательского или небольшого инстанса реальный минимум — 4 ГБ, комфортно — 6 ГБ. Mastodon одновременно держит веб-процесс, воркеры Sidekiq, PostgreSQL и Redis, а федерация нагружает Sidekiq даже когда никто не пишет.

Зачем Mastodon выделенный IP?

Другие серверы доставляют посты на ваш по HTTPS на порт 443, а люди открывают инстанс в браузере. Для этого нужен входящий 443 на своём IP, которого у NAT-тарифов нет.

Как отправлять почту из Mastodon?

Через внешний сервис транзакционной почты по SMTP на порт 587. Порты 25 и 465 на наших серверах закрыты, а релей к тому же даёт гораздо лучшую доставляемость, чем свежий IP.

Почему диск так быстро заполняется?

Сервер кэширует медиа всех аккаунтов, которые видит. Запускайте 'tootctl media remove --days 7' по расписанию или вынесите медиа в S3-совместимое хранилище.

Можно ли потом сменить домен?

Нет. Домен — часть идентичности каждого аккаунта во всём федиверсе. Выберите его внимательно до создания первого аккаунта.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.