deploy(M00-E): 完善菜单式部署骨架

This commit is contained in:
Codex
2026-06-15 16:13:30 +08:00
parent 46c6450ceb
commit c51ba43fa9
18 changed files with 545 additions and 59 deletions
+97 -33
View File
@@ -1,52 +1,101 @@
#!/usr/bin/env bash
set -euo pipefail
VERSION="0.0.1-m00-baseline"
APP_ROOT="/opt/apps"
REPO_SSH="ssh://git@127.0.0.1:2222/panda/qipai.git"
PUBLIC_API="https://api.txyundm.cn"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SETUP_DIR="${SCRIPT_DIR}/scripts/setup"
# shellcheck source=scripts/setup/lib.sh
. "${SETUP_DIR}/lib.sh"
# shellcheck source=scripts/setup/preflight.sh
. "${SETUP_DIR}/preflight.sh"
# shellcheck source=scripts/setup/init-layout.sh
. "${SETUP_DIR}/init-layout.sh"
# shellcheck source=scripts/setup/repo-status.sh
. "${SETUP_DIR}/repo-status.sh"
# shellcheck source=scripts/setup/deploy-business.sh
. "${SETUP_DIR}/deploy-business.sh"
# shellcheck source=scripts/setup/backup.sh
. "${SETUP_DIR}/backup.sh"
# shellcheck source=scripts/setup/restore.sh
. "${SETUP_DIR}/restore.sh"
# shellcheck source=scripts/setup/rollback.sh
. "${SETUP_DIR}/rollback.sh"
# shellcheck source=scripts/setup/diagnose.sh
. "${SETUP_DIR}/diagnose.sh"
print_header() {
echo "自助棋牌室系统部署菜单 ${VERSION}"
echo "自助棋牌室系统部署菜单 ${QIPAI_DEPLOY_VERSION}"
echo "生产目录: ${APP_ROOT}"
echo "固定 API: ${PUBLIC_API}"
echo "固定 API: ${QIPAI_API_ORIGIN}"
echo
}
check_arch() {
local kernel_arch dpkg_arch bits
kernel_arch="$(uname -m 2>/dev/null || echo unknown)"
dpkg_arch="$(dpkg --print-architecture 2>/dev/null || echo unknown)"
bits="$(getconf LONG_BIT 2>/dev/null || echo unknown)"
echo "内核架构: ${kernel_arch}"
echo "DPKG 架构: ${dpkg_arch}"
echo "用户空间位数: ${bits}"
if [ "${kernel_arch}" != "x86_64" ] || [ "${dpkg_arch}" != "amd64" ] || [ "${bits}" != "64" ]; then
echo "FAIL: 仅支持 Ubuntu 24.04 x86-64/amd64。"
exit 1
pause_menu() {
echo
printf "按回车返回菜单..."
read -r _ || true
}
run_action() {
local title="$1"
shift
echo
echo "== ${title} =="
"$@"
pause_menu
}
show_status() {
qipai_print_context
qipai_preflight || true
qipai_repo_status || true
if [ -f "$(qipai_current_release_file)" ]; then
qipai_info "current release manifest: $(qipai_current_release_file)"
cat "$(qipai_current_release_file)"
else
qipai_warn "current release manifest not found"
fi
}
quick_check() {
echo "== 启动快检 =="
check_arch
command -v git >/dev/null 2>&1 && echo "Git: PASS" || echo "Git: WARN 未安装"
command -v nginx >/dev/null 2>&1 && echo "Nginx: PASS" || echo "Nginx: WARN 未安装"
command -v node >/dev/null 2>&1 && echo "Node.js: PASS" || echo "Node.js: WARN 未安装"
echo "仓库: ${REPO_SSH}"
show_mqtt_status() {
qipai_info "EMQX target: native Ubuntu Apt package, no Docker"
qipai_info "MQTT broker host: 101.42.38.246"
qipai_info "MQTTX on server: forbidden"
if command -v emqx >/dev/null 2>&1; then
qipai_pass "emqx command exists"
emqx version 2>/dev/null || true
else
qipai_warn "emqx command not found"
fi
if command -v mosquitto_pub >/dev/null 2>&1; then
qipai_pass "mosquitto-clients available"
else
qipai_warn "mosquitto-clients not installed"
fi
}
not_implemented() {
echo "当前 M00 基线仅提供菜单骨架;该选项将在后续子阶段完善。"
show_https_status() {
qipai_info "domain: ${QIPAI_DOMAIN}"
qipai_info "origin: ${QIPAI_API_ORIGIN}"
qipai_info "app api: ${QIPAI_API_ORIGIN}/app-api"
qipai_info "admin api: ${QIPAI_API_ORIGIN}/admin-api"
if command -v nginx >/dev/null 2>&1; then
nginx -t
else
qipai_warn "nginx not installed"
fi
if command -v openssl >/dev/null 2>&1; then
qipai_info "TLS live check requires public DNS/network and is not forced in M00"
fi
}
main_menu() {
while true; do
print_header
echo "1. 首次安装"
echo "2. 更新业务服务"
echo "1. 首次安装 / 初始化目录"
echo "2. 更新业务服务 / 生成发布清单"
echo "3. 安装或检查 EMQX"
echo "4. 配置域名与 HTTPS"
echo "4. 配置域名与 HTTPS / 状态检查"
echo "5. 查看状态"
echo "6. 备份"
echo "7. 恢复"
@@ -56,14 +105,29 @@ main_menu() {
printf "请选择: "
read -r choice
case "${choice}" in
1|2|3|4|6|7|8) not_implemented ;;
5|9) quick_check ;;
1) run_action "首次安装 / 初始化目录" qipai_init_layout ;;
2) run_action "更新业务服务 / 生成发布清单" qipai_deploy_business ;;
3) run_action "安装或检查 EMQX" show_mqtt_status ;;
4) run_action "配置域名与 HTTPS / 状态检查" show_https_status ;;
5) run_action "查看状态" show_status ;;
6) run_action "备份" qipai_backup ;;
7) run_action "恢复" qipai_restore ;;
8) run_action "回滚" qipai_rollback ;;
9) run_action "诊断" qipai_diagnose ;;
0) exit 0 ;;
*) echo "无效选项" ;;
*) echo "无效选项"; pause_menu ;;
esac
echo
done
}
main_menu "$@"
if [ "${1:-}" = "--preflight" ]; then
qipai_preflight
elif [ "${1:-}" = "--status" ]; then
show_status
elif [ "${1:-}" = "--diagnose" ]; then
qipai_diagnose
else
main_menu "$@"
fi