Mastodon
  • 什么是 Mastodon?
  • 使用 Mastodon
    • 注册帐户
    • 设置你的个人资料
    • 在你的账户发布内容
    • 使用网络功能
    • 处理不想看到的内容
    • 推广你和他人
    • 进行偏好设置
    • 更多设置
    • 在站点外使用 Mastodon
    • 迁移或离开账户
    • 运行你自己的站点
  • 运营 Mastodon
    • 准备你的服务器
    • 从源代码安装
    • 配置你的环境
    • 安装可选功能
      • 对象存储
      • 洋葱服务
      • 验证码
      • 单点登录
    • 配置全文搜索
    • 设置你的新实例
    • 使用管理 CLI
    • 升级到新版本
    • 备份你的服务器
    • 迁移到新机器
    • 扩大你的站点规模
    • 审核操作
    • 故障排除
      • 数据库索引损坏
    • 用户组
  • 开发 Mastodon 应用
    • API 入门指南
    • 使用公开数据
    • 获取客户端应用访问权限
    • 使用帐户登录
    • 库与实现
  • 向 Mastodon 项目做贡献
    • 技术概览
    • 设置开发环境
    • 代码结构
    • 路由
    • 漏洞赏金与责任披露
  • 遵循的标准
    • ActivityPub
    • WebFinger
    • 安全性
    • Microformats
    • OAuth
    • Bearcaps
  • REST API
    • Datetime 格式
    • 指南与最佳实践
    • OAuth 令牌
    • OAuth 作用域
    • 速率限制
  • API 方法
    • apps
      • oauth
      • emails
    • accounts
      • bookmarks
      • favourites
      • mutes
      • blocks
      • domain_blocks
      • filters
      • reports
      • follow_requests
      • endorsements
      • featured_tags
      • preferences
      • followed_tags
      • suggestions
      • tags
    • profile
    • statuses
      • media
      • polls
      • scheduled_statuses
    • timelines
      • conversations
      • lists
      • markers
      • streaming
    • grouped notifications
    • notifications
      • push
    • search
    • instance
      • trends
      • directory
      • custom_emojis
      • announcements
    • admin
      • accounts
      • canonical_email_blocks
      • dimensions
      • domain_allows
      • domain_blocks
      • email_domain_blocks
      • ip_blocks
      • measures
      • reports
      • retention
      • trends
    • proofs
    • oembed
  • API 实体
    • Account
    • AccountWarning
    • Admin::Account
    • Admin::CanonicalEmailBlock
    • Admin::Cohort
    • Admin::Dimension
    • Admin::DomainAllow
    • Admin::DomainBlock
    • Admin::EmailDomainBlock
    • Admin::Ip
    • Admin::IpBlock
    • Admin::Measure
    • Admin::Report
    • Announcement
    • Appeal
    • Application
    • Context
    • Conversation
    • CustomEmoji
    • DomainBlock
    • Error
    • ExtendedDescription
    • FamiliarFollowers
    • FeaturedTag
    • Filter
    • FilterKeyword
    • FilterResult
    • FilterStatus
    • IdentityProof
    • Instance
    • List
    • Marker
    • MediaAttachment
    • Notification
    • NotificationPolicy
    • NotificationRequest
    • Poll
    • Preferences
    • PreviewCard
    • PreviewCardAuthor
    • PrivacyPolicy
    • Reaction
    • Relationship
    • RelationshipSeveranceEvent
    • Report
    • Role
    • Rule
    • ScheduledStatus
    • Search
    • Status
    • StatusEdit
    • StatusSource
    • Suggestion
    • Tag
    • TermsOfService
    • Token
    • Translation
    • V1::Filter
    • V1::Instance
    • V1::NotificationPolicy
    • WebPushSubscription

配置你的环境

为你的 Mastodon 服务器设置环境变量。

    • 基础配置
      • 联合与显示
      • 密钥
      • 部署
      • 扩展选项
    • 后端配置
      • PostgreSQL
      • PostgreSQL (只读副本)
      • Redis
      • Elasticsearch
      • SMTP 电子邮件发件
      • 基础配置
      • SMTP服务器的身份验证
      • 安全 SMTP
      • Prometheus指标
      • OpenTelemetry
    • 文件存储
      • CDN
      • 本地文件存储
      • AWS S3和兼容服务
      • Swift
      • HTTP 缓存清除器
    • 外部认证
      • OmniAuth
      • LDAP
      • PAM
      • CAS
      • SAML
    • 隐藏服务
      • TOR
    • 限制
      • 反垃圾信息/滥用
      • 电子邮件域名
      • 会话
      • 主页提要
    • 其他
      • 数据库迁移
      • 数据库加密支持
      • StatsD(在4.3.0中移除)
      • 未分类或未排序

Mastodon 使用环境变量作为配置方式。

为方便起见,它可以从 Mastodon 目录中的 .env.production 纯文本文件(该文件也被称为 “dotenv” 文件)中读取这些变量,但它们始终可以被特定进程覆盖。例如,systemd 服务文件可以从 EnvironmentFile 或带有 Environment 的配置文件内联定义中读取环境变量,因此你可以为特定服务设置不同的配置参数。也可以在通过命令行调用 Mastodon 时指定它们。

基础配置

联合与显示

LOCAL_DOMAIN

这是你的站点在网络中的唯一标识符。之后无法安全更改,因为更改它将导致外站服务器将你现有的账户与全新的账户混淆。它必须是你服务器实际对应的域名(不包括协议部分,例如只是example.com)。

WEB_DOMAIN

WEB_DOMAIN 是一个可选环境变量,允许在一个域名上配置 Mastodon,同时让用户的标识保持在不同的域上,例如将用户地址配置为 @alice@example.com,但在 mastodon.example.com 上访问 Mastodon。如果你的域名已经用于不同的网站,但你仍然希望将其用作 Mastodon 标识符,因为它看起来更好或更短,这个配置可能会很有用。

与 LOCAL_DOMAIN 一样,一旦设置,WEB_DOMAIN 就无法安全更改,因为这会使知道你以前设置的外站服务器感到困惑,并可能破坏与它们的通信或使其变得不可靠。由于问题在于外站服务器对你的账户的理解,从头重新安装 Mastodon 也无法解决这个问题。因此,在设置 LOCAL_DOMAIN 和 WEB_DOMAIN 时请格外小心。

要在 mastodon.example.com 上安装 Mastodon,并使其为 @alice@example.com 这样的域名下的账户提供服务,请将 LOCAL_DOMAIN 设为 example.com,将 WEB_DOMAIN 设置为 mastodon.example.com。你还需要在托管 example.com 的服务器上进行额外配置,以将来自 https://example.com/.well-known/webfinger 的请求重定向到 https://mastodon.example.com/.well-known/webfinger。例如,使用 nginx 时,配置可能如下所示:

location /.well-known/webfinger {
  add_header Access-Control-Allow-Origin '*';
  return 301 https://mastodon.example.com$request_uri;
}
进行服务重定向时必须添加 CORS 标头;否则,Mastodon 网页界面的某些功能将无法工作。例如可以添加如下 CORS 标头:Access-Control-Allow-Origin: *

ALTERNATE_DOMAINS

如果你有多个指向你的 Mastodon 服务器的域名,此设置将允许 Mastodon 在使用这些其他域名寻址用户时识别自己。域名之间用逗号分隔,例如foo.com,bar.com

ALLOWED_PRIVATE_ADDRESSES

私有IP地址/子网列表,以逗号分隔,允许在出站HTTP请求中使用。Mastodon 阻止来自私有IP地址范围(如 127.0.0.1 或 192.168.1.1/16)的主机的HTTP请求,以防止服务器端请求伪造。此设置将从阻止列表中移除指定的IP地址/子网。

AUTHORIZED_FETCH

也称为"安全模式"。设置为true时,会发生以下变化:

  • Mastodon 将停止为公开嘟文生成链接数据签名,这可以防止它们在没有精确控制的情况下被高效地重新分发。由于带有签名的链接数据对象是完全自包含的,它可以在不向来源服务器发出额外请求的情况下传递。
  • Mastodon 将要求对公开嘟文和账户的 ActivityPub 表示的请求进行HTTP签名认证,这些数据通常在没有任何认证的情况下可用。当没有提供认证时,个人资料将只返回基本的技术信息。
  • 在 4.0.0 版本之前:Mastodon 将要求任何 REST/streaming API 访问携带用户上下文(即已通过具有活跃用户的 OAuth 授权界面授权),而通常情况下一些 API 端点无需任何认证即可使用。

因此,通过以上认证机制并避免不将你的服务器纳入循环的重新分发的情况出现,你可以强制谁可以和谁不可以检索你服务器上的公开内容,例如你已阻止域的服务器。

不幸的是,安全模式并非没有缺点,这就是它不默认启用的原因。联邦宇宙中,并非所有软件都能完全支持它,尤其是启用之后,与 3.0 之前版本的 Mastodon 服务器的某些功能将被破坏;由于链接数据签名被用于使公开对话的上下文更完整,因此即使在与最新版本的服务器联合时,也会失去一些有用的功能;另外,由于该模式下的公开内容上的认证机制意味着无法缓存,它会带来计算成本的增加。
安全模式不会隐藏公开嘟文和账户的HTML表示。与 ActivityPub 的第一方表示或 REST API 相比,HTML 是一种更具有损失性的格式,但它仍然是抓取内容的潜在途径。

LIMITED_FEDERATION_MODE

设置为 true 时,Mastodon 将联合范围限制在你手动批准的站点之内,并禁用所有公共页面和某些 REST API。有限联合模式基于安全模式(AUTHORIZED_FETCH)。

当将现有实例切换到有限联合模式时,应使用以下命令删除允许的域名之外的实例上已存在的任何数据:

tootctl domain purge --limited-federation-mode
此模式仅供私人使用,例如在学术机构或内部公司网络中,因为它实际上创建了一个数据孤岛,这与 Mastodon 的去中心化使命相悖。
在 3.1.5 版本之前,此设置称为WHITELIST_MODE。

DISALLOW_UNAUTHENTICATED_API_ACCESS

从 Mastodon v4.0.0 开始,Web 应用将负责渲染所有请求,包括未登录状态下的请求。为了使相关应用视图工作, Web 应用会公开发出 API 请求以获取账户和嘟文。如果你想禁止这一点,请将此变量设置为true。请注意,禁止未经认证的 API 访问将导致账户和嘟文的永久链接对未登录用户返回错误,使得本地登录或通过ActivityPub获取内容称为查看内容的唯二方式。

SINGLE_USER_MODE

若配置为true,你的 Mastodon 服务器的首页将始终重定向到数据库中的第一个账户,且注册将被禁用。

DISABLE_AUTOMATIC_SWITCHING_TO_APPROVED_REGISTRATIONS

为了防止被遗弃的 Mastodon 服务器被用于垃圾信息、骚扰和其他恶意活动,如果服务器开放新用户注册,且一周内没有检测到任何可访问审核举报的用户的活动(包括通过 APP 的非审核活动),Mastodon 将自动切换到需要管理员批准新用户注册的模式。发生这种情况时,拥有更改服务器设置权限的用户将收到电子邮件通知。

设置 DISABLE_AUTOMATIC_SWITCHING_TO_APPROVED_REGISTRATIONS=true 可禁用此行为。

版本历史:
4.2.8 - 该配置被添加

DEFAULT_LOCALE

默认情况下,Mastodon 会自动从浏览器标头中检测访问者的语言,并以该语言 (如果支持) 显示 Mastodon 界面。如果你正在运行特定语言或区域的服务器,这种行为可能会误导不会说你的语言的访客在你的服务器注册。因此,你可能希望将此变量设置为特定语言。

示例值:de

支持的语言:

  • ar
  • ast
  • bg
  • bn
  • br
  • ca
  • co
  • cs
  • cy
  • da
  • de
  • el
  • en
  • eo
  • es
  • es-AR
  • et
  • eu
  • fa
  • fi
  • fr
  • ga
  • gl
  • he
  • hi
  • hr
  • hu
  • hy
  • id
  • io
  • is
  • it
  • ja
  • ka
  • kab
  • kk
  • kn
  • ko
  • lt
  • lv
  • mk
  • ml
  • mr
  • ms
  • nl
  • nn
  • no
  • oc
  • pl
  • pt-BR
  • pt-PT
  • ro
  • ru
  • sk
  • sl
  • sq
  • sr
  • sr-Latn
  • sv
  • ta
  • te
  • th
  • tr
  • uk
  • ur
  • vi
  • zh-CN
  • zh-HK
  • zh-TW

密钥

SECRET_KEY_BASE

使用 rake secret 生成。更改将破坏所有活跃的浏览器会话。

OTP_SECRET

使用 rake secret 生成。更改将破坏双因素认证。

VAPID_PRIVATE_KEY

使用 rake mastodon:webpush:generate_vapid_key 生成。更改将破坏推送通知。

VAPID_PUBLIC_KEY

使用 rake mastodon:webpush:generate_vapid_key 生成。更改将破坏推送通知。

部署

RAILS_ENV

环境。可以是 production、 development 或 test。如果你出于开发目的在个人计算机上运行 Mastodon,请使用 development。这也是默认值。如果你在线运行 Mastodon,请使用 production。Mastodon 将根据环境加载不同的配置默认值。

该变量不能在 dotenv(.env) 文件中定义,因为它在该文件被加载之前就已使用。

RAILS_SERVE_STATIC_FILES

若配置为 true, Mastodon 将响应对 public 目录中文件的请求。当反向代理(例如 nginx)无法访问 public 目录本身的文件系统时,这可能是必要的,例如在容器化环境中。这是一种次优配置,因为直接从文件系统提供静态文件总是比通过 Ruby on Rails 进程提供它们要快得多。

RAILS_LOG_LEVEL

确定 Mastodon 为 Web 和 Sidekiq 进程生成的日志量。默认为 info,这会为 Mastodon 服务的每个请求和 Mastodon 处理的每个后台作业生成日志条目。这可能很有用,但如果有大量流量/活动,可能会变得非常嘈杂并给你的机器的 I/O 带来压力。在这种情况下,建议使用 warn,它只会输出关于出错的信息,否则保持安静。可能的值是 debug、info、warn、error、fatal 和 unknown。

LOG_LEVEL

确定 Mastodon 为流进程生成的日志量。默认为 info。其它可能的值有 silly 和 info。

TRUSTED_PROXY_IP

告诉 Mastodon Web 进程和流进程哪些 IP 充当你的可信反向代理(例如nginx、Cloudflare)。它影响 Mastodon 如何确定每个请求的源 IP,这用于重要的速率限制和安全功能。如果该值设置不正确,那么 Mastodon 可能会使用反向代理的 IP 而不是实际源 IP。

默认情况下,环回和私有网络地址范围是可信的。具体来说:

  • 127.0.0.1/8
  • ::1/128
  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16
  • fc00::/7

如果你使用单个反向代理,并且它与你的 Mastodon Web 进程和流进程在同一台机器上运行,或位于同一个私有网络中,那么你很可能不需要修改此设置,可以使用默认设置。如果你使用多个反向代理服务器,并且它们都与你的 Mastodon Web 进程和流进程位于同一个私有网络中,那么理论上同样保持默认设置就可以了。但是,如果你使用的反向代理服务器通过公共IP地址到达你的 Mastodon Web 服务端和流服务端(例如,如果你使用 Cloudflare 或类似代理),那么你需要设置此变量。它应该是所有可能使用的反向代理的IP,以逗号分隔的IP列表或使用CIDR表示法表示的 IP 范围。请注意,当设置此变量时,默认范围(上面提到的)将不再被信任,因此如果你同时拥有外部反向代理和来自 localhost 的代理,则必须同时包含两者的IP(或IP范围)。

管理员和协管员可以进入设置 > 审核 > 账户选项卡来找到 Mastodon 看到的每个用户的源 IP。你可以使用像IPInfo这样的工具来判断 IP 是由最终用户 ISP 使用还是由托管你的代理的服务器使用。

SOCKET

除了绑定到 127.0.0.1 这样的 IP 地址之外,你还可以使用 Unix 套接字。此变量是特定于进程的,你可以根据需要为每个进程使用不同的值,它适用于 Web(Puma) 进程和流式 API(Node.js) 进程。

该变量不能在 dotenv(.env) 文件中定义,因为它在该文件被加载之前就已使用。

PORT

在不使用 Unix 套接字时,这将指定进程将监听的端口。此变量是特定于进程的,你可以根据需要为每个进程使用不同的值,它适用于 Web(Puma) 进程和流式 API(Node.js) 进程。默认情况下,Web 进程监听3000,流式 API 进程监听4000。

该变量不能在 dotenv(.env) 文件中定义,因为它在该文件被加载之前就已使用。

NODE_ENV

相当于 RAILS_ENV,但用于流式 API(Node.js) 服务端。

该变量不能在 dotenv(.env) 文件中定义,因为它在该文件被加载之前就已使用。

BIND

在不使用 Unix 套接字时,这将指定进程绑定到的 IP。只要它们监听不同的端口,多个进程就可以绑定到同一个IP。默认为 127.0.0.1。

该变量不能在 dotenv(.env) 文件中定义,因为它在该文件被加载之前就已使用。

MASTODON_USE_LIBVIPS

默认情况下, Mastodon 使用 ImageMagick 处理嘟文中的图像。作为替代方案,可以使用 libvips 8.13+,它具有更好的性能和更低的资源使用率。

从源代码安装 Mastodon 时,默认为 false,设置为 true 以启用。

部署 Mastodon 容器镜像时,这个值被硬编码为 true,不应被覆盖。

版本历史:
4.3.0 - 该配置被添加

扩展选项

扩大你的站点规模

SIDEKIQ_CONCURRENCY

在 4.1 版本中添加。特定于 Sidekiq,此变量确定 Sidekiq 派生多少个不同的进程。默认为 5。

WEB_CONCURRENCY

特定于 Puma,此变量确定 Puma 派生多少个不同的进程。默认为 2。

MAX_THREADS

特定于 Puma,此变量确定每个 Puma 进程维护的线程数。默认为 5。

PERSISTENT_TIMEOUT

特定于 Puma,此变量确定 Puma 在关闭连接之前应等待多长时间。默认为 20。

PREPARED_STATEMENTS

默认情况下, Mastodon 使用 PostgreSQL 的预备语句功能,它提供一些性能优势。如果你使用在不同事务间共享连接的连接池,则此功能不可用,因此必须设置为 false。当你扩展服务规模时,基于事务的连接池带来的优势将超过预备语句带来的优势。

STREAMING_API_BASE_URL

流式 API 可以部署到不同的域/子域。这可能会提高流式 API 的性能,因为在默认配置中,长寿命的流式 API 请求通过 nginx 代理,而从不同的域/子域提供流式 API 将允许完全跳过 nginx。

示例值:wss://streaming.example.com

STREAMING_CLUSTER_NUM 已移除

已移除:
流服务器进程现在仅使用单个 node.js 进程,要进一步扩展它,你需要按照扩展指南中的文档进行操作

特定于流式 API,此变量确定流式 API 派生多少个不同的进程。默认为 CPU 核心数减一。

后端配置

PostgreSQL

DB_HOST

默认为 localhost。

DB_USER

默认为 mastodon。

DB_NAME

默认为 mastodon_production。

DB_PASS

无默认值。

DB_PORT

默认为 5432。

DB_POOL

定义进程中池化的数据库连接数。此值应涵盖进程中的每个线程,因此,它默认为 MAX_THREADS 的值。

DB_SSLMODE

PostgreSQL SSL模式。默认为prefer。

DATABASE_URL

若提供,则优先于 DB_HOST、 DB_USER、 DB_NAME、 DB_PASS 和 DB_PORT。

示例值:postgresql://user:password@localhost:5432

QUERY_LOG_TAGS_ENABLED

若配置为 true,则 ActiveRecord 将在每个 SQL 语句的末尾插入注释,这可以帮助分析应用程序的性能。

注释使用 SqlCommenter 格式,包含以下属性:

  • namespaced_controller:生成此 SQL 语句的 HTTP 请求的控制器的完整名称
  • action:生成此 SQL 语句的 HTTP 请求的操作名称
  • sidekiq_job_class:生成此 SQL 语句的 Sidekiq 作业的类名
启用此选项将禁用预备语句

默认为 false。

版本历史:
4.4.0 - 该配置被添加

PostgreSQL (只读副本)

如果你想使用只读数据库副本,你可以在此页面获取更多详细信息

REPLICA_DB_HOST

无默认值。

REPLICA_DB_PORT

无默认值。

REPLICA_DB_NAME

无默认值。

REPLICA_DB_USER

无默认值。

REPLICA_DB_PASS

无默认值。

REPLICA_DATABASE_URL

若提供,则优先于 REPLICA_DB_HOST、 REPLICA_DB_PORT、 REPLICA_DB_NAME、 REPLICA_DB_USER 和 REPLICA_DB_PASS。

无默认值。

Redis

Mastodon以三种不同的方式使用Redis:

  • Web 应用本身使用 Redis 存储数据并与流服务器通信。
  • Redis 被用作 Rails 内置缓存功能的缓存后端。
  • Sidekiq,负责处理后台作业的进程,在 Redis 中存储作业数据。

你可以将单个 Redis 实例用于所有三种用例。只需使用下面提到的合适的 REDIS_* 变量即可。但你也可以通过使用带有 CACHE_ 和 SIDEKIQ_ 前缀的变量来使用两个甚至三个不同的 Redis 实例。

建议为易失性缓存使用单独的 Redis 服务器。如果你的单个 Redis 服务器负载超过可承受范围,你可能希望这样做。

REDIS_HOST

默认为 localhost。

REDIS_PORT

默认为 6379。

REDIS_USER

可选。用于连接 Redis 的用户名。

版本历史:
4.3.0 - 该配置被添加

REDIS_PASSWORD

可选。用于连接 Redis 的密码。

REDIS_URL

若提供,则优先于 REDIS_HOST、 REDIS_PORT、 REDIS_USER、 REDIS_PASSWORD 和 Sentinel 设置。

示例值: redis://user:password@localhost:6379

如果你需要使用 TLS 连接到 Redis 服务器,你必须使用带有协议头 rediss:// 的 REDIS_URL,并按照下面的描述设置 REDIS_DRIVER。

REDIS_DRIVER

若提供, Redis 连接的驱动将从使用 Mastodon 默认的 hiredis 驱动更改为标准 Ruby 驱动。使用 Ruby 驱动是使用 TLS 连接到 Redis 所必需的。请注意,在某些环境中,使用 Ruby 驱动可能会影响 Redis 性能。

默认为 hiredis,可接受的值是 hiredis 或 ruby。

版本历史:
4.3.0 - 该配置被添加

REDIS_NAMESPACE

如果提供,将为所有Redis键添加命名空间前缀。这允许在不同项目或Mastodon服务器之间共享同一个Redis数据库。

此选项已弃用。 Sidekiq 7 移除了对命名空间的支持,未来版本的 Mastodon 也会这样做。到那时,我们会尝试提供一个明确的迁移路径。如果你正在设置新的实例,强烈不建议使用此选项。

版本历史:
4.3.0 - 该配置被弃用

REDIS_SENTINELS

Redis Sentinel 实例 HOST:PORT 列表。端口号是可选的,如果省略,它将使用 REDIS_SENTINEL_PORT 中给出的值或默认值 26379。

请注意,如果你想使用 Redis Sentinel,你还需要指定 REDIS_SENTINEL_MASTER。

版本历史:
4.3.0 - 该配置被添加

REDIS_SENTINEL_MASTER

要连接的 Redis Sentinel 主节点的名称。

请注意,如果你想使用 Redis Sentinel,你还需要指定 REDIS_SENTINELS。

版本历史:
4.3.0 - 该配置被添加

REDIS_SENTINEL_PORT

REDIS_SENTINELS 中给出的 Sentinel 的默认端口。

版本历史:
4.3.0 - 该配置被添加

REDIS_SENTINEL_USERNAME

用于向 Sentinel 进行身份验证的用户名。

版本历史:
4.3.0 - 该配置被添加

REDIS_SENTINEL_PASSWORD

用于向 Sentinel 进行身份验证的密码。

版本历史:
4.3.0 - 该配置被添加

CACHE_REDIS_HOST

默认为 REDIS_HOST 的值。

CACHE_REDIS_PORT

默认为 REDIS_PORT 的值。

CACHE_REDIS_USER

可选。用于连接Redis的用户名。

版本历史:
4.3.0 - 该配置被添加

CACHE_REDIS_PASSWORD

可选。用于连接 Redis 的密码。

CACHE_REDIS_URL

如果提供,优先于 CACHE_REDIS_HOST 和 CACHE_REDIS_PORT。默认为 REDIS_URL 的值。

CACHE_REDIS_NAMESPACE

默认为 REDIS_NAMESPACE 的值。

CACHE_REDIS_SENTINELS

逗号分隔的 Redis Sentinel 实例 HOST:PORT 列表。端口号是可选的,如果省略,它将使用默认值 26379。

请注意,如果你想使用 Redis Sentinel,你还需要指定 CACHE_REDIS_SENTINEL_MASTER。

版本历史:
4.3.0 - 该配置被添加

CACHE_REDIS_SENTINEL_MASTER

要连接的 Redis Sentinel 主节点的名称。

请注意,如果你想使用 Redis Sentinel,你还需要指定 CACHE_REDIS_SENTINELS。

版本历史:
4.3.0 - 该配置被添加

CACHE_REDIS_SENTINEL_PORT

CACHE_REDIS_SENTINELS 中给出的 Sentinel 的默认端口。

版本历史:
4.3.0 - 该配置被添加

CACHE_REDIS_SENTINEL_USERNAME

用于向 Sentinel 进行身份验证的用户名。

版本历史:
4.3.0 - 该配置被添加

CACHE_REDIS_SENTINEL_PASSWORD

用于向 Sentinel 进行身份验证的密码。

版本历史:
4.3.0 - 该配置被添加

SIDEKIQ_REDIS_HOST

默认为 REDIS_HOST 的值。

SIDEKIQ_REDIS_PORT

默认为 REDIS_PORT 的值。

SIDEKIQ_REDIS_USER

可选。用于连接 Redis 的用户名。

版本历史:
4.3.0 - 该配置被添加

SIDEKIQ_REDIS_PASSWORD

可选。用于连接 Redis 的密码。

SIDEKIQ_REDIS_URL

如果提供,优先于 SIDEKIQ_REDIS_HOST 和 SIDEKIQ_REDIS_PORT。默认为 REDIS_URL 的值。

SIDEKIQ_REDIS_NAMESPACE

默认为 REDIS_NAMESPACE 的值。

SIDEKIQ_REDIS_SENTINELS

逗号分隔的 Redis Sentinel 实例 HOST:PORT 列表。端口号是可选的,如果省略,它将使用默认值 26379。

请注意,如果你想使用Redis Sentinel,你还需要指定SIDEKIQ_REDIS_SENTINEL_MASTER。

版本历史:
4.3.0 - 该配置被添加

SIDEKIQ_REDIS_SENTINEL_MASTER

要连接的 Redis Sentinel 主节点的名称。

请注意,如果你想使用 Redis Sentinel,你还需要指定 SIDEKIQ_REDIS_SENTINELS。

版本历史:
4.3.0 - 该配置被添加

SIDEKIQ_REDIS_SENTINEL_PORT

SIDEKIQ_REDIS_SENTINELS 中给出的 Sentinel 的默认端口。

版本历史:
4.3.0 - 该配置被添加

SIDEKIQ_REDIS_SENTINEL_USERNAME

用于向 Sentinel 进行身份验证的用户名。

版本历史:
4.3.0 - 该配置被添加

SIDEKIQ_REDIS_SENTINEL_PASSWORD

用于向 Sentinel 进行身份验证的密码。

版本历史:
4.3.0 - 该配置被添加

Elasticsearch

配置全文搜索

ES_ENABLED

若配置为 true,Mastodon 将使用 Elasticsearch 执行搜索功能。

ES_PRESET

该变量控制 Elasticsearch 索引配置(分片数量和副本)。

可能的值是:

  • single_node_cluster(默认)
  • small_cluster
  • large_cluster

有关每个设置的详细信息,请查看Elasticsearch设置页面。

ES_HOST

Elasticsearch 服务器的主机名。默认为 localhost。如果使用 TLS,请在主机名前加上 https://。例如:https://elastic.example.com。

ES_PORT

Elasticsearch 服务器的端口。默认为 9200

ES_USER

可选,用于向 Elasticsearch 进行身份验证

ES_PASS

可选,用于向 Elasticsearch 进行身份验证

ES_PREFIX

如果Elasticsearch服务器在多个项目或不同的Mastodon服务器之间共享,则很有用。默认为REDIS_NAMESPACE的值。

ES_CA_FILE

覆盖要使用的 CA 捆绑文件。在使用自签名证书时很有用。

版本历史:
4.3.0 - 该配置被添加

SMTP 电子邮件发件

SMTP_SERVER

SMTP_PORT

SMTP_LOGIN

SMTP_PASSWORD

SMTP_FROM_ADDRESS

SMTP_DOMAIN

SMTP_DELIVERY_METHOD

SMTP_AUTH_METHOD

SMTP_CA_FILE

SMTP_OPENSSL_VERIFY_MODE

SMTP_ENABLE_STARTTLS_AUTO

SMTP_ENABLE_STARTTLS

可选的值有: auto (默认)、 always 或 never。

版本历史:
4.0.0 - 该配置被添加

SMTP_TLS

SMTP_SSL

电子邮件配置基于 Mastodon 所基于的 Ruby on Rails 框架的 action_mailer 组件。关于 action_mailer 的完整文档可在 这里 获取。客户端使用 SMTP 或其衍生产品:StartTLS + SMTP 或 SMTPS (使用 TLS 的 SMTP)。

基础配置

  • SMTP_SERVER:指定要使用的服务器。例如 sub.domain.tld。
  • SMTP_PORT:默认值为 25 (SMTP 的常用端口)。如果检测到 StartTLS,可能会切换到端口 587。
  • SMTP_DOMAIN:仅在需要 HELO 域时才需要。默认将设置为 SMTP_SERVER 域。
  • SMTP_FROM_ADDRESS:指定发件人地址。
  • SMTP_DELIVERY_METHOD:默认值为 smtp (也可以是 sendmail)。

SMTP服务器的身份验证

  • SMTP_LOGIN:SMTP 用户的登录名。
  • SMTP_PASSWORD:SMTP 用户的密码。
  • SMTP_AUTH_METHOD:可以是 plain(默认;密码以明文传输)、 login(密码将被base64编码)或 cram_md5。

安全 SMTP

默认情况下,将尝试与指定的 SMTP 服务器建立 StartTLS 连接。

  • SMTP_ENABLE_STARTTLS_AUTO:默认为 true。
  • SMTP_CA_FILE:可以指定一个值,但在许多 Linux 发行版(如基于 Debian 的发行版)中,这将是 /etc/ssl/certs/ca-certificates.crt。
  • SMTP_OPENSSL_VERIFY_MODE:可以是 none 或 peer。使用 TLS 时,接受带有自签名证书的连接可能很有用。
  • SMTP_TLS:true 或 false (默认 false)
  • SMTP_SSL:true 或 false (默认 false)

请注意,目前只有 TLSv1.3 和 TLSv1.2 被认为是安全的SSL/TLS协议。

Prometheus指标

Mastodon 支持使用 Prometheus 格式公开一些指标,该配置是可选的。

对于 Ruby 进程,它使用 prometheus_exporter gem。请参考其文档了解更多详情。

默认情况下,你需要运行 prometheus_exporter 服务器(使用 ./bin/prometheus_exporter)来收集指标并公开它们以供抓取。如果你想更改此行为,请查看 MASTODON_PROMETHEUS_EXPORTER_LOCAL。

请注意, Prometheus 格式的指标始终对流服务端启用,并且可以在 http://streaming-server-host:port/metrics 访问。

版本历史:
4.4.0 - 该配置被添加对Ruby进程的支持

MASTODON_PROMETHEUS_EXPORTER_ENABLED

若配置为 true, Mastodon 的 Ruby 进程(Web & Sidekiq)将启用 Prometheus 检测。

MASTODON_PROMETHEUS_EXPORTER_WEB_DETAILED_METRICS

若配置为 true,检测服务将收集并公开每个 Web 请求的每个控制器/操作指标。请注意,这可能会导致一些资源开销。

MASTODON_PROMETHEUS_EXPORTER_SIDEKIQ_DETAILED_METRICS

若配置为 true,检测服务将收集并公开每个 Sidekiq 作业的每个作业指标。请注意,这可能会导致一些资源开销。

MASTODON_PROMETHEUS_EXPORTER_LOCAL

若配置为 true,将启动一个进程内服务器来公开指标,而不是尝试将它们发送到外部的 prometheus_exporter 服务器。在容器化环境中运行 Sidekiq 时,这可能很有用,以避免外部导出器的开销。指标将在 http://host:port/metrics 上公开。

重要提示:这对于多进程服务器(如 Puma)不起作用,因为每个进程都会尝试监听同一个端口并会失败。

PROMETHEUS_EXPORTER_HOST

如果未启用进程内服务器,指标将发送到该主机(应该运行 prometheus_exporter 服务器)。默认为 localhost。

PROMETHEUS_EXPORTER_PORT

如果未启用进程内服务器,指标将发送到该端口(应该运行 prometheus_exporter 服务器)。默认为 9394。

MASTODON_PROMETHEUS_EXPORTER_HOST

如果启用了进程内服务器,进程内导出器将监听该主机。默认为localhost

MASTODON_PROMETHEUS_EXPORTER_PORT

如果启用了进程内服务器,进程内导出器将监听该端口。默认为9394

OpenTelemetry

Mastodon 支持使用 OpenTelemetry 协议导出跟踪数据。该检测使用标准 OTel Ruby SDK,应该支持标准 OTel 环境配置变量, OTEL_SERVICE_NAME 除外(参见下面的OTEL_SERVICE_NAME_PREFIX)。Mastodon 目前只提供 OLTP 导出器。

版本历史:
4.3.0 - 添加了对Ruby后端的支持

OTEL_SERVICE_NAME_PREFIX

OTEL 服务名称的前缀。服务名称将是 $prefix/web 和 $prefix/sidekiq。默认为mastodon。

OTEL_SERVICE_NAME_SEPARATOR

在区分不同服务时在服务名称中使用的字符。默认为 / (即 mastodon/web)。

OTEL_EXPORTER_OTLP_ENDPOINT

发送跟踪的 OLTP 服务器的 URL。如果未设置此变量,则禁用 OpenTelemetry 检测。没有默认值(空值)。

文件存储

CDN

CDN_HOST

你可以从单独的域名(如 CDN(内容分发网络))提供静态资产(徽标、表情符号、 CSS、 JS等),因为这可以减少用户的加载时间。

示例值: https://assets.example.com

提供文件时必须使用 CORS 标头,否则 Mastodon 的 Web UI 的某些功能将无法工作。例如可以提供如下标头: Access-Control-Allow-Origin: *

本地文件存储

PAPERCLIP_ROOT_PATH

PAPERCLIP_ROOT_URL

AWS S3和兼容服务

对象存储

存储桶必须支持访问控制列表 (ACLs)。对于 AWS S3,这意味着将"对象所有权"设置设为"已启用 ACL"。对于 Google Cloud Storage,这意味着将"访问控制"设置设为"细粒度"。

S3_ENABLED

S3_REGION

S3_ENDPOINT

S3_BUCKET

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

S3_SIGNATURE_VERSION

S3_OVERRIDE_PATH_STYLE

S3_PROTOCOL

S3_HOSTNAME

S3_ALIAS_HOST

EXTRA_MEDIA_HOSTS

版本历史:
4.4.0 - 添加

S3_OPEN_TIMEOUT

S3_READ_TIMEOUT

S3_FORCE_SINGLE_REQUEST

S3_ENABLE_CHECKSUM_MODE

S3_STORAGE_CLASS

S3_MULTIPART_THRESHOLD

S3_PERMISSION

S3_BATCH_DELETE_LIMIT

S3_BATCH_DELETE_RETRY

Swift

SWIFT_ENABLED

SWIFT_USERNAME

SWIFT_TENANT

SWIFT_PASSWORD

SWIFT_PROJECT_ID

SWIFT_AUTH_URL

SWIFT_CONTAINER

SWIFT_OBJECT_URL

SWIFT_REGION

SWIFT_DOMAIN_NAME

SWIFT_CACHE_TTL

HTTP 缓存清除器

若配置,当媒体文件从你的源站被删除或变为不可用时,缓存清除器会发送一个请求来使其缓存失效。这将确保任何已从 Mastodon 中移除的内容都会被从你的缓存层/CDN 中清除。

实现此目的的方式非常依赖于你的代理/CDN提供商,并且需要配置。如果你使用 nginx 进行 HTTP 缓存,你应该查看 proxy_cache_purge 配置指令。

CACHE_BUSTER_ENABLED

若配置为 true,那么 Mastodon 在删除文件时将向媒体 URL 发送缓存清除请求,以便可以从缓存中清除文件。

默认为 false

CACHE_BUSTER_HTTP_METHOD

默认为 GET

CACHE_BUSTER_SECRET_HEADER

包含 CACHE_BUSTER_SECRET 中定义的密钥的标头名称。

默认为空值,表示不会添加标头

CACHE_BUSTER_SECRET

上面配置的 CACHE_BUSTER_SECRET_HEADER 标头的值。

外部认证

OmniAuth

ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH

允许现有用户使用他们以前未使用过的外部认证提供商登录,前提是他们使用相同的电子邮件地址。如果你想提供用户在不同外部提供商之间迁移的能力,该选项可能很有用,但这会构成潜在的安全风险,如果攻击者设法在你配置的任何提供商上使用要攻击的目标账号的邮件地址创建一个新的身份,就可以劫持该账号。

版本历史:
4.2.6 - 该配置被添加

OMNIAUTH_ONLY

ONE_CLICK_SSO_LOGIN

启用登录或注册按钮。 对于全部使用单个外部提供商(CAS、SAML或OIDC)进行认证的实例很有用。

启用此功能将阻止匿名会话的缓存。 另外,当使用OIDC发现时,身份提供商必须在 Mastodon 启动前可用。

LDAP

LDAP_ENABLED

LDAP_HOST

LDAP_PORT

LDAP_METHOD

LDAP_BASE

LDAP_BIND_DN

LDAP_PASSWORD

LDAP_UID

LDAP_SEARCH_FILTER

LDAP_MAIL

LDAP_UID_CONVERSION_ENABLED

PAM

PAM_ENABLED

PAM_EMAIL_DOMAIN

PAM_DEFAULT_SERVICE

PAM_CONTROLLED_SERVICE

CAS

CAS_ENABLED

CAS_DISPLAY_NAME

CAS_URL

CAS_HOST

CAS_PORT

CAS_SSL

CAS_VALIDATE_URL

CAS_CALLBACK_URL

CAS_LOGOUT_URL

CAS_LOGIN_URL

CAS_UID_FIELD

CAS_CA_PATH

CAS_DISABLE_SSL_VERIFICATION

CAS_UID_KEY

用于账户的用户名的键。 创建的账户将是@uid@domain.tld。

CAS_NAME_KEY

CAS_EMAIL_KEY

CAS_NICKNAME_KEY

CAS_FIRST_NAME_KEY

CAS_LAST_NAME_KEY

CAS_LOCATION_KEY

CAS_IMAGE_KEY

用作账户头像的图像的键。 此键中的值必须是图像文件的URL。 需使用支持的文件格式(JPEG 或 PNG,而非 SVG)很重要。

CAS_PHONE_KEY

CAS_SECURITY_ASSUME_EMAIL_IS_VERIFIED

SAML

SAML_ENABLED

SAML_ACS_URL

SAML_ISSUER

SAML_IDP_SSO_TARGET_URL

SAML_IDP_CERT

SAML_IDP_CERT_FINGERPRINT

SAML_NAME_IDENTIFIER_FORMAT

SAML_CERT

SAML_PRIVATE_KEY

SAML_SECURITY_WANT_ASSERTION_SIGNED

SAML_SECURITY_WANT_ASSERTION_ENCRYPTED

SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED

SAML_ATTRIBUTES_STATEMENTS_UID

SAML_ATTRIBUTES_STATEMENTS_EMAIL

SAML_ATTRIBUTES_STATEMENTS_FULL_NAME

SAML_ATTRIBUTES_STATEMENTS_FIRST_NAME

SAML_ATTRIBUTES_STATEMENTS_LAST_NAME

SAML_UID_ATTRIBUTE

SAML_ATTRIBUTES_STATEMENTS_VERIFIED

SAML_ATTRIBUTES_STATEMENTS_VERIFIED_EMAIL

隐藏服务

TOR

洋葱服务

http_proxy

http_hidden_proxy

ALLOW_ACCESS_TO_HIDDEN_SERVICE

限制

反垃圾信息/滥用

HCAPTCHA_SITE_KEY

HCAPTCHA_SECRET_KEY

若配置,注册确认页面将显示验证码,请查看验证码

电子邮件域名

EMAIL_DOMAIN_ALLOWLIST

若配置,将只允许使用指定域名的邮箱注册,排除其他所有域名。域名以竖线|分隔,例如:foo.com|bar.com

EMAIL_DOMAIN_DENYLIST 已弃用

若配置,将不允许使用指定域名的邮箱注册。域名以竖线|分隔,例如:foo.com|bar.com

此选项已被弃用。你可以通过管理界面或tootctl命令行界面动态调整邮箱域名阻止列表。

会话

MAX_SESSION_ACTIVATIONS

定义每个用户允许的浏览器会话的最大数量,默认为 10。如果创建了一个新的浏览器会话并且超出了限制,则最旧的会话将被删除,导致用户从该会话中注销。

主页提要

USER_ACTIVE_DAYS

Mastodon 在 RAM 中存储主页信息流(具体而言,信息流存储于 Redis 数据库中)。这使得它们可以被非常快速地访问和更新,但这也意味着如果它们不被使用,你可能不希望把它们保留在那里,而且你可能不想花费资源将新条目插入到不会被访问的主页信息流中。因此, Mastodon 会定期清除一段时间内未上线的用户的主页信息流,如果他们重新出现,服务端会从数据库数据中重新生成这些主页信息流。默认情况下,如果用户在过去 7 天内上线,则被视为活跃用户。

主页信息流的重新生成在计算上是昂贵的,如果你的 Sidekiq 不断地执行这项工作,是因为你的用户每3天上线一次,但你的 USER_ACTIVE_DAYS 设置为2,那么请考虑调整它。

此设置与用于统计目的的活跃用户数(例如月活跃用户数)判定无关。

其他

数据库迁移

SKIP_POST_DEPLOYMENT_MIGRATIONS

此变量仅在运行 rake db:migrate 时有效,它只与 Mastodon 升级过程有关。有两种类型的数据库迁移,一种是在新代码部署和运行之前运行的,另一种是在之后运行的。默认情况下,这两种类型的迁移都会执行。如果你在运行迁移之前关闭了所有 Mastodon 进程,那么就没有区别。该变量对于零停机时间升级是有意义的。在特定 Mastodon 版本的升级说明中,你将看到是否需要使用它。

数据库加密支持

必须设置以下三个环境变量才能启用 Rails 中的 Active Record 加密功能, Mastodon 使用该功能来加密和解密某些数据库属性。

  • ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
  • ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
  • ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT

版本历史:
4.3.0 - 该配置被添加

StatsD(在4.3.0中移除)

StatsD 支持在 Mastodon 4.2.0 中已弃用,并在 4.3.0 中被完全移除。

STATSD_ADDR

若配置, Mastodon 将把一些事件和指标记录到由其主机名和端口标识的StatsD实例中。

示例值:localhost:8125

STATSD_NAMESPACE

若配置,所有 StatsD 键将以此为前缀。当 RAILS_ENV 为 production 时默认为 Mastodon.production,当为 development 时默认为 Mastodon.development,等等。

STATSD_SIDEKIQ

若配置为 true,Mastodon 将一些 Sidekiq 指标记录到 StatsD 中。默认为 false。

未分类或未排序

BUNDLE_GEMFILE

DEEPL_API_KEY

DEEPL_PLAN

ENABLE_SIDEKIQ_UNIQUE_JOBS_UI

启用 sidekiq-unique-jobs 的 Web 界面。这可以用于查看和清除此 gem 管理的锁,但在实践中很少有用,并且过去存在过关键的安全漏洞。 如果你只需要清除所有锁,你现在可以使用新添加的 bundle exec rake sidekiq_unique_jobs:delete_all_locks。

版本历史:
4.2.6 - 该配置被添加

LIBRE_TRANSLATE_ENDPOINT

LIBRE_TRANSLATE_API_KEY

GITHUB_REPOSITORY

默认为 mastodon/mastodon

SOURCE_BASE_URL

默认为https://github.com/$GITHUB_REPOSITORY

FFMPEG_BINARY

默认为空值(未启用)

LOCAL_HTTPS

PATH

MAX_FOLLOWS_THRESHOLD

默认为 7500

MAX_FOLLOWS_RATIO

默认为 1.1

IP_RETENTION_PERIOD

默认为 31536000(1年)

SESSION_RETENTION_PERIOD

默认为 31536000(1年)

BACKTRACE

设置为 1 以允许回溯 Rails 框架代码。

DISABLE_SIMPLECOV

EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION

DISABLE_FOLLOWERS_SYNCHRONIZATION

MAX_REQUEST_POOL_SIZE

默认为 512。

GITHUB_API_TOKEN

用于从 GitHub 提交历史生成 AUTHORS.md 的 rake 任务。

翻译状态: 本文是英文页面 Configuring your environment 的翻译,最后翻译时间:2025-04-21,点击这里可以查看翻译后页面的改动。

最后更新于 April 21, 2025 · 改进此页面
也可在此找到: English

赞助商

Dotcom-Monitor LoadView Stephen Tures Swayable SponsorMotion

加入Mastodon · 博客 ·

查看源代码 · CC BY-SA 4.0 · 版权信息