本地部署私有 Mastodon 的注册问题

本地部署私有 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