مالک حساب اجتماعی خودتان بودن ایدهی جذابی است، تا وقتی متوجه شوید آن حساب روی سرور کس دیگری زندگی میکند، با قوانین و زمان کارکرد او. سرور Mastodon خودتان این را حل میکند: شناسهی شما @you@your-domain است و هیچکس جز خودتان نمیتواند خاموشش کند. ماجرا این است که Mastodon برنامهی کوچکی نیست. بهتر است بدانید وارد چه چیزی میشوید.
برای چه کسانی است
- یک سرور تککاربره برای خودتان یا حساب رسمی شرکتتان.
- یک جامعهی کوچک از دوستان یا یک تیم پروژه — دهها نفر، نه هزاران.
برای هر چیز بزرگتر، دارید سرویسی را اداره میکنید با وظایف نظارت، گزارشهای سوءاستفاده و زیرساخت واقعی. آن بحث دیگری است.
واقعاً چه چیزهایی لازم دارد
Mastodon چند پردازه را همزمان اجرا میکند: برنامهی وب Rails، کارگرهای پسزمینهی Sidekiq، یک سرور استریم، PostgreSQL و Redis. به خاطر فدراسیون، سرور شما حتی وقتی خوابید هم به گرفتن پستها و رسانهها از سرورهای دیگر ادامه میدهد.
| سرور | پلن |
|---|---|
| یک کاربر، دنبالشدههای کم | Small-IP — ۲ vCPU، ۴ گیگابایت، ۱۶ دلار در ماه |
| جامعهی کوچک، فدراسیون فعال | Medium-IP — ۴ vCPU، ۶ گیگابایت، ۲۰ دلار در ماه |
۴ گیگابایت کار میکند اما تنگ است؛ وقتی پستی محبوب که دنبالش میکنید هزاران پاسخ بگیرد صفهای Sidekiq انباشته میشوند. ۶ گیگابایت جای نفس کشیدن میدهد. محدودیت دیگر دیسک است — بخش رسانهها را در ادامه ببینید.
یک دامنه و یک IP اختصاصی هم لازم دارید: سرورهای دیگر روی پورت ۴۴۳ به سرور شما تحویل میدهند.
نصب با 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 مینویسد. یادداشتهای انتشار تگی را که انتخاب کردهاید بخوانید — مراحل گاهی بین نسخههای اصلی تغییر میکنند.
Mastodon یک قالب nginx در dist/nginx.conf دارد. آن را در /etc/nginx/sites-available/ کپی کنید، دامنه را جایگزین کنید و با certbot گواهی بگیرید. راهنماهای reverse proxy و دامنه هر دو را پوشش میدهند.
ایمیل: از رله استفاده کنید
Mastodon ایمیلهای تأیید و بازنشانی رمز میفرستد. پورتهای ۲۵ و ۴۶۵ روی سرورهای ما بستهاند، پس Mastodon را از طریق پورت ۵۸۷ به یک سرویسدهندهی بیرونی ایمیل تراکنشی وصل کنید:
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
آنها را در یک کرونجاب روزانه بگذارید. اگر سرورتان بزرگ شد، رسانهها را با تنظیمات S3_* در .env.production به فضای ذخیرهسازی شیء سازگار با S3 منتقل کنید — آنوقت دیسک VPS فقط پایگاه داده را نگه میدارد.
نگهداری
- بهروزرسانیها: تگ تازه را بگیرید،
docker compose pull، مهاجرتها را طبق یادداشتهای انتشار اجرا کنید، ریاستارت کنید. از نسخههای اصلی نپرید. - پشتیبانها: از PostgreSQL دامپ بگیرید و
.env.productionرا امن نگه دارید — بدون رازهای آن، بازیابی کار نمیکند. راهنمای restic کپیهای بیرون از سرور را پوشش میدهد و Managed Backups نقطههای بازیابی روزانه از کل سرور اضافه میکند. - دامنه دائمی است. در نشانی هر حساب در سراسر فدیورس حک شده. پیش از ساختن اولین حساب انتخابش کنید.
دنبال چیز سبکتری برای چت تیمی هستید؟ شاید یک سرور Matrix بهتر جور باشد.
نظرات
هنوز نظری نیست. اولین نفر باشید.