deploy(M00-E): 完善菜单式部署骨架
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user