Intro#
昨天刚对博客的架构进行了一波更新,今早醒来发现服务器到期了,导致网站直接 Down,甚至没有到期提醒的邮件。
本计划到期后不再续费,而到期后已经无法连接上服务器了,里面的数据也取不出来。所幸之前有良好的备份习惯,定时将数据备份到 OneDrive,具体可参见这篇文章。
但尴尬的是,此前仅备份了数据,没有备份部署的环境变量,这导致了一些问题,我认为值得记录一下。
后端部署#
和此前部署的文章一致,唯一需要注意的也是本次部署中遇到的麻烦是 .env 文件的撰写。在 ALLOWED_ORIGINS 中仅填写域名即可,不要填写 https://xxu.do。
JWT_SECRET=XXXXXX #随便填写,长度在 16-32 之间
ALLOWED_ORIGINS=xxu.do #这里需要注意的是,仅填写域名即可,不要填写 https://xxu.do,这会导致前端无法连接
ENCRYPT_ENABLE=false
ENCRYPT_KEY=
前端部署#
本次部署的方式:利用 GitHub Action 去构建 Shiroi 然后部署到远程服务器,主要参考了这篇文章。
首先在服务器中进行以下操作:
- 安装 
Nodejs和unzip 
# 安装 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 
npm i -g sharp pm2 pnpm 
- 在你的服务器家目录,新建 
shiro的目录,然后新建.env填写你的变量。 
cd && mkdir shiro && cd $_
vi .env
- 然后填入相应的环境变量,单域名的话 
NEXT_PUBLIC_API_URL和NEXT_PUBLIC_GATEWAY_URL如下填写即可,GH_TOKEN可从这里新建,权限勾选 repo 即可。 
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 反代#
单域名的示例:
## 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