本人尝试通过Fediverse的一员——Misskey成功构建了一个实例。之前是想建Mastodon来着,但是每换一个机子就报一个不一样的错误,于是就用了轻量级的Misskey。由于入坑比较晚,赶上了Misskey12.108.1版本,在构建与和大佬交谈的过程中算是也对一部分坑有了了解,结合自己的经验,发布这篇文章。如果有错误,欢迎大佬指点。话不多说,现在开始!
请注意:本文全程采用源码编译,Docker部署还没有摸过
(请注意,本文系统为Ubuntu18.04 LTS)
首先你需要安装(Nginx之类的就不说了)……
你可以采用apt等方法一股脑解决,如果你使用了宝塔面板,那你除了FFmpeg外都可以在"软件商店"解决并有效管理了,这也是个好方法。
好的,现在假设你已经办完了,先执行一条指令,开始你的Misskey之旅吧!
NODE_ENV=production
Misskey最好不要在root用户上面运行,所以你需要创建一个用户。
adduser --disabled-password --disabled-login misskey
然后……
su - misskey
git clone --recursive -b master https://github.com/misskey-dev/misskey.git
git submodule update --init
cd misskey
git checkout master
yarn install
如果GitHub响应过慢,未来会考虑搭建自己的Git平台(等到Misskey支持Oauth2后动手),到时可以直接从那里进行clone。
cp .config/example.yml .config/default.yml
然后你需要先编辑default.yml再继续操作,否则会报错。(此处留坑)
这里和官方文档不一样,直接把两个命令合并在一起(也许可以趁这段时间喝杯咖啡?)
yarn build && yarn run init
(此处留坑)
如果构建使用的是 Debian,则需要安装build-essential。(apt即可)
如果某些模块出现错误,请使用以下命令:
npx node-gyp configure
npx node-gyp build
yarn build
这里有两个启动方式~
screen是最佳选择!
apt install -y screen
screen -S (随便一个名字)
yarn start
然后Ctrl+A加上Ctrl+D就可以挂起在后台运行啦!需要查看可以screen -r
恢复窗口。
你需要执行下面的命令哦~
vi /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
此处注意:
如果要在 CentOS 中使用小于或等于 1024 的端口使用Misskey,则必须更改它。(所有涉及目录的地方均需按照实际目录调整)
ExecStart=/usr/bin/sudo /usr/bin/npm start
然后执行下面的指令:
systemctl daemon-reload; systemctl enable misskey
systemctl start misskey
使用systemctl status misskey
检查运行状态。
是不是成功了?
失败了对吧?走到某一步无法执行,报错了对吧?
恭喜你中坑了!
先说说刚一开始的注意项,实际上root跑全程是完全没有问题的,就是后面会留坑。
别忘了一定在配置文件里面将这一个注释去掉~
#signToActivityPubGet: true
#修改成
signToActivityPubGet: true
安装Misskey这里需要注意一下,Misskey12.108.1留了一个bug 特性就是个bug,如果你一路跑下来,你会最终发现无法在个人资料里面设置邮箱信息。
在你的Misskey程序根目录下执行下方的命令:
vi packages/backend/src/services/validate-email-for-account.ts
然后删除第一行,换成下面的信息:
import { validate as validateEmail } from 'deep-email-validator';
别忘了保存~
别急,看看是不是漏掉了什么东西……
还记得其中有一个要求是PostgreSQL吗?就是这个的问题。
你可以看看配置文件是否正确,数据库信息是否正确,以及数据库程序是否在运行,检查无误再运行就完美解决了!
systemctl运行时无法启动大概率也是这里的锅。
如果你选择在root下执行全称,在最后的系统服务配置文件里面,一定把User=misskey
替换成User=root
,否则你将无法上传文件。
最后……神秘的坑
至少我是遇到了这个问题,先是在测试机上面使用npm运行有部分功能无法使用,后来搬迁后直接报错。
还记得screen上面的语句吗?使用yarn解决问题!
将ExecStart=/usr/bin/npm start
替换成ExecStart=(你的yarn绝对目录)yarn start
,大功告成!
Nginx配置官网文档已经讲的很详细了,但是可能会出现无法运行的情况,这里贴出实测可以正常运行的配置文件做一个示例。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name (你的域名);
ssl_certificate (自定义);
ssl_certificate_key (自定义);
ssl_protocols 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;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri/;
client_max_body_size 80m;
# Proxy to Node
location /.well-known/acme-challenge {
alias /home/misskey/misskey/.well-known/acme-challenge/;
}
location /.well-known/pki-validation {
alias /home/misskey/misskey/.well-known/pki-validation/;
}
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_redirect off;
# If it's behind another reverse proxy or CDN, remove the following.
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;
# For WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade
proxy_connect_timeout 86400s;
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
send_timeout 86400s;
}
}
你在成功运行后会发现右上角左上角(左右不分+1)一直闪烁着一个黄色的DEV BUILD。
既然不影响就不用管它了!(开始摆烂)
你可以在packages/client/src/ui/_common_/common.vue
里面见到这样的一句:
<div v-if="dev" id="devTicker"><span>DEV BUILDspan>div>
还有下面的部分……
<style lang="scss">
@keyframes dev-ticker-blink {
0% { opacity: 1; }
50% { opacity: 0; }
100% { opacity: 1; }
}
@keyframes progress-spinner {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
#wait {
display: block;
position: fixed;
z-index: 4000000;
top: 15px;
right: 15px;
&:before {
content: "";
display: block;
width: 18px;
height: 18px;
box-sizing: border-box;
border: solid 2px transparent;
border-top-color: var(--accent);
border-left-color: var(--accent);
border-radius: 50%;
animation: progress-spinner 400ms linear infinite;
}
}
#devTicker {
position: fixed;
top: 0;
left: 0;
z-index: 2147483647;
color: #ff0;
background: rgba(0, 0, 0, 0.5);
padding: 4px 5px;
font-size: 14px;
pointer-events: none;
user-select: none;
> span {
animation: dev-ticker-blink 2s infinite;
}
}
style>
话不多说,懂得都懂~
基于源码的Misskey搭建就结束了,如果有什么问题欢迎探讨,有什么错误欢迎各位大佬前来指教,提前欢迎你加入联邦宇宙大家庭,为想要的世界投一张真正属于自己的票!
本文已发布在随笔园,原文链接:https://www.yateam.cc/archives/206,此文系作者本人略作修改后搬运,遵循CC4.0国际协议。