fix:优化启动脚本

This commit is contained in:
Daniel
2026-03-08 00:37:18 +08:00
parent 7d7f13d009
commit 890dea096b
4 changed files with 25 additions and 10 deletions

View File

@@ -1,8 +1,9 @@
# 将 /api 请求转发到本机 Node 后端(端口与 start-api.sh 一致,默认 5599 # 将 /api 请求转发到本机 Node 后端(端口与 start-api.sh 一致,默认 5599
# 注意proxy_pass 末尾加 /,这样 /api/config 会转发为 /config后端路由无 /api 前缀)
# 把下面这段加入 server { ... } 内,建议放在 root 指令之后、其他 location 之前 # 把下面这段加入 server { ... } 内,建议放在 root 指令之后、其他 location 之前
location /api { location /api {
proxy_pass http://127.0.0.1:5599; proxy_pass http://127.0.0.1:5599/;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;

View File

@@ -15,7 +15,7 @@ server {
} }
location /api { location /api {
proxy_pass http://127.0.0.1:5599; proxy_pass http://127.0.0.1:5599/;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;

View File

@@ -35,12 +35,12 @@
2. 左侧选 **反向代理****添加反向代理** 2. 左侧选 **反向代理****添加反向代理**
3. 填写: 3. 填写:
- **代理名称**:随意,如 `api` - **代理名称**:随意,如 `api`
- **目标 URL**`http://127.0.0.1:5599` - **目标 URL**`http://127.0.0.1:5599/`**末尾必须带 `/`**,这样 `/api/config` 会转成后端的 `/config`,因本后端路由无 `/api` 前缀)
- **代理目录**`/api`(表示只把 `/api` 开头的请求转给后端) - **代理目录**`/api`(表示只把 `/api` 开头的请求转给后端)
- **发送域名**:默认 `$host` 即可 - **发送域名**:默认 `$host` 即可
4. 保存后,宝塔会自动改写 Nginx 配置并重载,无需手改配置文件 4. 保存后,宝塔生成的 `proxy_pass` 没有末尾 `/`,请到 **设置 → 配置文件** 中把 `proxy_pass http://127.0.0.1:5599;` 改为 `proxy_pass http://127.0.0.1:5599/;`,再重载 Nginx
效果:访问 `http://你的域名/api/config`Nginx 会转发到 `http://127.0.0.1:5599/api/config` 效果:访问 `http://你的域名/api/config`Nginx 会转发到 `http://127.0.0.1:5599/config`,后端才能正确返回
--- ---
@@ -103,7 +103,7 @@ export API_BASE_URL="http://你的域名或IP:5599"
1. **前端**:浏览器访问 `http://你的域名`,应能打开全景页。 1. **前端**:浏览器访问 `http://你的域名`,应能打开全景页。
2. **API** 2. **API**
- 同机执行:`curl -s http://127.0.0.1:5599/api/config`,应返回 JSON。 - 同机执行:`curl -s http://127.0.0.1:5599/config`,应返回 JSON。
- 或访问:`http://你的域名/api/config`,应返回相同内容(说明反代生效)。 - 或访问:`http://你的域名/api/config`,应返回相同内容(说明反代生效)。
若 `/api/config` 报 502多半是 5599 端口未启或未监听:用方式 A 再跑一次 `./run.sh`,或用方式 B 在宝塔 Node 项目中启动/重启。 若 `/api/config` 报 502多半是 5599 端口未启或未监听:用方式 A 再跑一次 `./run.sh`,或用方式 B 在宝塔 Node 项目中启动/重启。
@@ -123,7 +123,7 @@ location / {
} }
location /api { location /api {
proxy_pass http://127.0.0.1:5599; proxy_pass http://127.0.0.1:5599/;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
@@ -141,7 +141,7 @@ location /api {
| 步骤 | 说明 | | 步骤 | 说明 |
|------|------| |------|------|
| 1. 网站根目录 | 指向 `项目根目录/dist` | | 1. 网站根目录 | 指向 `项目根目录/dist` |
| 2. 反向代理 | 代理目录 `/api` → 目标 `http://127.0.0.1:5599` | | 2. 反向代理 | 代理目录 `/api` → 目标 `http://127.0.0.1:5599/`(末尾带 `/` |
| 3. 后端保活 | 用 `./run.sh`(或 `USE_PM2=1 ./run.sh`),或用宝塔 Node 项目托管 `server/index.js` 端口 5599 | | 3. 后端保活 | 用 `./run.sh`(或 `USE_PM2=1 ./run.sh`),或用宝塔 Node 项目托管 `server/index.js` 端口 5599 |
按上述配置后,在宝塔中即可正常访问前端,且 `/api` 请求会由 Nginx 转发到本机 Node 服务并正常运行。 按上述配置后,在宝塔中即可正常访问前端,且 `/api` 请求会由 Nginx 转发到本机 Node 服务并正常运行。

18
run.sh
View File

@@ -1,9 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 部署流程:拉代码 → 安装依赖 → 构建前端到 dist/ → 后台启动后端 API5599 # 部署流程:拉代码 → 安装依赖 → 构建前端到 dist/ →(可选)同步到 Nginx root → 后台启动 API5599
# 若 Nginx 未反代 /api请先设置 API_BASE_URL 再执行,例如: # 若 Nginx 未反代 /api请先设置 API_BASE_URL 再执行,例如:
# export API_BASE_URL="http://你的域名或IP:5599" # export API_BASE_URL="http://你的域名或IP:5599"
# ./run.sh # ./run.sh
# 使用 pm2 保活推荐export USE_PM2=1 && ./run.sh # 使用 pm2 保活推荐export USE_PM2=1 && ./run.sh
# 若项目在子目录、Nginx root 指向固定目录,构建后同步到该目录,例如:
# export DEPLOY_DIST=/www/wwwroot/view.airtep.com/dist
# ./run.sh
set -e set -e
cd "$(dirname "$0")" cd "$(dirname "$0")"
@@ -21,6 +24,17 @@ fi
node build.js node build.js
# 若设置了 DEPLOY_DIST与 Nginx root 一致),将 dist/ 同步到该目录以便访问
if [ -n "$DEPLOY_DIST" ]; then
mkdir -p "$DEPLOY_DIST"
if command -v rsync >/dev/null 2>&1; then
rsync -a --delete dist/ "$DEPLOY_DIST/"
else
(cd dist && find . -mindepth 1 -maxdepth 1 -exec cp -r {} "$DEPLOY_DIST/" \;)
fi
echo "[run.sh] 已同步 dist/ 到 $DEPLOY_DIST"
fi
# 后台启动 API优先 pm2否则 nohup # 后台启动 API优先 pm2否则 nohup
if [ -n "$USE_PM2" ] && command -v pm2 >/dev/null 2>&1; then if [ -n "$USE_PM2" ] && command -v pm2 >/dev/null 2>&1; then
echo "[run.sh] 使用 pm2 启动 API端口 ${API_PORT}..." echo "[run.sh] 使用 pm2 启动 API端口 ${API_PORT}..."
@@ -38,4 +52,4 @@ else
exec bash start-api.sh exec bash start-api.sh
fi fi
echo "[run.sh] 部署完成。前端静态在 dist/API 端口 ${API_PORT}。检查: curl -s http://127.0.0.1:${API_PORT}/api/config" echo "[run.sh] 部署完成。前端静态在 dist/API 端口 ${API_PORT}。检查: curl -s http://127.0.0.1:${API_PORT}/config"