Skip to content

使用 Dokploy 搭建 Mastodon

Published: at 00:59Suggest Changes

前言

想要一块属于自己的“树洞”并不难,难的是兼顾易用与可控。我先后尝试过 Notion、Obsidian 等笔记软件,总感觉差了点味道。直到遇到类 Twitter 的开源社交平台 Mastodon——发布门槛低,又能保留碎片灵感,还能完全掌控数据,才算真正找到答案。

本文默认你已经有基本的 docker 与 dokploy 使用经验。同时本文完整记录了我的实战流程与坑点,保证照着做就能跑起来。

环境准备

开始部署

1. 第一步, 不要看Mastodon官方文档!!!

直接打开代码仓库 ➜ github.com/mastodon/mastodon

官方文档默认“裸机”部署,Docker 方案一笔带过,依赖多到劝退。而在官方仓库中提供了 docker-compose.yml,直接复制即可。

2. 复制 docker-compose.yml 的内容

将仓库中的 docker-compose.yml 文件复制到 dokploy 中

docker-compose

compose-db

compose-redis

compose-web

compose-streaming

compose-sidekiq

compose-volumes

3. 填写环境变量

把仓库里的 .env.production.sample 全量复制到 Dokploy 的 Environment 标签页,再按照下面截图逐项修改。

envirorment

env-base

4. 先部署一次项目

点 Deploy。第一次一定会失败——别慌,这是 Dokploy 在拉镜像 + 构建依赖。后面还要用到刚生成的容器环境,所以先跑一次。

5. 生成密钥 并配置

通过ssh连接到vps上,执行以下命令,找到mastodon的web容器id

docker ps -a

记住我们mastodon的服务名,如 mastodon-demo-mastodon-xxxxx

然后进入对应的文件夹中

cd /etc/dokploy/compose/mastodon-demo-mastodon-xxxxx/code

利用web容器中的环境依赖生成OPT_SECERT 和 SECERT 需执行两次:第一次生成 SECRET_KEY_BASE,第二次生成 OTP_SECRET

docker compose run --rm web bundle exec rails secret

把两段值粘到 Dokploy 的 Environment 中对应字段。

env-secrets

同样地,在相同目录中执行命令,生成 ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEYACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALTACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY

docker compose run --rm web bin/rails db:encryption:init

env-encryption

同样地,在相同目录中执行命令,生成VAPID_PRIVATE_KEY、VAPID_PUBLIC_KEY

docker compose run --rm web bundle exec rails mastodon:webpush:generate_vapid_key

env-vapid

6. 配置SMTP服务

找到任意一个SMTP服务,配置到dokploy的environment中,这里不赘述

env-smtp

7. 初始化postgresql数据库

在相同目录中执行命令,初始化postgresql数据库

docker compose run --rm web bundle exec rails db:setup

8. 重新部署

再次点击 Deploy,随后在 Web UI 的 Logs 面板查看输出,确保各容器无红色报错。

9. 配置域名

打开dokploy的domain页,添加域名,并选择开启SSL

domain

10. 域名解析

dns-smtp

11. (可选) 配置ES

配置ES相当简单,只需要将compose文件中的es相关服务取消注释,修改相关依赖及volumn配置即可

compose-es-1 compose-es-2 compose-es-3 同时需要配置dokploy的environment中的ES相关配置

env-es

12. (可选) 配置OSS

配置OSS可以参考官方文档 , 我使用的是R2, 比起AWS配置上会有一些限制

只需要修改environment中的OSS相关配置即可,这里注意S3_PERMISSION需要设置为空字符串

env-r2

13. 创建管理员账户

参考官网文档创建第一个管理员账号https://docs.joinmastodon.org/admin/setup/#admin

像前面一样,找到mastodon的web容器

docker ps -a

借助 web 容器里的依赖创建管理员账号

docker exec -it mastodon-demo-mastodon-xxxxx-web-1 sh -c "RAILS_ENV=production bin/tootctl accounts create <你的用户名> --email <你的邮箱> --confirmed --role Owner"

创建成功就即可登录, 如果SMTP邮箱服务配置正确,会收到一封确认邮件,确认后即可激活账号.

若没收到确认邮件,可先手动激活账号,再回头检查 SMTP 配置。

docker exec -it mastodon-demo-mastodon-xxxxx-web-1 sh -c "RAILS_ENV=production bin/tootctl accounts approve <你的用户名>"

14. 完成

一切就绪!快邀请小伙伴来你的实例玩耍吧~

写在最后

流程未必最优,但足够把服务跑稳。欢迎在评论区分享你的踩坑与优化心得,也可以直接来我的实例 https://imaginationlab.com 找我聊天~


Next Post
大陆可用的海外收款平台Creem注册流程