之前在浏览各路大佬的网页时发现了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适合小圈子的圈地自萌与熟人茶馆,一旦规模扩大,管理就变得麻烦起来了……
最后放几张效果图
等待Misskey制作迁号功能 (`・ω・´) 我觉得这是现在唯一限制我使用频率的理由了……期待能有巨佬安排一下。
另,你站的点触效果,啊哈哈哈哈哈哈 ∠( ᐛ 」∠)_
用docker部署的话,有没有办法定时清理misskey缓存的外站媒体文件啊
有一个清理外站存储的API
https://m.dogcraft.cn/api-doc/#operation/admin/federation/delete-all-files
在现行版本(12.118.1)下不建议这样做,可能会导致部分图片丢失的问题。
一般来说,对于外站媒体文件,可以采用不缓存只代理的模式,nginx的配置文件中有缓存项目,如果套了cloudflare,也会有一个缓存,这两个缓存已经足够了。
为什么编译一直报错返回代码1,Ubuntu系统没有这个问题
找到了解决方法,但是不管用
https://stackoverflow.com/questions/55323656/error-command-failed-with-exit-code-1-when-i-try-to-run-yarn
会不会是依赖没安装全,或者是环境变量没有设置好?
有没有更多的报错信息?
你搭建的misskey站点怎么出错啦,我还想看看呢
没问题啊,我一直在正常使用啊……
⚠エラーが発生しました
不是m.dogcraft.top?
一般升级之后会出现这个页面,清除缓存或者刷新几次试试……
还有一个m.dogcraft.cn这个最近没升级
原来是这样子啊,我也想搭建个,但是老是出错,想请你帮忙搭建一下😂
是哪一步出问题了?
sudo] password for misskey:
Sorry, try again.
[sudo] password for misskey:
Sorry, try again.
[sudo] password for misskey:
sudo: 3 incorrect password attempts
misskey@VM-0-16-debian:~/misskey$
安装pg数据库叫输入密码,这个密码是啥子密码啊,输入misskey都不对
debian使用apt安装软件时一般需要root权限
如果你的misskey用户有可以用sudo,密码就是登陆密码
如果没有,不如切换到debian默认的root用户来执行安装postgresql的操作
貌似在评论区没找到贵站的「回复」按钮,再补一句吧,我的服务器可以 ping 通这两个中继的 IP。
回复在头像下面,点击那两个字就好……

我这里也可以ping通relay.moew.science,但是如果访问这个页面返回的是cloudflare的验证码页面……
这个中继可能对地区进行了限制,我这个实例(m.dogcraft.top)到现在都没加进去……
另外一个您那里可以正常中继么?
另一个没加,现在m.dogcraft.top没有接入任何中继
一会我试试……
刚试了,另一个可以
不再显示「待批准」是么?我这里是一直待批准,但是网页那边显示已经加入了。
显示是“已批准”
或许刷新几次或者删了再加试一试
搞定了,之前因为 docker build 爆内存就偷懒跳过了 build,正常走完流程就没事了,都是偷懒的锅。
@Dogcraft
我的实例地址是:https://misskey.addesp.com
我订阅的中继是 https://relay.mastodon.fun/inbox 和 https://mastodon-relay.moew.science/inbox
请教一个问题,我这里的 Misskey 实例「中继」功能一直在「待批准」状态是为啥呢?这个功能不是很会用。
misskey的中继功能是完全没问题的(至少现在的最新版没问题)
一直是待批准应该是中继的问题或者是misskey到中继的网络不畅……
能方便透露一下是哪个中继吗?
大佬,为什么会一直提示服务器断开,而且一直关不掉。
https://cdn.masto.host/towosla/media_attachments/files/105/690/941/885/624/797/original/8dac4adfcae543ed.png
服务器断开一般是websocket出了问题……
造成这个问题的原因有很多,前后端都有可能出问题……
可从控制台的报错入手排查
现在misskey的内存占用已经达到33%,已经远超过mysql了,看看内存占用会不会继续增加下去……
现在已经运行了一周多了,看来这种配置方式是经受得起实践检验的。