重新部署 MixSpace+Shiroi

Intro

昨天刚对博客的架构进行了一波更新，今早醒来发现服务器到期了，导致网站直接 Down，甚至没有到期提醒的邮件。

本计划到期后不再续费，而到期后已经无法连接上服务器了，里面的数据也取不出来。所幸之前有良好的备份习惯，定时将数据备份到 OneDrive，具体可参见这篇文章。

但尴尬的是，此前仅备份了数据，没有备份部署的环境变量，这导致了一些问题，我认为值得记录一下。

后端部署

和此前部署的文章一致，唯一需要注意的也是本次部署中遇到的麻烦是 .env 文件的撰写。在 ALLOWED_ORIGINS 中仅填写域名即可，不要填写 https://xxu.do。

Copy
JWT_SECRET=XXXXXX #随便填写，长度在 16-32 之间
ALLOWED_ORIGINS=xxu.do #这里需要注意的是，仅填写域名即可，不要填写 https://xxu.do，这会导致前端无法连接
ENCRYPT_ENABLE=false
ENCRYPT_KEY=

前端部署

本次部署的方式：利用 GitHub Action 去构建 Shiroi 然后部署到远程服务器，主要参考了这篇文章。

首先在服务器中进行以下操作：

安装 Nodejs 和 unzip

Copy
# 安装 unzip
sudo apt update && sudo apt install -y unzip

# 安装 NVM (Node Version Manager)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 重新进行 SSH 连接或者 source .bashrc 来生效

nvm install node
node -v
npm -v

安装 Node.js, npm, pnpm, pm2, sharp

Copy
npm i -g sharp pm2 pnpm

在你的服务器家目录，新建 shiro 的目录，然后新建 .env 填写你的变量。

Copy
cd && mkdir shiro && cd $_
vi .env

然后填入相应的环境变量，单域名的话 NEXT_PUBLIC_API_URL 和 NEXT_PUBLIC_GATEWAY_URL 如下填写即可，GH_TOKEN 可从这里新建，权限勾选 repo 即可。

Copy
NEXT_PUBLIC_API_URL=http://localhost:2333
NEXT_PUBLIC_GATEWAY_URL=http://localhost:2333

TMDB_API_KEY=
GH_TOKEN=

Fork 项目后，在 Settings -> Secrets and variables -> Actions -> Repository secrets 中添加以下内容：

HOST 服务器地址

USER 服务器用户名

PASSWORD 服务器密码

PORT 服务器 SSH 端口

KEY 服务器 SSH Key（可选，密码 key 二选一）

GH_PAT 可访问 Shiroi 仓库的 Github Token

其中 GH_PAT 可以和上面的 GH_TOKEN 保持一致。

在 Fork 仓库下的 Action 中，启用 workflow；随意修改 build_hash 文件后，workflow 就启动了，如果运行成功就可以到自己的服务器里 /root/shiro 文件夹下看是否有构建好的文件了；一开始运行失败，后查明原因是没有部署 pm2，供参考。

Action 定时执行：进入 Github Fork 的项目中，修改 .github/workflows/deploy.yml文件，去掉 schedule: 和 -corn: '0 3 * * *' 两行的注释即可。

Nginx 反代

单域名的示例：

Copy
## xxu.do

server {
listen 80;
server_name xxu.do;
rewrite ^(.*)$ https://$host$1 permanent;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name xxu.do; # 替换为你的域名
index index.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
ssl_certificate /etc/pki/xxu.do/server.crt;
ssl_certificate_key /etc/pki/xxu.do/server.key;
ssl_stapling on;
ssl_session_timeout 1d;
ssl_protocols TLSv1.2 TLSv1.3;

location /socket.io {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2333/socket.io;
}
## API 地址
location /api/v2 {
proxy_pass http://127.0.0.1:2333/api/v2;
}
## 简读 render 地址
location /render {
proxy_pass http://127.0.0.1:2333/render;
}
## Kami 地址
location / {
proxy_pass http://127.0.0.1:2323;
}
## 后台地址
location /proxy {
proxy_pass http://127.0.0.1:2333/proxy;
}
location /qaqdmin {
proxy_pass http://127.0.0.1:2333/proxy/qaqdmin;
}
## RSS 地址
location ~* \/(feed|sitemap|atom.xml) {
proxy_pass http://127.0.0.1:2333/$1;
}
}

Outro

本次重新采取新的前端部署方式，确实是解决了内存占用过高的问题。

另外，也带来一个教训，一定要备份好 .env 文件，这对于重新部署来说会避免很多麻烦。

此文由 Mix Space 同步更新至 xLog
原始链接为 https://xxu.do/posts/geek/redeploy-MixSpace%2BShiroi