Misskey: 一个去中心化的开源社交平台

Misskey 是一个开源、去中心化的社交媒体平台,发帖方式类似于微博和推特。去中心化则意味着一个 Misskey 实例可以与其他 Misskey 实例进行互联,甚至可以与其他 Fediverse (ActivityPub) 平台,例如 Mastodon、PixelFed、PeerTube 上的用户进行互动。

有关于 Misskey 的详细介绍,点这儿。Github 地址点这儿

Never 是在18年透过 LALA 大佬的博客认识了这个平台,当初 Misskey 还没中文翻译,因为一时兴起,带着几个同学连夜把 Misskey 的中文翻译完成了哈哈哈。

话不多说,我们以分别以两种方式安装 Misskey — 手动安装 和 通过宝塔面板安装(稍后推出)。

本篇文章背景是 ubuntu 22.04 和在局域网条件下,跳过了申请 SSL 证书这一环节(手上还真没有闲置的机子了…)。这里推荐使用 2 核 CPU 和 2 GB 内存的机器,运行起来不是很吃力,但据说 1c1g也可以。

手动安装

首先,新建一个名为 misskey 的普通用户。官方文档阐明用 root 来部署 misskey 不是很合适:

adduser --disabled-password --disabled-login misskey

Misskey 支持的数据库只有 PostgreSQL,所需版本为 12.x 以上。输入以下命令安装 PostgreSQL:

apt install postgresql

如果需要自定义配置(例如端口,监听地址等),可以通过以下命令来修改配置文件:

nano /etc/postgresql/14/main/postgresql.conf

如果提示目录不存在,可能是因为安装版本不同。总目录(/etc/postgresql)是一样的,可以通过列举文件来确定下一目录(/14):

ls /etc/postgresql

下面我们来新建数据库。输入以下命令切换至 postgres 用户:

su postgres

输入以下命令进入数据库:

psql

输入以下命令来新建数据库及用户:

create database misskey with encoding = 'UTF8';
create user misskey with encrypted password '数据库用户missky的密码';
grant all privileges on database misskey to misskey;

其中,第二行中 create user misskey,misskey 可以替换为自己想要的用户名。

完成后,输入以下命令退出数据库:

\q

如果在建立数据库时出现以下错误:

可通过输入如下命令来解决:

update pg_database set datallowconn = TRUE where datname = 'template0';
update pg_database set datistemplate = FALSE where datname = 'template1';
drop database template1;
create database template1 with template = template0 encoding = 'UTF8';
update pg_database set datistemplate = TRUE where datname = 'template1';
update pg_database set datallowconn = FALSE where datname = 'template0';

然后,再重复创建数据库及用户的那三条命令即可,最后输入 \q 来退出数据库。

Redis 也是 Misskey 的一个依赖软件。输入以下命令来安装 redis:

su root #如果没在没有 root 权限的用户中(如 postgres 和 misskey)
apt install redis

如果需要修改 redis 的端口或监听地址等,输入以下命令修改其配置文件:

nano /etc/redis/redis.conf

接下来安装 Yarn:

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
apt update
apt install yarn

完成后,输入以下命令查看 yarn 版本。若有回显,则安装正确:

yarn --version

然后安装和升级 Node. js:

apt install npm
npm install n -g
n stable

重启机器:

reboot

至此,Misskey 所须的必备环境依赖已经装完,现在我们来对 Misskey 本身下手。

切换回 misskey 用户,将 Misskey 项目克隆到本地并同步 master:

su misskey
cd ~
git clone --recursive https://github.com/misskey-dev/misskey.git
cd misskey
git checkout master

然后安装 Misskey 依赖组件:

yarn install

接下来编辑 Misskey 的配置文档:

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

在配置文档中,需要修改以下内容:

#   ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────

# Final accessible URL seen by a user.
url: https://example.tld/  #将域名替换为自己的域名

...

#   ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────

db:
  host: localhost   #数据库地址,若在本机保持默认即可
  port: 5432   #数据库端口,若未修改配置则保持默认即可

  # Database name
  db: misskey  #数据库名称

  # Auth
  user: example-misskey-user  #数据库用户名
  pass: example-misskey-pass  #用户密码

#   ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────

redis:
  host: localhost  #redis地址,若在本机保持默认即可
  port: 6379  #redis端口,若未修改配置则保持默认即可
  #family: 0  # 0=Both, 4=IPv4, 6=IPv6
  #pass: example-pass  #访问redis的密码,若未设置则保持默认即可
  #prefix: example-prefix
  #db: 1

保存后,输入以下命令来构建 Misskey:

NODE_ENV=production yarn build

构建完成后,输入以下命令来初始化数据库:

yarn run init

至此,Misskey 就安装完成咯,运行以下命令来启动:

NODE_ENV=production npm start

但是用这种方式运行,断开ssh连接就会导致 Misskey 被终止。所以我们可以新建一个系统服务。切换回 root 用户,输入以下命令:

su root
nano /etc/systemd/system/misskey.service

将以下内容粘贴进去:

[Unit]
Description=Misskey daemon

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

[Install]
WantedBy=multi-user.target

保存后,我们就可以用 systemd 启动 Misskey 了:

systemctl daemon-reload
systemctl enable misskey
systemctl start misskey

查看运行状态:

systemctl status misskey

由于 Misskey 需要 https 协议,所以我们还需要申请一个证书。这里我们用 acme.sh 来申请:

curl https://get.acme.sh | sh -s email=my@example.com

安装完成后,需要断开重连一下 ssh 。确保域名已解析到 VPS 上,且 VPS 的 80 端口没有被占用,然后输入以下命令申请 SSL 证书(把 mydomain.com 替换为你的域名):

acme.sh --issue -d mydomain.com --standalone

签发的证书文件在 /root/.acme.sh/你的域名/。其中,你的域名.cer 为公钥,你的域名.key 为私钥。

现在我们安装 Nginx,用于反向代理:

apt install nginx

新建站点配置文件。这里需要注意的是示例配置文件可能不会正常工作,需要依据个人情况进行修改:

nano /etc/nginx/conf.d/example.com.conf
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
    listen       80;
    listen       443 ssl http2;
    server_name  你的域名;
    client_max_body_size 100m;
    client_body_buffer_size 2048k;
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }

    ssl_certificate    SSL公钥位置;
    ssl_certificate_key    SSL私钥位置;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

location / {
    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 Proxy "";
    proxy_pass_header Server;

    proxy_pass http://127.0.0.1:3000;
    proxy_buffering off;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;

    tcp_nodelay on;
  }
}

重新启动 nginx:

systemctl stop nginx
systemctl start nginx

现在,打开站点,应该可以进入 Misskey 实例了。第一件事就是创建管理员用户和密码:

然后就是主界面咯:

这个界面相较于 2018 年也是变化了不少。点击左边的“控制面板”即可查看服务器目前状态,还可自定义:

剩下的功能就等小伙伴们自己来探索了。等过段时间 Never 也搭一个公共的 Missky。

本来还想再写一下用宝塔安装,先鸽一下,回家就写哈哈哈。

感谢参考文献中的几位大佬的研究,得以让本次搭建顺利完成!

本篇文章可以转载,但须注明来源。

参考文献

Dogcraft (2020). 搭建Misskey——去中心化的社交网络(熟人茶馆). Available at: https://dogcraft.top/archives/145/. (Accessed: 6 Dec. 2022)

Johann150, Romanoff S. F., Johann150, Toromino & syuilo (2022). Misskey Setup and Installation Guide. Create your own Misskey instance – Manually. Available at: https://misskey-hub.net/en/docs/install/manual.html. (Accessed: 8 Dec. 2022)

Lala (2018). Misskey:一个日产开源SNS系统. Available at: https://lala.im/4291.html. (Accessed: 7 Dec. 2022)

QC 班长 (2022). PostgreSQL创建数据库报错ERROR: new encoding (UTF8) is incompatible with the encoding of the template datab. Available at: https://blog.csdn.net/qq_35624642/article/details/81985940. (Accessed: 5 Dec. 2022)

落溪残梦 (2022). Misskey12.108.1搭建的几个坑以及几个注意点. Available at: https://www.yateam.cc/archives/206. (Accessed: 6 Dec. 2022)

封面插图选自 加茂nasus. (2020). 陽春. Available at: https://www.pixiv.net/artworks/80636372.

Digiprove sealCopyright secured by Digiprove © 2022 Never.