介紹#
昨天剛對博客的架構進行了一波更新,今早醒來發現伺服器到期了,導致網站直接 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;
}
}
結語#
本次重新採取新的前端部署方式,確實是解決了內存佔用過高的問題。
另外,也帶來一個教訓,一定要備份好 .env
文件,這對於重新部署來說會避免很多麻煩。
此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://xxu.do/posts/geek/redeploy-MixSpace%2BShiroi