−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS

Mastodon 专用 VPS:运行你自己的小型实例

在 VPS 上托管一个小型 Mastodon 实例:诚实地估算内存和磁盘、用 Docker 部署、通过 SMTP 中继发邮件,并定期清理媒体防止磁盘被塞满。

拥有自己的社交账号听起来很美好,直到你意识到这个账号住在别人的服务器上,受别人的规则和在线时间摆布。自己的 Mastodon 实例解决了这个问题:你的账号是 @you@your-domain,除了你没人能关掉它。代价是,Mastodon 可不是个小应用。最好事先知道自己要面对什么。

适合谁

再大的话,你运营的就是一项需要承担审核职责、处理举报、配备正经基础设施的服务了。那是另一回事。

真正需要什么

Mastodon 会同时运行好几个进程:Rails Web 应用、后台的 Sidekiq 工作进程、一个流式服务器、PostgreSQL 和 Redis。由于联邦机制,哪怕你在睡觉,服务器也在不断从其他服务器拉取帖子和媒体。

实例套餐
单用户,关注不多Small-IP — 2 vCPU、4 GB、每月 $16
小社区,联邦活跃Medium-IP — 4 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 磁盘上就只剩数据库了。

日常维护

想找个更轻量的团队聊天方案?Matrix 服务器可能更合适。

准备好部署了?加密货币付款、无需KYC——约一分钟上线。

立即部署 →

常见问题

一个 Mastodon 实例需要多少内存?

单用户或小型实例,4 GB 是现实的下限,6 GB 比较宽裕。Mastodon 会同时运行 Web 进程、Sidekiq 工作进程、PostgreSQL 和 Redis,而且就算没人发帖,联邦也会让 Sidekiq 一直忙着。

为什么 Mastodon 需要独立 IP?

其他服务器通过 443 端口的 HTTPS 把帖子投递到你的服务器,别人也在浏览器里打开你的实例。这需要你自己的 IP 能接收 443 端口的入站流量,而 NAT 套餐做不到。

Mastodon 怎么发邮件?

通过外部的事务邮件服务商,用 587 端口的 SMTP 发送。我们的服务器关闭了 25 和 465 端口,何况用中继的送达率本来就比全新 IP 高得多。

为什么我的磁盘满得这么快?

你的服务器会缓存它见到的每个账号的媒体。定期运行 'tootctl media remove --days 7',或者把媒体迁到 S3 兼容的对象存储。

以后能换域名吗?

不能。域名是整个联邦宇宙里每个账号身份的一部分。创建第一个账号前请慎重选择。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。