Володіти своїм соцакаунтом — чудова ідея, доки не згадаєш, що акаунт живе на чужому сервері, за чужими правилами й із чужим аптаймом. Свій інстанс 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.
Коментарі
Поки немає коментарів. Будьте першим.