构图:身着北欧战术铠甲的 NordBastion 北极熊吉祥物站在一根发光的城镇广场柱基上,一簇小小的、亮着灯的灯笼形实例像联邦宇宙星座一样在四周环绕,极光色品红的联邦线在峡湾之夜里将它们彼此连接,乳齿象(mastodon)的轮廓平静地伏在吉祥物身旁
使用场景 · Mastodon 实例 · 2026 年更新

你自己的社区。
在你的司法管辖之下。默认联邦。

一个 Mastodon 实例是你自己维护的一座小小城镇广场。Ravelin($23.90/月)能为约 100 个活跃用户跑起 Docker Compose 技术栈——Mastodon 4.x + Postgres + Redis + Sidekiq——联邦到更广阔的 fediverse,defederation 的决定全由你来做。

简而言之
  • 01

    Ravelin $23.90/月 可以为约 100 个活跃用户舒适运行 Mastodon 4.x + Postgres + Redis + Sidekiq;Bulwark 适合 1000+ 用户。Garrison 适配个人实例的搭建。

  • 02

    KYC 注册把你的管理员身份排除在威胁模型之外。加密货币计费,没有任何卡留底把实例与法定姓名挂钩。

  • 03

    北欧司法管辖(没有 DMCA 式的自动下架),不限量上行链路能吸收一个健康联邦实例每天 100–300 GB 的外发流量。

为什么要折腾

究竟为什么要自托管这个实例。

对 95% 的用户来说,加入一个现有的 Mastodon 实例才是正确选择——挑一家运营良好的,发帖、关注、就这样。运营自己的实例则是另一个命题:你会成为一座小小城镇广场的管理员,加入者也就接受了你的审核决定和你的可用性。关键是主权,而不是规模。

自托管也是确保实例能在运营者之外继续存活的唯一办法。志愿者搭建的公益实例有一个半衰期——倦怠、经费断档、一位管理员的离开——而用户账户随实例域名而走。运营自己的实例意味着你的用户名、关注者和归档都锚定在你控制的域名和数据库上。

Docker Compose 部署让运维故事变得可处理:Mastodon 提供官方 compose 模板,Postgres 和 Redis 是大众化商品,Sidekiq 是一个你用仪表板就能读的队列。剩下的难点是邮件中继投递性能和审核——这两点我们会在下面明确点名,而不是一带而过。

正确的问题不是抽象地讨论「加入还是自托管」——而是「我希望在我自己拥有的城镇广场里发声,还是在别人拥有的广场里租一张桌子」。如果答案是前者,这一页接下来的内容就是配方。

规模选择

为这件事选对 NordBastion 档位。

对于一个最多约 100 个每日活跃发帖用户、对外联邦健康的社区实例,Ravelin($23.90/月,8 vCPU、16 GB、480 GB NVMe就是最佳点。八个核心在联邦突发下也能舒适覆盖 Sidekiq 工作池;16 GB 内存可以承载 Postgres 缓冲、Redis、Web 层和几个 Sidekiq 队列,永远不会触发 swap。

超过约 300 个活跃用户,或一旦 Sidekiq 处理任务数/秒 持续维持在 100 以上,Bulwark 档位就值回票价——更多核心用于 Sidekiq 并行、更多内存用于 Postgres 共享缓冲,以及在你的社区希望对联邦时间线做全文搜索时把若干核心专门交给 Elasticsearch 的自由。

对于单人或仅限亲密朋友的个人实例(不到约 10 个活跃账户、联邦面较窄),Garrison($11.90/月,4 vCPU、8 GB、240 GB NVMe)完全可行——尤其是更轻的 Pleroma/Akkoma 或 Sharkey。约束在于媒体存储增长而非 CPU;从第一天起就把媒体卸载到外部对象存储纳入预算。

这些方案都不是什么:一个带一方照片 CDN 的 Instagram 级实例。Mastodon 并未为此种工作负载设计;该协议擅长服务联邦化的中小型社区,我们的档位指引反映的就是这种真实形态。

搭建

从全新 VPS 到第一条联邦帖子。六个步骤,约九十分钟。

一份骨架式的速写——上游 joinmastodon.org 的管理员指南仍是环境变量和调优旋钮的标准参考。

  1. 01

    Docker + Compose

    官方 Docker 引擎 + Compose v2 插件。跳过发行版的旧软件包;上游仓库更接近当前版本。

    curl -fsSL get.docker.com \
      | sh
    apt install \
      docker-compose-plugin
  2. 02

    克隆 Mastodon

    仓库自带标准 docker-compose.yml。固定到最新的稳定 v4.x tag,而不是跟踪 main。

    git clone \
      https://github.com/mastodon/mastodon
    cd mastodon
    git checkout v4.3.0
  3. 03

    生成 .env.production

    安装向导会交互式地写入密钥、数据库凭证和 SMTP 配置块。在这里就挑好你的交易型邮件服务商——不要留到以后。

    docker compose run --rm \
      web bin/setup
    # 写入 .env.production
  4. 04

    通过 Caddy 或 nginx 提供 TLS

    Caddy 是阻力最小的选项——一行 Caddyfile,自动 Let's Encrypt。如果你更喜欢,nginx + certbot 仍然是经典路径。

    # Caddyfile
    social.example.org {
      reverse_proxy localhost:3000
    }
  5. 05

    启动整套技术栈

    Web 层、Sidekiq、Streaming、Postgres 和 Redis 一起起来。跟着日志看,第一次关注后几秒内联邦流量就会开始。

    docker compose up -d
    docker compose logs -f web sidekiq
  6. 06

    创建管理员

    通过 tootctl CLI 把第一个用户提升为管理员。管理界面随后会暴露注册模式(open / approval-required / invite-only)——把 approval-required 作为安全默认。

    docker compose exec web \
      bin/tootctl accounts modify \
      <username> --role Owner
为什么用这台主机做这件事

为什么特别选 NordBastion 来跑 Mastodon 实例。

无KYC

你的管理员姓名不属于实例的一部分。

Mastodon 管理员会收到审核举报、下架请求和偶尔的 GDPR 数据主体请求。其中大多数是例行公事;有些不是,威胁模型很重要。用邮箱 + 加密货币而非信用卡注册,就意味着从「social.example.org 的管理员」回溯到法定姓名时不存在发卡行那条纸面记录。实例只是一项由预付余额支付的托管服务——这就是存在的全部关系。

北欧司法管辖

Defederation 风波仍由你决定。

瑞典、芬兰、挪威和冰岛都没有 DMCA 式的「通知—保持下架」机器,能让一项外部指控就强制从你的实例上预先移除内容。主机商对「让他们撤下来」的回答是「在你的司法辖区里走法律程序」;对「我们不喜欢他们联邦的那个其他实例」的回答是「那是管理员的决定」。你的审核政策就是审核政策。

不限量 1 Gbps

联邦的喋喋不休不会额外计费。

一个有 100 名用户、向外联邦到更广阔 fediverse 的实例,每天会推送 100–300 GB 的 ActivityPub 投递——每一条本地帖子都向每一位远端关注者的家庭实例扇出。大多数超大规模厂商的账单都把这视为可计费出站;我们则把它视为身处互联网上的成本。任何档位都没有传输上限,账单上也没有超额项。

结论

在 Ravelin 上运行。用加密货币付款。第一天就选好你的交易型邮件服务商。

自托管一个 Mastodon 实例,是小型社区为自身延续性能做的最高杠杆的事情。用一个 SaaS 社交工具席位的价格,你就能拥有一座联邦化的城镇广场——其用户名比任何单一平台都长寿,其审核决定属于你,其数据存放在没有 DMCA 式自动下架的司法辖区。

NordBastion 对这件事真正关键的部分有自己的意见——免 KYC 的管理员注册、北欧司法管辖、不限量上行链路,以及如果你选择自托管出站邮件时的开放 25 端口——其余部分则刻意保持平淡。VPS 就是 VPS。Docker 就是 Docker。Mastodon 提供官方 compose 模板;我们提供机器,然后让开路。

邮件中继问题是要最先解决的。挑一家外部交易型服务商,在搭建时就在 .env.production 里配好,运维痛苦最大的单一来源就会在开始之前消失。

常见问题 · 在 VPS 上跑 Mastodon

最先冒出来的那些问题。

真实的 Mastodon 管理员在 docker compose up 之前会问的八个问题。邮件中继之所以排在第一,是有原因的。

运营一个 Mastodon 实例真正最难的部分是什么?

邮件投递性能。Mastodon 应用本身工程精良,Docker Compose 技术栈一个下午就能拼装好,Postgres 调优也是已知的科学。让人们的实例崩溃的部分是注册确认、密码重置和联邦审核通知发不到 Gmail / Outlook365 收件箱,因为从一个全新 VPS IP 出发的 SMTP 路径被视为「未证清白即有罪」。从第一天起就规划一家外部交易型邮件中继(Mailgun、Postmark、Amazon SES)——它每月花费 $10,能去掉 80% 的运维痛苦。

数据库实际上会长到多大?

Mastodon 的 Postgres 数据库大致按「本地用户发了什么」和「这里任何人在任何其他实例上关注过的每个账户的全部内容」的并集成比例增长。对于一个有 100 个活跃用户、健康向外联邦的实例,预计第一年后数据库 20–40 GB,三年后 80–150 GB。媒体(上传的图片/视频/转发)单独存储,是更大的存储问题——见下一个问题。

我能把媒体卸载到兼容 S3 的存储吗?

可以,而且应该。Mastodon 通过 S3_ENABLED 环境变量支持任何兼容 S3 API 的后端。NordBastion 目前不运营一方对象存储,所以务实的选择是一家外部服务商——对自托管实例的标准推荐是 Backblaze B2(价格可预测,前置 Cloudflare 时无出站费用)。卸载媒体后,Ravelin 的 480 GB NVMe 可以承载多年的 Postgres 和 Sidekiq 任务队列;不做卸载的话,在中等活跃实例上同样 480 GB 会在 12–18 个月内填满。

Ravelin 还是 Bulwark——什么时候我会超出 Ravelin?

Ravelin(8 vCPU、16 GB、480 GB)在每日约 100 个活跃发帖用户、向外联邦健康的情况下都很舒适。最先撑不住的瓶颈是入站联邦突发下的 Sidekiq 工作进程(一篇被 50k 用户实例转发的爆款帖子会带来一个想要更多工作进程、从而想要更多内存的瞬时队列尖峰)。在约 300 个活跃用户,或一旦 Sidekiq 处理任务数/秒 持续超过 100,Bulwark 档位就值回票价——更多核心、更多内存余量,以及自由腾出一个核心给 Elasticsearch 做搜索。

什么是 defederation,我该怎么处理?

Defederation 是指你的实例(或另一个实例)停止接受来自某个对等方的消息——实践中用来屏蔽托管违反你社区标准内容的实例。Mastodon 管理界面提供按实例的 suspend/silence/limit 开关;社会成本是真实的(你的用户会失去与被屏蔽实例上的人之间的对话线索),审核成本也是真实的(必须有人做决定)。运营自己实例的意义就在于——这个决定由你来做,基于你的社区标准,而不是某家公司的信任与安全流程。

实际审核工作量是多少?

对于一个用户数低于约 50、采用筛选注册(邀请制或管理员审批)的实例,每周的审核只需几分钟——关闭垃圾账号的举报,偶尔限制某个对等实例。对于开放注册的实例,工作量随注册量超线性扩张,因为垃圾机器人经济把每一个开放的 ActivityPub 端点都当作目标。标准防御是需审批注册 + 一道清晰的申请问题——能在对真实人类几乎无摩擦的情况下削减 99% 的自动注册。

北欧司法管辖对一个 Mastodon 管理员真的重要吗?

重要,原因具体而被低估:作为管理员,你会收到审核举报、下架请求和偶尔的 GDPR 数据主体请求。瑞典、芬兰、挪威和冰岛都有一套清晰的法律框架,规定主机商和小型论坛运营者在回应时分别需要承担什么——更关键的是,它们都没有美国 DMCA 那种「通知—保持下架」的机器,让单一指控就能强制预先下架。你仍要做审核;只是按你的方式做,而不是在主机商自动行动的威胁下做。

Mastodon vs Pleroma vs Akkoma vs Sharkey——对托管有影响吗?

从托管角度:Mastodon 最重(Ruby on Rails + Sidekiq + Postgres + Redis + 可选 Elasticsearch),Pleroma/Akkoma 更轻(Elixir,单个 OTP 发布),Sharkey/Misskey 家族跑在 Node + Postgres 之上。Ravelin 在约 100 个用户下都能舒适承载任何一个;Sentinel 可以为个人实例跑 Pleroma/Akkoma,而同一档位对 Mastodon 来说就不够了。要以社区契合度(哪些功能重要,你的人群偏爱哪种 UI)来选,而不是按资源曲线——在这一规模下差距很小。