之前在浏览各路大佬的网页时发现了mastodon(长毛象)这个去中心化的开源社交网络。就个人而言,就是喜欢去中心化与开源的东西。Mastodon是目前看来规模最大的去中心化的社交网络,境内也有很多站点。当时就决定安排一个,仔细研究之后,发现这个是用Ruby写的,这倒是第一次接触这个东西,然后看了一下安装教程,需要依赖很多东西,而且有些和我现有的服务器上的基础设施有冲突,基本上是需要有一个全新的服务器。看到后面还有docker版本,那就可以基本上无视这些依赖项了,于是就按照网上的docker教程开始安排,结果失败 了,若干天之后鼓起勇气,结果又失败了,结果都是卡在三个docker镜像(数据库、本体、redis)同时启动后的初始化数据库上。

后来,又在大佬的网页上看到了关于Misskey的介绍,看起来是和mastodon类似的,不过这个是用nodejs写的,相比与ruby,我更熟悉JavaScript,而且又看了一下主要的依赖项,有nodejs、PostgreSQL和redis。nodejs可以安排,现在的服务器上还没有靠nodejs的服务,redis已经有了,只剩下安排一个PostgreSQL就行了。由于服务器上已经有了mysql,所以就把PostgreSQL安排到树莓派上了,经过亲身实践,搭建Misskey并不复杂,按照文档一步一步来就行了。

准备阶段

按照文档的指导,首先新建一个linux用户

addusr misskey

按照提示安排好密码等内容就好了

然后就是去github上面拉取misskey的本体了

su misskey
 cd ~
git clone -b master git://github.com/syuilo/misskey.git

这一步通常比较缓慢(境内服务器)推荐用screen安排上,然后去配置数据库。这相当于是一种异步多线程操作 Σ(っ °Д °;)っ

下载完成之后,checkout master 分支 (BLM)

cd misskey

git checkout master

安装PostgreSQL

在debian/ubuntu系列的操作系统里面很容易

sudo apt install postgresql

apt包管理会安排好一切的,包括创建一个postgres的专们用户以及启动postgresql服务。

如果没有特殊需求,postgresql的默认配置就不用动了(我在树莓派上安装的也没动),要改的只有监听端口与监听的IP地址,数据库类的应用建议还是改一下监听端口,尤其是暴露在公网上的服务器,去年在树莓派上安排好的redis都让人给干了……

配置文件在/etc/postgresql下面,上面说的很详细,按需求改端口和监听地址就行了,如果嫌麻烦或者是在网站与数据库在同一个服务器上可以把postgresql的SSL选项关掉。

创建数据库与新增用户

首先进入postgresql的控制台

sudo -i su postgres
psql

然后会出现postgres=# 这就说明很正常,然后创建名称为misskey的数据库:

postgres=#CREATE DATABASE misskey;

然后创建名为misskey的用户

postgres=#create user misskey with password 'YourPassword ';

将创建好的数据库权限给安排好

postgres=# GRANT ALL PRIVILEGES ON DATABASE misskey TO misskey;

按照这个流程postgresql应该是完全安排好了

Redis安装

redis与一般的sql数据库不同,redis是一种键值对数据库,而且全部在内存里,说以数据查询就很快了,通常用来作为缓存,据说某售票网站就是用的redis。

在ubuntu/debian系列的系统里安装redis也是十分方便的基本上可以说是开箱即用:


sudo apt install redis

完成之后去/etc/redis/目录下找配置文件与改端口、设置密码,在里面找到下面几项,其他配置没有特殊需求不用动。

requirepass YourPassword
bind 0.0.0.0 
port 9999

安装yran

如果是Ubuntu系统,最好先把cmdtest给移除掉,会造成名称冲突

sudo apt remove cmdtest
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn

然后就是将nodejs升级到最新稳定版,系统安装的一般版本比较老旧

通常的升级方法是

sudo npm install n -g
sudo n stable

其中n是可以切换nodejs版本的一个包。

编译静态资源与配置misskey

安装依赖(JavaScript)

su misskey
cd ~/misskey
yarn

这个也要等一段时间,这个时间可以去配置数据库

编辑配置文件

cp .config/example.yml .config/default.yml

对default.yml 进行编辑

重点注意端口号,两个数据库的配置

编译静态文件

NODE_ENV=production yarn build

这也需要比较长的时间,考虑到此时数据库已经配置完了,就耐心等着吧 ╮(╯▽╰)╭

其实还可以考虑去配置nginx

官方文档里面有一份配置样例,不同服务器的环境不同,之前所承载的服务不同,这个就要具体问题具体分析了,这里放一下我的配置

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name m.dogcraft.top;
    ssl_session_cache shared:ssl_session_cache:10m;
    access_log /var/log/nginx/misskey.log main;
    ssl_certificate     /root/key/dog.pem;
    ssl_certificate_key /root/key/dog.key;

    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA;
    ssl_prefer_server_ciphers on;
    client_max_body_size 80m;
    location / {
        proxy_pass http://127.0.0.1:3003;
        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 https;
        proxy_set_header Accept-Encoding "";
        proxy_http_version 1.1;
        proxy_redirect off;

        # For WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # Cache settings
        proxy_cache cache1;
        proxy_cache_lock on;
        proxy_cache_use_stale updating;
        add_header X-Cache $upstream_cache_status;
    }

改完了看一下nginx -t 有没有问题,没有问题就nginx-s reload重新加载新的配置文件。

编译完成之后进行数据库的初始化

yarn run init

这个也要等一会,如果正常结束了,就可以启动了

NODE_ENV=production npm start

第一次进去要设置一下管理员用户与密码

安排上系统服务

ssh链接npm start是不稳定的,ssh断掉之后进程就没了。

sudo nano /etc/systemd/system/misskey.service

把下面的东西安排进去

[Unit]
Description=Misskey daemon

[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always

[Install]
WantedBy=multi-user.target

最后运行

sudo systemctl daemon-reload 
sudo systemctl enable misskey
sudo systemclt start misskey

这样以后即使服务器重启之后也能继续运行了。

总结

总体来看,搭建过程并不复杂,完成之后对服务器的资源占用不是很高(到目前为止),在阿里云服务器上内存占用小于mysql,树莓派上的postgresql内存占用小于qbittorrent。

目前境内网络上的misskey实例很少,去中心化的社交网络也是以mastodon为主,但是misskey类的具有ActivityPub协议的是可以跨实例交互的,所以misskey适合小圈子的圈地自萌与熟人茶馆,一旦规模扩大,管理就变得麻烦起来了……

最后放几张效果图