Docker下的Mastodon安装笔记
联邦宇宙
Facebook啥的吹的元宇宙感觉要凉,还是长毛象的联邦宇宙看上去比较靠谱。自己的数据放在巨头手里真是风险太大。
所以决定自己部署一个长毛象实例。
归根到底还是因为自己老了,居然到现在才知道长毛象这个好东西。
其实早在2009年的上海Barcamp,我就做过一个关于分布式微博的设想演讲,当时也没做很仔细的准备,就大概说了自己的一点想法,后来因为种种原因也没有动手做,停留在空谈的阶段。
还好还是有人做出来了,虽然跟我的设想有一些不同,但至少比我的空想实在多了。
不过因为是用RoR开发的,部署过程比较复杂,开始是按文档直接部署没有成功,后来改用docker部署才可以,所以还是记录一下吧。
这个时候就觉得,如果是用go开发的就好了,部署多简单啊。当然,还好数据库是用postgresql的,如果用mysql,1G内存就跑不起来了……当然现在用1G也只是能跑起来而已,要正常使用还是得2G以上。
准备工作
需要:
- 一台服务器,内存至少1G,推荐2G,最好4G或更多,有外网IP,有一个域名
- Linux系统,我一般用Debian/UbuntuServer,实际上能跑Docker都可以
- 一个SMTP服务——第三方或本地,我用了第三方
- 创建一个mastodon用户,指定ID为991,禁止登录(关闭shell):
adduser -u 991 --disabled-login --disabled-password mastodon
,只能从其它用户su -s <shell> mastodon
过去 - 拉取Postgresql镜像
docker pull postgres:<tag>
,版本用自己喜欢的,尽量高一点,比如13或更高 - 拉取Redis镜像
docker pull redis:<tag>
,版本也尽量新一点,6或更新 - 拉取mastodon镜像:tootsuite/mastodon:
,比如 v3.4.1
或更新版 - 下载docker-compose.yml
配置
修改docker-compose.yml文件:
- 各镜像加上tag,保持与之前拉取的一致,避免用latest(被latest坑过,比如新版调整了配置参数导致用旧配置无法启动)
- volumes改为实际的路径,我一般习惯保持与直接安装放在同样的路径下,比如/var/lib/xxx
- mastodon的三个服务需要修改env_file的路径到
/home/mastodon/.env.production
,以及public路径到/home/mastodon/public
,以便统一管理及权限控制
然后启动Postgresql和Redis:
docker-compose up -d db
docker-compose up -d redis
配置数据库:
docker exec -it mastodon_db_1 psql -U postgres
创建用户:
postgres=#
CREATE USER mastodon WITH PASSWORD '数据库用户密码' CREATEDB;
生成mastodon配置文件
docker-compose run --rm web bundle exec rake mastodon:setup
这个步骤比较麻烦,还好大部分选项都有默认值。几个需要注意的项目是:
- 域名填你的域名
- Docker模式选“是”
- 数据库名和用户名填mastodon
- 是否上传云存储先填否,如果有可以后面再配
- 发送邮件的信息填前面准备的SMTP服务器信息,需要注意的是,我用的第三方邮件服务需要使用
login
认证模式,而不是默认的plain
。填完可以给自己发个邮件测试一下,不成功可以返回重填(当然,全部参数重填也是很麻烦,所以最好先测试好SMTP再创建配置,尽量一次成功)。
之后就是建数据库和创建管理员账号,记得把管理员密码记录下来。
最后把配置保存到.env.production
文件中。
启动服务
docker-compose up -d
会启动三个服务:web
,stremming
, sidekiq
,看一下状态是否都正常,如果出错则看一下日志。
配置Nginx
先下载配置模板,把域名改一下,然后放到/etc/nginx/sites-enabled
下,然后重启nginx。
证书啥的就不配了,直接弄个自签名证书意思一下,然后前面加一个cloudflare,证书会自动搞定,省很多事。
管理实例
现在可以用域名打开你的实例了,用管理员账号登录吧。
增加全文搜索
拉取镜像,这个是我搞的一个集成了hanlp
中文分词的es镜像:
docker pull raptor/eshanlp:7.10.1
修改docker-compose.yml
,把es部分的注释去掉,镜像改用:raptor/eshanlp:7.10.1
,web部分依赖es的那行注释也去掉。
修改.env.production
,增加如下三行:
ES_ENABLED=true
ES_HOST=es
ES_PORT=9200
然后重启服务:
docker-compose down
docker-compose up -d
现在就启用了全文检索,然后需要对数据创建索引:
docker-compose run --rm web bin/tootctl search deploy
等待创建完毕就可以搜索了。
日常运维
由于平时使用中会同步很多联邦宇宙中的内容过来,导致服务器硬盘使用增加很快,为了节约空间,建议定期清除:
# 清除过期媒体
docker-compose run --rm web bin/tootctl media remove --days=14
# 清除孤立媒体(未被嘟文引用的媒体)
docker-compose run --rm web bin/tootctl media remove-orphans
# 清除无用嘟文(未被引用的或本地用户已不再关注的等)
docker-compose run --rm web bin/tootctl statuses remove
其中最占硬盘的就是媒体内容。这个清除语句可以放在crontab里定期执行。
推送到[go4pro.org]