用 Docker 搭建 Mastodon 实例
转移到 ActivityPub
最近也是不满意 Twitter 的各种变化,决定尝试自建一下 Mastodon 用
Twitter 被收购是各种黄推泛滥,开了蓝标还能置顶。环境是越来越差
之前有想过自己建立类似的社交平台,看到 Mastodon 和 Misskey 都是不错的选择
当然,如果只是想换到 ActivityPub 的分布式开放社交平台
无需自建,网上有很多实例,直接注册使用就能用了
当然,自己管理当然非常麻烦,维护需要时间还有成本,收益几乎没有
但之前有看到 Mastodon 可以在单用户模式下运行,觉得很有意思,想试一下
安装 Docker 和 Docker compose
如果已经安装过,请跳过该步骤
docker compose (Plugin) 请使用 docker compose
命令
docker-compose (Standalone) 请使用 docker-compose
命令
下文都以 插件(Plugin) 的形式为例,首先安装 Docker
1 | curl -sSL https://get.docker.com/ | CHANNEL=stable sh |
安装 Docker compose
On Debian/Ubuntu systems:
1 | apt update |
On Centos 7 systems:
1 | yum update |
获取 Mastodon
获取 Mastodon 仓库,切换到稳定版本
1 | git clone https://github.com/tootsuite/mastodon.git |
按需求修改 docker-compose.yml
需要安装db
,redis
,es
,web
,streaming
,sidekiq
db是Postgres
数据库
es是Elasticsearch
,全文搜索引擎,这是可选地
streaming组件是 Mastodon 的推送服务
sidekiq是 Mastodon 的后台任务处理队列
如果需要指定版本号,可以修改image后面的内容,默认都是可靠的稳定版本
如果端口有被占用,可以修改ports,
例如我这边3000端口已被使用,换成了3001,注意只需要改动第一个:后面的端口
即可
1 | ports: |
复制env文件
1 | cp .env.production.sample .env.production |
配置 Mastodon
使用 docker compos 安装
1 | docker compose build |
可以使用mastodon:setup
生成一些必要的配置
根据交互提示填写完成后,必要信息会输出到终端中,请再编辑.env.production
文件
把生成的一些配置修改进去
1 | docker compose run --rm web bundle exec rake mastodon:setup |
如果 enable single user mode 那这个示例就无法注册,首页也会变成你的 Timeline
Docker安装时,PostgreSQL /Redis
的host
,分别是 db / redis
PostgreSQL
的默认用户名是postgres
,密码直接回车。第一次配置时候回提示导入数据,选y即可SMTP
请根据实际情况填写,可以参考我之前自己SMTP服务器的文章Save configuration
请选择 y
,配置文件不会自动保存
最后会提示创建 Admin 用户,根据提示输入用户和邮箱。之后也可以单独创建
1 | # root @ Alice in ~/mastodon on git:v4.2.1 x [16:43:01] |
示例生成的配置,仅供参考
配置文件不会自动保存,请手动编辑.env.production
写入配置
1 | # Generated with mastodon:setup on 2023-12-02 08:43:45 UTC |
将容器跑起来
1 | docker compose up -d |
配置 Nginx
如果没有Nginx,使用包管理安装一下,例如 Ubuntu
1 | apt install nginx -y |
复制配置到Nginx的sites-available内
1 | cp dist/nginx.conf /etc/nginx/sites-available/mastodon |
然后编辑它,以下内容比较重要
1 | # 两个 server_name 都要修改 |
证书生成方式有很多种,这里以 acme.sh + dnsapi + cloudflare 举例
使用 acme.sh 生成SSL证书,DNS APi 可以参考 acme.sh wiki
获取 acme.sh
1 | curl https://get.acme.sh | sh -s email=my@example.com |
得到证书
1 | export CF_Key="763eac4f1bcebd8b5c95e9fc50d010b4" |
成功的话,把 cert key 和 full chain 的路径配置到 Nginx 中
1 | [Wed Nov 9 18:39:24 CST 2022] Your cert is in /usr/local/nginx/conf/ssl/abyss.moe/abyss.moe.cer |
需要给public
目录写入/读取权限,不然无法上传图片等,最后重新载入Nginx
1 | sudo chown -R 991:991 public/system |
配置好DNS解析后,访问你配置的域名,应该能看主页
如果出现错误,请确认 docker containers logs,根据web容器的错误排查
一般是你的配置文件有误导致的,修改.env.production
后,再使用docker compose up -d
重建
其他
上面步骤应该能完成全部配置,这里另外给出一些命令参考
创建管理员账号
1 | docker compose exec web bash |
指定管理员
1 | docker compose exec web bash |
登录、创建数据库
1 | docker compose up -d db |
1 | psql -U postgres |
初始化数据库和表
1 | docker compose run --rm web bundle exec rake db:migrate |
参考资料 (Reference)
MastodonをDockerでsetupする:
https://zenn.dev/pluie/articles/20230212-mastodon-setup
Mastodon Docker Setup:
https://gist.github.com/TrillCyborg/84939cd4013ace9960031b803a0590c4