本地部署私有 Mastodon 的注册问题
由于 Mastodon 在注册时需要验证邮件地址,因此如果希望使用不存在的域名,或者web服务无互联网访问权限,可以在 web 容器中使用以下命令进行注册:
1 | tootctl accounts create USERNAME --email ADDRESS@example.com --confirmed |
然而,Mastodon 会检测用户输入的电子邮件地址的域名是否能够被解析。如果该域名不可达,Mastodon 会提示 Failure/Error: email unreachable 并终止执行。这意味着,如果使用了不能解析的域名,将无法在 Mastodon 上注册。
为了解决这个问题,有以下三种方法:
方法一:在 docker-compose.yml
文件中,为 web 服务添加一个 hostname
参数,该参数的值为用户想要注册的电子邮件地址的域名。例如,如果用户想要使用 USERNAME@example.com
这个电子邮件地址,那么可以在 web 服务的配置中添加 hostname: 'example.com'
。
方法二:修改 Mastodon
的源代码,位于 mastodon/app/validators/email_mx_validator.rb
,移除 validate
函数中的 if resolved_ips.empty?
判断,然后重新编译镜像,之后使用命令行注册时将不再检查域名是否存在解析,只会检测是否在黑名单中。
方法三:如果 DNS 由本地网络处理,也可在DNS 服务器上设置目标域名的解析记录,例如 OpenWrt 的 DHCP 可以自定义劫持域名。
注意:如果需要重新编译镜像,确保编译时的源码和当前运行的其他服务版本一致,例如 git checkout v4.2.5
,同时如果其他服务指定了 image ,则需要锁定版本,否则可能导致数据损坏或功能不正常。
参考资料:
[1]. Using the admin CLI - Mastodon Documents (https://docs.joinmastodon.org/admin/tootctl/)
[2]. Create the admin user with tootctl - GitHub (https://github.com/mastodon/mastodon/issues/15850)
[3]. 重新编译镜像: docker compose build –no-cache web
#Mastodon