Mastodon 建站笔记

mastodon 建站笔记:慢慢来,6 月之前搞完就行;不要怕,不行就重启试试

一点说明

本文所记录的搭建非常缓慢,开始于二月,但给自己设定的 DDL 在六月。搭建过程完全碎片化,每次推进都基于“这会儿没什么事情不如搞一搞建站”,且超过一小时就会先放着下次再说,非常随性随意。每一步完成于哪一天、大概耗时都有记录,给想搭建却又嫌麻烦、觉得需要特意安排时间的朋友提供一个佛系搭建参考。

参考与致谢

参考:蓝盒子站长的利用 docker 搭建 Mastodon 实例和塔塔的小球飞象建站笔记

感谢嘎嘎、塔塔和其他写下详细教程和笔记的朋友!因为你们和你们的教程,我这种没有参考不敢做事的人才能一点点把实例搭建起来。
特别感谢塔塔,给我每完成一步的嘟嘟点星星,给予我很大鼓励!

前期准备

前期准备主要是花钱,大多数运营商都支持 Visa、MasterCard 或 PayPal,godaddy 支持支付宝付款。
为能有更多选择,个人建议开通 PayPal,比办信用卡方便一些。本文中除 Scaleway 以外,所有支付都通过 PayPal 完成。如使用 PayPal 付款,建议付款时直接使用目标货币,而不使用 PayPal 提供的转换为人民币付款。这种情况下付款使用的是银行汇率,会比 PayPal 划算。

域名

常用的域名提供商很多,比如 NameCheapgodaddydynadot。可参考o3o站长给出的域名选购指南
本站根据蓝盒子站长的推荐,在 NameCheap 购买域名。由于之前给博客换域名已经在 NameCheap 买过一次,而且很早就想好要买什么域名,所以这一步成为这个跨越几个月的搭建过程中最简单、最快速的一步。

该步骤完成于 2022.02.17。约耗时 15 分钟,主要在犹豫到底要不要这天买,实际操作只用掉两三分钟。以及早知道我这么快就要自建站,博客就换个域名了!两年后我博客必换域名!

邮件服务

使用 Zoho Mail 提供的 Business Mail 服务中的 Forever Free Plan。
由于本人需要很详细的操作步骤才敢进行下一步,这里找了个注册 Zoho Mail 的详细教程 —— 注册zoho免费企业邮箱。这个教程虽然详细,但稍微有点过时,有些操作的名称略有更改。如有需要,可再找其它教程参考。

该步骤完成于 2022.02.21。约耗时 40 分钟,因为一些步骤没有明确的参考不太敢试,必须找到别人这一步怎么做才动手。但实际上没关系,大胆试,不行重来嘛!

购买VPS

选择 Contabo 购买 VPS,在购买前将价格修改为欧元,选择5欧套餐,德国服务器,一次性购买 12 个月,其它选项全部默认。
这里塔塔提醒 Contabo 审核严格,最好真实 IP 购买,填写信息时不要太扯,不然会被要求提供身份证明。但我就是那个认真填写还被要求提供护照的倒霉蛋。由于目前和德国有 7 个小时时差,上午提供护照信息后,一直到下午四点多才收到确认邮件。

该步骤完成于 2022.03.02。约耗时 15 分钟加 19 小时,15 分钟是实际需要操作的时间,包括提供护照信息;19 小时是由于买服务器时护照不在手边,第二天上午才回复,下午收到确认。

建站

配置系统

这一部分参考蓝盒子站长教程

  • 配置 ssh-key
    首先查看电脑当前用户的目录下是否存在.ssh目录,以及目录中是否存在id_rsaid_rsa.pub两个文件。如果存在,公钥即为id_rsa.pub中的内容。如果不存在,则输入命令:

    1
    $ ssh-keygen -t rsa -C “your_email”

    一路回车,直到生成一个矩形的图案为止,生成的这串字符就是后面需要的公钥。

    接下来的步骤全部按照蓝盒子站长的教程进行,但我遇到了一个愚蠢的问题,不会保存 nano 编辑的内容并退出。即使编辑器下方有两行提醒,也没能正确保存文件。万一有朋友和我一样,可参考以下保存并退出的方法:

    1
    2
    3
    4
    5
    6
    7
    # ^ 为键盘上的 Ctrl 键,以下方法直接使用 Ctrl 代替
    # 退出,并根据提示保存
    Ctrl + X 退出,按 y 选择保存,提示 file name to write,利用上下左右键选择要保存到的文件,回车保存
    # 退出,并保存
    Ctrl + X 退出,按 y 选择保存,回车
    # 先保存,后退出
    Ctrl + O 并回车保存,Ctrl + X 退出
  • 安装常用命令和配置防火墙
    直接照抄蓝盒子站长给的命令,都非常顺利。

该步骤完成于 2022.03.03。约耗时 55 分钟,主要由于不会保存 nano 编辑的内容,根据各种教程也总是保存失败。中途一度试图换回之前常用的 vim,但事实证明两年没用就会忘记一切。如果能顺利保存,这一步十分钟以内就可以完成。

tips
虽然上次建站配置好了服务器端的公钥,但这次登录时,MobaXterm 一直返回错误信息:

1
Disconnected: No supported authentication methods available (server sent: publickey)

原因是服务器已经关闭账户密码登录,但使用 MobaXterm 登录时没有勾选 Use private key 并指定私钥文件。
具体步骤为 Session -> SSH -> Use private key and specify a private key for passwordless login
设置完成后即可顺利登录。

安装 docker 和 docker-compose

根据蓝盒子站长的教程,使用官方提供的一键脚本安装 docker。

1
2
3
4
# 代码来自蓝盒子站长教程
bash <(curl -L https://get.docker.com/)
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

该步骤完成于 2022.03.13。约耗时 15 分钟,包括一开始登录不上服务器而查找原因的时间,实际操作时间约 3 分钟。这一步骤完成后可以通过命令 docker-compose -h 检查 docker 是否真的安装成功。

拉取 Mastodon 镜像 & 初始化 PostgreSQL

这几项全部根据蓝盒子站长 2022-04-25 修改的教程进行。

  • 拉取 Mastodon 镜像
    直接复制粘贴代码,拉取版本为 v3.5.1,并修改 docker-compose.yml 配置文件。
  • 初始化 PostgreSQL
    复制粘贴代码,并根据教程中的提醒检查代码运行情况。

该步骤完成于 2022.05.07。约耗时 20 分钟,大部分用于思考设个什么密码。以及如果太久没有建站,一定要先看看上一次都做了什么、用过什么命令,这次又因为忘记 nano 怎么退出而慌乱几秒。

配置 Mastodon

这一步骤仍然按照蓝盒子站长的教程进行,根据教程一步步慢慢做,看仔细每一步都要填什么就可以。

根据小球飞象建站笔记中踩坑提醒,如果使用的是 zoho 邮件服务,建议 SMTP server 使用国际版地址,否则可能配置失败,无法发送通知邮件。

1
SMTP_SERVER=smtp.zoho.com

该步骤完成于 2022.05.07。耗时约 40 分钟,大多数时间消耗在 docker-compose run --rm web bundle exec rake mastodon:setup 的每一小步上。尤其是 zoho 还突然登录不上,而我又因为时隔近两个月,完全忘记了管理员邮箱是什么,手忙脚乱几分钟。
还需注意的是,在这一步中,所有的密码都不可见。一开始没有意识到这一点,以为密码没有粘贴上,同一位置贴两三遍密码导致出错。以及 .env.production 配置信息一定要在电脑上保存一遍!

安装并配置 nginx

在进行这一步之前,根据蓝盒子站长的提示,先在购买域名的网站 DNS 设置中增加一个 A Record,将设定的域名指向服务器。

  • 安装 nginx
    直接运行命令 sudo apt install nginx -y 出现报错信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Err:2 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-http-image-filter amd64 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
Err:3 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-http-xslt-filter amd64 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
Err:4 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-mail amd64 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
Err:5 http://security.ubuntu.com/ubuntu focal-updates/main amd64 libnginx-mod-stream amd64 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
Err:6 http://security.ubuntu.com/ubuntu focal-updates/main amd64 nginx-core amd64 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
Ign:1 http://security.ubuntu.com/ubuntu focal-updates/main amd64 nginx-common all 1.18.0-0ubuntu1.2
Ign:7 http://security.ubuntu.com/ubuntu focal-updates/main amd64 nginx all 1.18.0-0ubuntu1.2
Err:1 http://security.ubuntu.com/ubuntu focal-updates/main amd64 nginx-common all 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
Err:7 http://security.ubuntu.com/ubuntu focal-updates/main amd64 nginx all 1.18.0-0ubuntu1.2
404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/nginx-common_1.18.0-0ubuntu1.2_all.deb 404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-http-image-filter_1.18.0-0ubuntu1.2_amd64.deb 404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-http-xslt-filter_1.18.0-0ubuntu1.2_amd64.deb 404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-mail_1.18.0-0ubuntu1.2_amd64.deb 404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/libnginx-mod-stream_1.18.0-0ubuntu1.2_amd64.deb 404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/nginx-core_1.18.0-0ubuntu1.2_amd64.deb 404 Not Found [IP: 213.136.72.159 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb 404 Not Found [IP: 213.136.72.159 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

谷歌之后发现这是 Ubuntu 20.04 会出现的常见报错,在运行安装命令前应先运行:

1
2
sudo apt-get update # 运行这一行之后可以尝试运行安装命令,如果仍报错再运行下一行
sudo apt-get upgrade
  • 配置 nginx & 配置SSL证书 & 重启nginx
    根据蓝盒子站长的教程配置,步骤中没有出错。

该步骤完成于 2022.05.07。约耗时 30 分钟,除了一开始找报错原因费点时间之外,都是运行命令、等待命令结束,操作非常简单。

小结

到这里站点已经上线,后续都是一些个性化修改,可以根据不同需求找相应的教程。
站点搭建实际用时 230 分钟,其中很多时间浪费在不敢做和注意力不集中上。如果不是像我一样每天找一点时间随手操作其中一个小步骤,而是空出一大段时间专心建站的话,应该两到三小时就能够完成上述所有步骤。
如果你和我一样也记不住整个过程中太多账号、用户名和密码,可以在电脑上建一个备忘录或在其它安全的地方记住密码。

备份 (未完成)

参考蓝盒子站长的教程:如何将Mastodon媒体上传至Scaleway云储存

装修

使用管理命令行

  • 使用脚本简化命令
    参考:使用 alias 脚本缩写 tootctl 命令
    由于前面的步骤一直主要参考蓝盒子站长的教程,所以这里第一步目标文件夹应为 /home/mastodon/mastodon,即 cd /home/mastodon/mastodon
  • 使用命令
    1
    2
    tootctl help # 帮助信息,如果正常运行说明上一步的简化命令脚本生效。
    tootctl settings registrations close # 关闭注册

此处由于站点装修未完成,暂时关闭注册。也可以在网页端关闭注册。

开启全文搜索

参考蓝盒子站长给出的命令修改相应的配置文件,但在重启 docker 这一步骤报错:

1
2
3
4
ERROR: yaml.parser.ParserError: while parsing a block mapping
in "./docker-compose.yml", line 3, column 3
expected <block end>, but found '<block mapping start>'
in "./docker-compose.yml", line 26, column 4

再次检查 docker-compose.yml 文件发现,只删除 # 会导致缩进不统一,导致对 block 的判断有误。每行在删除 # 的同时,应在行首再删除一个空格。
其余步骤根据教程中的命令,一步一步完成即可。

其它魔改

站点魔改有许多可用的教程,如:
Mastodon | 采用docker建站后的使用与维护
如何装饰你的站点:自定义CSS、中继站和自定义表情
进阶魔改:修改字数上限、媒体上限、投票上限、添加自定义主题、界面用语、非登陆用户有限显示、优化中文搜索,附阻止本站嘟文流入某站点方法