我有长毛象啦
文章目录
【注意】最后更新于 May 22, 2022,文中内容可能已过时,请谨慎使用。
我一直都想有一个自己的微博系统,因为自己逐渐回复社恐状态,愈发不习惯在公共平台如豆瓣、微博、朋友圈吐槽。而自己也没有当年日更一博的劲头,几句话就发一篇博客的话好像也不妥。但是微博和博客不同,很难复用我所用的静态系统搭建。几个月前,我才孤陋寡闻得知了长毛象这么一个系统,发现其正符合我的需求,便入了坑。
长毛象并不像Hugo这类静态架构,可以直接架在免费的Github pages上,所以第一步是挑选一个合适的云平台。我没有使用东家的产品,而是跟风使用Digital Ocean,开了一个每月5刀左右的Ubuntu instance。Digital Ocean上可以直接从marketplace选image直接搭建,但是版本比较老。Mastodon的文档比较完整,所以我便一路跟着从头开始搭建了。
首先是一些准备工作,比如禁用 /etc/ssh/sshd_config
中的 PasswordAuthentication
并通过 systemctl restart ssh.service
重启,这样只能使用SSH Key登陆;通过 apt update && apt upgrade -y
更新package后安装fail2ban和iptables-persistent并添加相关设置;由于Mastodon是内存大户,还根据Digital Ocean的教程增加了4G的swap。
接下来便是安装Mastodon了。我没有使用docker,而是从源中直接安装。Mastodon基于Ruby on rails (REST API),React.js(前端),Node.js(Streaming API),Redis(队列),PostgreSQL(数据库),自然也要安装这几个。其中Ruby需要通过rbenv来管理,而后者必须安装在单独的Linux用户中,所以可以创建一个mastodon用户(之后也会在这个用户下下载安装Mastodon)。Ruby会装很久,可以使用 --verbose
来确保还在安装而不是卡了。
全部安装完成后,即可运行交互式安装向导来生成配置文件~.env.production~,预编译静态文件,并创建数据库的schema:
|
|
这一步在Mastodon文档中略过,不过基本上也可以一路回车。需要注意的是:
- 如果打算采用二级域名,但是想让用户名采用一级域名即可搜到,则需要在交互中提供一级域名。我后面会细说。
- 需要提前准备好SMTP的配置。比如gmail就需要设置应用专用密码,并使用plain模式来验证。
一般来说,之后跟着文档配置完nginx,SSL证书,以及一系列systemd服务后就可以使用Mastodon了。
但是。
对,由于我是个特别折腾的人,便总会有一些但是。我有个不太常见的需求,那就是我想让我的长毛象和我的博客共用一个一级域名。换句话说,我的博客是blindwith.science,那我想用mastodon.blindwith.science来访问我的长毛象,但是别人可以直接使用ziyunch@blindwith.science来搜我,而不是ziyunch@mastodon.blindwith.science。
我找到这篇文档,算是有一些眉目。长毛象中,有两个概念,一个是webfinger acct:
URI,即ziyunch@blindwith.science;另一个则是与Mastodon实例相匹配的URI,即mastodon.blindwith.science。一般情形下,两者一致,万事大吉。但是当不一致时,则需要注意:
- 在~.env.production~中做区分。其中LOCAL_DOMAIN(也就是之前在交互时填写的domain)是~acct:~ URI中用到的域名,而WEB_DOMAIN则是与Mastodon实例相匹配的域名。
- nginx的配置需针对WEB_DOMAIN,即mastodon.blindwith.science。
- 在长毛象进行webfinger query
.well-known/host-meta
时做一个跳转。
其中第三步,如果主域名用于的博客有采用nginx作为server或proxy,那可以在主域名的nginx中加一个针对 .well-known/host-meta
的301跳转。
但是。
对,又是一个但是。我的博客基于Hugo并直接架在Github pages上,也并没有设置nginx proxy,所以不能直接照抄答案。折腾了好一段时间后,我在Hugo的static文件夹(会原样复制到作为Github pages档的public文件夹中)中添加了两个文件来解决这个跳转的问题:
第一个是参考这篇讨论添加 .well-known/host-meta
文件。
|
|
第二个则是参考这个问答添加 _config.yml
,这样Github才不会忽略隐藏的host-meta文件。
|
|
这样,我的长毛象才终于可用了。
接下来,我打算
- 为每篇新博客发一个嘟嘟,并支持博客与嘟嘟的联动。
- 定期清理并备份我的长毛象。
- 将博客添加到RSS源,并使用RSS2toot将博客自动转发成嘟嘟。
文章作者 ziyunch
上次更新 2022-05-22