Misskey12.108.1搭建的几个坑以及几个注意点

发布于 2022-03-30  2,358 次阅读


橋的实现是通过Fediverse的一员——Misskey而成功的。之前是想建Mastodon来着,但是每换一个机子就报一个不一样的错误,于是就用了轻量级的Misskey。由于入坑比较晚,赶上了Misskey12.108.1版本,在构建与和大佬交谈的过程中算是也对一部分坑有了了解,结合自己的经验,发布这篇文章。如果有错误,欢迎大佬指点。话不多说,现在开始!

请注意:本文全程采用源码编译,Docker部署还没有摸过

先按照官网文档摸一遍

(请注意,本文系统为Ubuntu18.04 LTS
首先你需要安装(Nginx之类的就不说了)……
1. NodeJS(16.x)&Yarn
2. PostgreSQL(10+)
3. Redis
4. FFmpeg

你可以采用apt等方法一股脑解决,如果你使用了宝塔面板,那你除了FFmpeg外都可以在"软件商店"解决并有效管理了,这也是个好方法。
好的,现在假设你已经办完了,先执行一条指令,开始你的Misskey之旅吧!

NODE_ENV=production

创建用户(此处有注意项)

Misskey最好不要在root用户上面运行,所以你需要创建一个用户。

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

然后……

安装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即可)
如果某些模块出现错误,请使用以下命令:
```sh
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跑全程是完全没有问题的,就是后面会留坑。

别忘了一定在配置文件里面将这一个注释去掉~
```yml
: 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';

别忘了保存~

重点:运行yarn build && yarn run init时出现错误,退出代码1

别急,看看是不是漏掉了什么东西……
还记得其中有一个要求是PostgreSQL吗?就是这个的问题。
你可以看看配置文件是否正确,数据库信息是否正确,以及数据库程序是否在运行,检查无误再运行就完美解决了!
systemctl运行时无法启动大概率也是这里的锅。

root专属坑

如果你选择在root下执行全称,在最后的系统服务配置文件里面,一定把User=misskey替换成User=root,否则你将无法上传文件。

最后……神秘的坑
至少我是遇到了这个问题,先是在测试机上面使用npm运行有部分功能无法使用,后来搬迁后直接报错。
还记得screen上面的语句吗?使用yarn解决问题!
ExecStart=/usr/bin/npm start替换成ExecStart=(你的yarn绝对目录)yarn start,大功告成!

Nginx配置官网文档已经讲的很详细了,但是可能会出现无法运行的情况,这里贴出实测可以正常运行的配置文件做一个示例。

map http_upgradeconnection_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://hostrequest_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-IPremote_addr;
        proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;

        # For WebSocket
        proxy_set_header Upgradehttp_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 BUILD</span></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搭建就结束了,如果有什么问题欢迎探讨,有什么错误欢迎各位大佬前来指教,提前欢迎你加入联邦宇宙大家庭,为想要的世界投一张真正属于自己的票!