feat(web): 移除 Docker 与反代部署,改为 Linux 业务服务并自带管理端托管

需求变更:Web 端只保留业务需求,反向代理交由另外的服务处理,
本项目仅提供 IIS / nginx 反代说明文档,不部署反代。

主要改动:
- web-server: 新增管理端静态托管(ADMIN_DIR、SPA 深链接回退),
  反代因此只需一条全匹配转发规则;新增 adminDir 配置项
- deploy/install.sh: 删除 nginx 安装与站点配置逻辑,改为原生 Linux
  服务部署(systemd → OpenRC → SysVinit → 后台进程四级降级),
  打印反代交接指引
- deploy/ctl.sh: 启停/状态/日志脚本
- deploy/proxy/: 新增反代说明文档(README.md、nginx.conf.example、
  web.config.example),标注上传上限与超时必须同步调整
- 删除 deploy/nginx/、web-server/admin/nginx.conf、Dockerfile、
  docker-compose.yml、.dockerignore
- scripts/package-release.sh: 锚定排除规则 + 产物完整性校验
- 文档同步:README.txt、DSH.md、project.yaml、tasks/008、tasks/010
This commit is contained in:
2026-09-15 01:25:19 +08:00
parent 653d9d168c
commit 8c76b0a599
17 changed files with 581 additions and 244 deletions
+34 -49
View File
@@ -2,9 +2,9 @@
# ============================================================
# OpenDance Studio Web 服务端 —— Linux 原生站点部署脚本
#
# 部署形态(不使用 Docker):
# nginx ── 静态托管管理端 + 反向代理 API
# └──▶ systemd 托管的 Node 进程(NestJS,仅监听 127.0.0.1)
# 部署形态(不使用 Docker、不部署反向代理):
# 本脚本只负责把 NestJS 业务服务跑起来(systemd / OpenRC / SysVinit / 后台进程)。
# 该服务自带管理端页面,反向代理由另外的服务负责,配置说明见 deploy/proxy/。
#
# 数据库仍是部署方提供的**现有 MySQL / MariaDB 实例**,本脚本不安装、不管理数据库。
#
@@ -16,8 +16,7 @@
# APP_DIR 安装目录(默认 /opt/opendance)
# SERVICE_USER 运行服务的系统用户(默认 opendance)
# STORAGE_DIR 上传文件目录(默认 /var/lib/opendance/storage)
# SERVER_NAME nginx server_name(默认 _)
# SKIP_NGINX=1 只装 API 服务,不配置 nginx
# PORT API 监听端口(默认 3000)
# ============================================================
set -euo pipefail
# 失败时打印出错行号,避免只看到半截输出
@@ -29,7 +28,6 @@ cd "$SRC_DIR"
APP_DIR="${APP_DIR:-/opt/opendance}"
SERVICE_USER="${SERVICE_USER:-opendance}"
STORAGE_DIR="${STORAGE_DIR:-/var/lib/opendance/storage}"
SERVER_NAME="${SERVER_NAME:-_}"
API_HOST="127.0.0.1"
API_PORT="${PORT:-3000}"
@@ -88,7 +86,7 @@ http_ok() {
}
# ---------- 0. 前置检查 ----------
[ "$(id -u)" -eq 0 ] || die "需要 root 权限(安装 systemd 服务与 nginx 站点)。
[ "$(id -u)" -eq 0 ] || die "需要 root 权限(安装系统服务、创建服务用户)。
请以 root 身份执行,例如: su -c 'bash deploy/install.sh' 或 sudo bash deploy/install.sh"
# 缺少 deploy/.env 时,若安装目录里已有上次安装留下的配置,直接复用。
@@ -385,46 +383,31 @@ if [ "$READY" -ne 1 ]; then
fi
log "API 已就绪:$(http_get "http://${API_HOST}:${API_PORT}/health" | head -c 200)"
# ---------- 5. nginx ----------
if [ "${SKIP_NGINX:-0}" = "1" ]; then
warn "SKIP_NGINX=1,跳过 nginx 配置。API 仅在 ${API_HOST}:${API_PORT} 提供。"
else
if ! command -v nginx >/dev/null 2>&1; then
warn "未安装 nginx,跳过站点配置。"
warn " 安装后重新执行本脚本,或手动把 deploy/nginx/opendance.conf 放到 nginx 配置目录。"
else
log "配置 nginx 站点"
NGINX_AVAILABLE=/etc/nginx/sites-available
NGINX_ENABLED=/etc/nginx/sites-enabled
# RHEL 系发行版没有 sites-available 约定
if [ ! -d "$NGINX_AVAILABLE" ]; then
NGINX_AVAILABLE=/etc/nginx/conf.d
NGINX_ENABLED=/etc/nginx/conf.d
fi
# ---------- 5. 反向代理(本脚本**不部署**,仅给出说明) ----------
# 需求变更:Web 端只负责业务服务,反向代理由另外的服务/团队提供。
# 本服务已自带管理端页面,因此反代只需把请求**整体转发**到本端口,
# 无需在代理层再托管静态文件、也无需配置 SPA 回退(服务端已处理)。
cat <<EOF
DEST="$NGINX_AVAILABLE/opendance.conf"
sed -e "s|__APP_DIR__|$APP_DIR|g" \
-e "s|__SERVER_NAME__|$SERVER_NAME|g" \
-e "s|__API_HOST__|$API_HOST|g" \
-e "s|__API_PORT__|$API_PORT|g" \
"$APP_DIR/deploy/nginx/opendance.conf" > "$DEST"
------------------------------------------------------------
反向代理说明(本脚本不部署反代)
------------------------------------------------------------
本服务已同时提供 API 与管理端页面,反代只需将请求整体转发至:
http://<本机地址>:${API_PORT}
if [ "$NGINX_ENABLED" != "$NGINX_AVAILABLE" ]; then
ln -sf "$DEST" "$NGINX_ENABLED/opendance.conf"
if [ -e "$NGINX_ENABLED/default" ]; then
rm -f "$NGINX_ENABLED/default"
log "已移除 nginx 默认站点(避免抢占 80 端口)"
fi
fi
健康检查(可用于反代的存活探测):http://<本机地址>:${API_PORT}/health
上传上限需在代理层同步放开(本服务为 $(( ${UPLOAD_MAX_BYTES:-536870912} / 1024 / 1024 )) MiB)
if nginx -t; then
systemctl reload nginx 2>/dev/null || systemctl restart nginx 2>/dev/null || nginx -s reload
log "nginx 已重载"
else
die "nginx 配置校验失败,请检查 $DEST"
fi
fi
fi
配置样例与完整说明:
deploy/proxy/nginx.conf.example nginx 站点配置
deploy/proxy/web.config.example IIS(ARR + URL Rewrite)配置
deploy/proxy/README.md IIS / nginx 反代说明文档
注意:若反代与后端不在同一台机器,需保持 HOST=0.0.0.0 并用防火墙限制来源;
若在同一台机器,建议把 HOST 改为 127.0.0.1。
------------------------------------------------------------
EOF
# ---------- 6. 完成 ----------
HOST_HINT="${DEPLOY_HOST:-<服务器IP>}"
@@ -456,11 +439,13 @@ esac
cat <<EOF
============================================================
OpenDance Studio Web 服务端已部署(Linux 原生站点,无 Docker)
管理端首页: http://${HOST_HINT}/
API 前缀: http://${HOST_HINT}/api
健康检查: http://${HOST_HINT}/health
契约快照: http://${HOST_HINT}/contracts/
OpenDance Studio Web 服务端已部署(业务服务,无 Docker、不含反向代理)
服务监听: http://${API_HOST}:${API_PORT}/
管理端首页: http://${API_HOST}:${API_PORT}/ (由本服务直接提供)
API 前缀: http://${API_HOST}:${API_PORT}/api
健康检查: http://${API_HOST}:${API_PORT}/health
契约快照: http://${API_HOST}:${API_PORT}/contracts/
对外访问: 由另外的反向代理服务转发到上述地址(见 deploy/proxy/)
数据库: 使用现有实例 ${DB_HOST}:${DB_PORT:-3306}/${DB_NAME}
上传目录: ${STORAGE_DIR}
程序目录: ${APP_DIR}