- tasks/010-deploy.md: 按"仅业务服务、不部署反代、服务自托管管理端"重写, 补充四层进程降级、无 sudo 降权、上传上限两侧一致等实现说明与验收表 - deploy/uninstall.sh: 删除 nginx 站点清理逻辑(本项目从未安装过反代, 也不应改动运维侧的 nginx / IIS 配置) - scripts/package-release.sh: 修正产物结构注释,去掉已删除的 web-server/admin/nginx.conf 拷贝与 deploy/nginx 备份清理 - web-server/.env.example: 修正"容器内路径 / docker-compose 挂载"过时注释 - contracts/rest-api.yaml: 服务地址描述改为业务服务部署语义
75 lines
3.3 KiB
Bash
Executable File
75 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================================
|
|
# OpenDance Studio Web 服务端 —— 卸载(Linux 原生站点)
|
|
#
|
|
# 默认**保留**上传文件与数据库数据;只有显式加 --purge 才删除程序目录与上传目录。
|
|
# 数据库从来不由本脚本管理,永不删除。
|
|
#
|
|
# 用法:
|
|
# bash deploy/uninstall.sh # 停服务、禁用站点,保留数据(需 root)
|
|
# bash deploy/uninstall.sh --purge # 同时删除程序目录与上传文件
|
|
# ============================================================
|
|
set -euo pipefail
|
|
|
|
APP_DIR="${APP_DIR:-/opt/opendance}"
|
|
STORAGE_DIR="${STORAGE_DIR:-/var/lib/opendance/storage}"
|
|
SERVICE_USER="${SERVICE_USER:-opendance}"
|
|
PURGE=0
|
|
[ "${1:-}" = "--purge" ] && PURGE=1
|
|
|
|
log() { printf '\033[1;34m[uninstall]\033[0m %s\n' "$*"; }
|
|
warn() { printf '\033[1;33m[warn]\033[0m %s\n' "$*"; }
|
|
die() { printf '\033[1;31m[error]\033[0m %s\n' "$*" >&2; exit 1; }
|
|
|
|
[ "$(id -u)" -eq 0 ] || die "需要 root 权限。请以 root 身份执行,例如:
|
|
su -c 'bash deploy/uninstall.sh' 或 sudo bash deploy/uninstall.sh"
|
|
|
|
log "停止并移除 opendance-api 服务"
|
|
# 与 install.sh 的四层降级一一对应,避免在非 systemd 系统上留下仍在运行的进程
|
|
if [ -d /run/systemd/system ] && command -v systemctl >/dev/null 2>&1; then
|
|
systemctl stop opendance-api 2>/dev/null || true
|
|
systemctl disable opendance-api 2>/dev/null || true
|
|
rm -f /etc/systemd/system/opendance-api.service
|
|
systemctl daemon-reload
|
|
elif command -v rc-service >/dev/null 2>&1 && [ -f /etc/init.d/opendance-api ]; then
|
|
rc-service opendance-api stop 2>/dev/null || true
|
|
rc-update del opendance-api default 2>/dev/null || true
|
|
rm -f /etc/init.d/opendance-api
|
|
elif [ -f /etc/init.d/opendance-api ]; then
|
|
/etc/init.d/opendance-api stop 2>/dev/null || true
|
|
command -v update-rc.d >/dev/null 2>&1 && update-rc.d -f opendance-api remove 2>/dev/null || true
|
|
command -v chkconfig >/dev/null 2>&1 && chkconfig --del opendance-api 2>/dev/null || true
|
|
rm -f /etc/init.d/opendance-api
|
|
fi
|
|
|
|
# 降级模式(nohup 后台进程)的停止与开机自启清理
|
|
if [ -f "$APP_DIR/deploy/ctl.sh" ]; then
|
|
APP_DIR="$APP_DIR" SERVICE_USER="$SERVICE_USER" bash "$APP_DIR/deploy/ctl.sh" stop 2>/dev/null || true
|
|
fi
|
|
if command -v crontab >/dev/null 2>&1; then
|
|
if crontab -l 2>/dev/null | grep -qF "$APP_DIR/deploy/ctl.sh start"; then
|
|
crontab -l 2>/dev/null | grep -vF "$APP_DIR/deploy/ctl.sh start" | crontab -
|
|
log "已移除 crontab 开机自启"
|
|
fi
|
|
fi
|
|
|
|
# 说明:反向代理不属于本项目交付物,install.sh 从未安装/配置过任何反代,
|
|
# 因此卸载时也不需要(且不应该)改动 nginx / IIS 的任何配置。
|
|
# 若运维侧曾按 deploy/proxy/ 自行加过站点,请由运维侧自行清理。
|
|
|
|
if [ "$PURGE" -eq 1 ]; then
|
|
warn "删除程序目录 $APP_DIR 与上传目录 $STORAGE_DIR"
|
|
rm -rf "$APP_DIR" "$STORAGE_DIR"
|
|
if id -u "$SERVICE_USER" >/dev/null 2>&1; then
|
|
userdel "$SERVICE_USER" 2>/dev/null || true
|
|
log "已删除系统用户 $SERVICE_USER"
|
|
fi
|
|
log "完成(数据库未做任何改动)"
|
|
else
|
|
log "完成。已保留:"
|
|
echo " 程序目录:$APP_DIR"
|
|
echo " 上传目录:$STORAGE_DIR"
|
|
echo " 如需一并删除(root 身份):bash deploy/uninstall.sh --purge"
|
|
fi
|
|
echo " 数据库:始终由部署方自行管理,本脚本不做任何改动"
|