Somincola Social
返回博客列表

在 Docker 部署的 Mastodon (4.5.0) 中修改嘟文字数限制

教你如何通过极简、安全、可维护的方式修改 Mastodon 字数上限,完全兼容 Mastodon 更新。无需修改前端,也无需重新编译前端资源。

更新于 2025年11月18日 Somincola Social
Mastodon Docker 教程 配置

Mastodon 默认限制嘟文最大为 500 字符
对于自建实例来说,你可能希望将字数扩展到:

  • 1500 字

  • 3000 字

  • 5000 字(本文示例)

  • 或任意你需要的值

然而,使用 Docker 部署的 Mastodon 无法直接修改容器内文件,官方镜像也没有暴露可配置项,因此必须采取覆盖代码的方式。

本教程将教你如何通过 极简、安全、可维护 的方式修改字数上限,并且完全兼容 Mastodon 更新。


🧱 原理说明

Mastodon 的发布长度限制由 后端 Rails 验证器决定:

app/validators/status_length_validator.rb

你只需要覆盖其中的:

MAX_CHARS = 500

即可改变嘟文的最大长度。

在最新版本中:

Mastodon 前端会自动从后端读取此限制,因此 无需修改任何前端代码

这使得整个流程非常简洁且稳定。


📂 最终效果示例(本教程以 5000 字为例)

  • 发布框显示最大 5000 字

  • 超过 5000 会提示字数错误

  • 官方更新不影响你的测设

  • 不需要重新编译前端(只有 Ruby 文件更改)


🛠️ 操作步骤(Docker 部署)

以下以 /opt/mastodon 为部署目录为例。


① 创建 overrides 目录(用于存放覆盖文件)

cd /opt/mastodon mkdir overrides

② 新建后端覆盖文件:status_length_validator.rb

路径:

/opt/mastodon/overrides/status_length_validator.rb

内容(参见:# status_length_validator.rb):

class StatusLengthValidator < ActiveModel::Validator

  # 修改为你想要的最大字数
  MAX_CHARS = 5000
  URL_PLACEHOLDER_CHARS = 23
  URL_PLACEHOLDER = 'x' * 23
  ....
end

这段代码将覆盖官方镜像中的对应文件。


③ 在部署目录创建 Dockerfile(用于覆盖后端文件)

文件路径:

/opt/mastodon/Dockerfile

内容:

FROM ghcr.io/mastodon/mastodon:latest

# 只覆盖后端验证文件(无需重编译前端)
COPY overrides/status_length_validator.rb /opt/mastodon/app/validators/status_length_validator.rb

这是最小、最稳定的方式。


④ 修改 docker-compose.override.yml 来使用自定义镜像

找到 web:sidekiq: 部分,将:

image: ghcr.io/mastodon/mastodon:latest

改为:

build: . 
image: mastodon-custom:latest

示例:

web:
  build: .
  image: mastodon-custom:latest  # (修改这一行)
  restart: always
  env_file: .env.production
  command: bundle exec puma -C config/puma.rb
  depends_on:
    - db
    - redis

sidekiq:
  build: .
  image: mastodon-custom:latest   # (修改这一行)
  restart: always
  env_file: .env.production
  command: bundle exec sidekiq
  depends_on:
    - db
    - redis

两个服务都需要使用同一镜像。


⑤ 构建并重启服务

/opt/mastodon 执行:

docker compose build docker compose down docker compose up -d

构建速度非常快,因为没有重新编译前端。


✅ 验证修改是否成功

进入你的 Mastodon 网页:

  1. 打开发嘟窗口

  2. 输入超过 500 字文本(例如 800/1500/3000)

  3. 输入框左下角会正确显示新的最大字数

  4. 发布成功(只要 ≤ 5000)

  5. 超过 5000 字会提示”Status too long: max 5000”

如果以上均正常,你的修改已生效。


🧩 常见问题(FAQ)

1. 前端需要修改吗?需要构建前端吗?

不需要。
最新的 Mastodon 会自动从后端读取字数限制,在界面中同步显示。


2. 更新 Mastodon 会覆盖这个修改吗?

不会。
因为:

  • 你使用了自定义 Dockerfile

  • 官方镜像更新后,你覆盖文件仍然会被 COPY 在最终镜像中

只要你的 overrides 文件夹不变,更新也不会影响。


3. 我能设置成无限字数吗?

不建议。
建议设置合理范围:

  • 1500:适合轻松长文

  • 3000:社区常见值

  • 5000:较长但不失控

  • 10000:可能影响数据库存储与 UI 行为


4. Sidekiq 必须使用同一镜像吗?

是的。
因为 Sidekiq 也需要验证字数(例如处理后台发布或重写嘟文)。


🎉 总结

使用 Docker 部署的 Mastodon 修改字数上限,只需要:

  1. 新建覆盖目录

  2. 放入修改后的 Ruby 验证文件

  3. 用 Dockerfile 覆盖该文件

  4. 在 docker-compose.override.yml 指向自定义镜像

  5. 构建 + 重启

无需修改前端,也无需重新编译前端资源。

这是目前最稳定的做法。