擁有自己的社交帳號聽起來很美好,直到您意識到這個帳號住在別人的伺服器上,受別人的規則和線上時間擺佈。自己的 Mastodon 執行個體解決了這個問題:您的帳號是 @you@your-domain,除了您沒人能關掉它。代價是,Mastodon 可不是個小應用。最好事先知道自己要面對什麼。
適合誰
- 給您自己或公司官方帳號用的單使用者執行個體。
- 朋友圈或專案團隊的小社群——幾十人,不是幾千人。
再大的話,您營運的就是一項需要承擔審核職責、處理舉報、配備正經基礎設施的服務了。那是另一回事。
真正需要什麼
Mastodon 會同時執行好幾個程式:Rails Web 應用、後台的 Sidekiq 工作程式、一個流式伺服器、PostgreSQL 和 Redis。由於聯邦機制,哪怕您在睡覺,伺服器也在不斷從其他伺服器拉取帖子和媒體。
| 執行個體 | 方案 |
|---|---|
| 單使用者,關注不多 | Small-IP — 4 vCPU、4 GB、每月 $16 |
| 小社群,聯邦活躍 | Medium-IP — 6 vCPU、6 GB、每月 $20 |
4 GB 能跑但很緊;您關注的某條熱帖收到幾千條回覆時,Sidekiq 佇列就會積壓。6 GB 才留得出喘息的空間。另一個限制是磁碟——見下面的媒體部分。
您還需要一個網域和一個獨立 IP:其他伺服器透過 443 埠向您投遞。
用 Docker 部署
官方儲存庫自備 docker-compose.yml。在一台裝好了 Docker 的全新 Ubuntu 24.04 伺服器上:
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 在 dist/nginx.conf 裡自備了 nginx 模板。把它複製到 /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 發出的郵件很容易進垃圾箱;中繼有您還沒有的信譽。
媒體:磁碟吞噬者
您的伺服器見到的帳號,其每張圖片、每段影片都會快取在本機。活躍的執行個體每週就是好幾 GB。定期清理舊的遠端媒體:
docker compose exec web tootctl media remove --days 7
docker compose exec web tootctl preview_cards remove --days 30
把它們放進每天執行的 cron 任務裡。執行個體變大後,用 .env.production 裡的 S3_* 設定把媒體遷到 S3 相容的物件儲存——這樣 VPS 磁碟上就只剩資料庫了。
日常維護
- 更新: 拉取新標籤,
docker compose pull,按發布說明執行遷移,然後重新啟動。不要跳過大版本。 - 備份: 轉儲 PostgreSQL,並妥善儲存
.env.production——少了裡面的金鑰,恢復就不會成功。我們的 restic 指南講了異地副本,Managed Backups 則能加上整台伺服器的每日還原點。 - 網域定了就不能改。 它寫死在整個聯邦宇宙裡每個帳號的位址中。在建立第一個帳號前選好。
想找個更輕量的團隊聊天方案?Matrix 伺服器可能更合適。
評論
目前還沒有評論。歡迎成為第一位。