搭建一只Misskey实例

  1. 1. 写在前面
  2. 2. 正式开始
    1. 2.1. 环境准备
    2. 2.2. 获取 Misskey
    3. 2.3. 编辑配置
      1. 2.3.1. default.yml
      2. 2.3.2. docker.env
      3. 2.3.3. docker-compose.yml
    4. 2.4. 开始编译
      1. 2.4.1. 初始化数据库
      2. 2.4.2. 启动服务
    5. 2.5. 配置Nginx
    6. 2.6. 更新

写在前面

本文中的内容已经有些过时啦,推荐参照使用Docker最小化部署Misskey中提到的方案与注意细节哦

大约是一年前,我曾写过一篇有关Mastodon安装的博文,然而当时的Twitter环境尚且还能接受,且Mastodon的配置相当繁琐,因此仅仅是趁着服务器还没过期的时候稍微支撑了一个小站,那看上去似乎有些许迟缓的UI设计也让人感到一种无力感由心而生。后来在有一次朋友说我那篇教程已经过时的时候,偶遇了Misskey这款同样是基于Fediverse开发的去中心化社交平台,因此不但在两种实例见可以进行跨平台的社交活动,而且Misskey的UI设计简单又可爱,难道还有什么可以犹豫的吗~(雾

正式开始

开场白说完了,是时候该正式开始了。首先专门为我们的新服务器来开设一个节点吧。

注意一下,我今天买到的机子的IP是被墙掉的,所以无论是SSH还是开网站都需要代理。网站没关系,我放到CloudFlare上还能加一层保护,但SSH的话…魔法上网,启动~(弥天大雾

我个人习惯是使用Debian下的root账号作为部署环境,因为CentOS的某些包实在是太上古了,Ubuntu总给我一种桌面使用的幻视。因此,简单的部署工作完成之后,就可以正式开始来配置啦。

我有帮忙翻译比较详细的安装教程或是Docker部署教程,一步一步的跟着顺下去就可以啦~

这一次我仍旧选择了使用Docker来部署,因为安全总是第一位的嘛,要是被奇奇妙妙的家伙攻破服务器获取了数据,那就相当糟心啦~

环境准备

先来安装必要的依赖项吧,像curl啦,git啦,nginx啦这些之后都是需要使用到的呢~

1
apt install curl git nginx -y

如果还需要screen环境的话,也别忘了一并带上哦

要运行嘛,Docker肯定是少不了的。一年过去了,相比起手动搓命令行的方法,有没有什么快速部署Docker的官方解决方案呢?

1
bash <(curl -L -s https://get.docker.com)

这样确实是能自动安装docker,但有个坑就是不会自动安装docker-compose,我们追加安装一下吧:

1
2
3
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

最后一行是指创建了一个快捷链接,这样的话root也能能快乐使用docker啦

如果您使用的不是 AMD64 指令集架构的系统(例如 arm 的 aarch ),您可能需要使用 pip3 来安装 docker-compose 。

获取 Misskey

这里参照官方教程,直接用git的方法获取最新的版本就可以的说呢=ω=

1
2
3
git clone -b master git://github.com/syuilo/misskey.git
cd misskey
git checkout master

没错的话现在获取的就是最新版本的程式啦

编辑配置

先把默认的配置文件都先复制一份吧

1
2
3
cd .config
cp example.yml default.yml
cp docker_example.env docker.env

接下来就是编辑具体的配置信息啦,记得用你喜欢的文本编辑器来实现哦

default.yml

这个是站点配置文件,具体的配置信息按照一般的方法来编辑就好啦~开发组贴心地在每一项之前都提供了介绍哦,所以不必担心有任何编辑上的难点的说呢~

首先是站点URL,别忘了改成自己站点的链接哦~

请注意,一旦实例启动之后请不要再修改这个参数,以免造成无法挽回的错误!

我们要让站点在docker下运行,因此指定http端口为3000,删除前面的注释符号:

在Docker环境下,数据库的地址并不是默认的localhost哦,地址的信息写在根目录下的 docker-compose.yml 里面,连接信息可以在 docker.env 下配置,这里给出一些默认的样例吧:

名称 地址
Postgresql db
Redis redis
Elasticsearch es

别忘了和 docker.env 下的保持一致哦w

文章确实有些年久失修了
现在部署的时候最好把配置文件的 signToActivityPubGet: true 这一行前面的注释去掉(即启用这个功能),部分 mastodon 实例开启了安全模式,因而如果不开启这个选项对 GET 请求也进行签名的话可能会导致连接障害。

docker.env

这里给出每个配置项的含义吧

项目 含义
POSTGRES_PASSWORD 数据库密码
POSTGRES_USER 数据库用户
POSTGRES_DB 数据库名

docker-compose.yml

这个文件是控制docker联合启动的配置哒,在根目录下,别忘了切换路径哦w

已经过气的一点点小贴士(已经合并上啦,尽情享受吧!)

由于这个文件目前没有默认将用户上传的文件夹(在容器里是/misskey/files)映射出来,导致使用docker部署的容器在版本更新的时候会出现文件丢失。我已经提交了一个PR#6598用于修复此问题,但在官方合并PR请求之前,还是先手动加上吧:

可以参照改变的文件来修改docker-compose.yml文件哦,在misskey的networks下加入这样的内容就可以啦:

1
2
volumes:
- ./files:/misskey/files

别忘了调整缩进哦~

开始编译

开始之前建议使用screen环境,这样的话即使中途连接断开,也不至于发生太过悲惨的情况啦

1
docker-compose build

由于这个平台会使用webpack把整个前端项目打包,并且有一大堆的参数设置来配置,因此编译起来相当耗时耗资源;同时由于可能是依赖关系没有完全配置好,导致在处理依赖的时候会报大量的无效错误。唯一让我感到欣慰的,大概是它能克服重重的阻挠,最终完成项目的编译吧。

初始化数据库

使用如下指令来初始化数据库,这点和Mastodon有点像:

1
docker-compose run --rm web yarn run init

经过几分钟的等待之后也就完成啦:

启动服务

还在等什么呢~赶紧启动服务吧!

1
docker-compose up -d

注意,由于这个平台集成度非常高,所以需要相当一段时间来启动,并不是配置错误了哦~

配置Nginx

由于我们使用Docker来运行,因此并不是直接就能访问到Misskey的端口(3000)的,我们需要配置一下反向代理相关的配置文件。

Misskey官方默认提供了一份参考样例,路径为./docs/examples/misskey.nginx,配置时您可以参考着使用,我使用的是自定的方案。

以我的站点 nya.one 为例,可以使用如下的配置,您的站点配置的时候别忘了根据实际情况再行调整哦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;
listen [::]:80;
server_name nya.one;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nya.one;
## SSL
ssl_certificate /etc/nginx/ssl/nyaone.cer;
ssl_certificate_key /etc/nginx/ssl/nyaone.key;

## reverse proxy
location / {
proxy_pass http://127.0.0.1:3000;
client_max_body_size 64m;
include conf.d/shared/revproxy.conf;
}

}

其中 conf.d/shared/revproxy.conf 为手动创建的通用的代理配置,放置在 /etc/nginx/conf.d/shared/revproxy.conf ,内容如下:

1
2
3
4
5
6
7
8
9
10
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;

完成!别忘了生成一张CloudFlare自签证书安装到指定的位置去哦~

nginx -t 来测试一下吧,一切正常的话就可以 nginx -s reload 重载nginx服务,快乐地访问站点啦!

更新

如果版本不是最新了,要试着更新一下Misskey,该怎么做呢?其实也很简单哦,只要使用这些指令就可以啦:

1
2
3
4
5
6
7
git stash
git checkout master
git pull
git stash pop
docker-compose build
# 请仔细检查升级日志以获取数据库迁移信息,并对数据库做出必要的修改。
docker-compose stop && docker-compose up -d