Files
qipai/setup.sh
T
2026-06-15 16:13:30 +08:00

134 lines
3.6 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
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 "自助棋牌室系统部署菜单 ${QIPAI_DEPLOY_VERSION}"
echo "生产目录: ${APP_ROOT}"
echo "固定 API: ${QIPAI_API_ORIGIN}"
echo
}
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
}
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
}
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 "3. 安装或检查 EMQX"
echo "4. 配置域名与 HTTPS / 状态检查"
echo "5. 查看状态"
echo "6. 备份"
echo "7. 恢复"
echo "8. 回滚"
echo "9. 诊断"
echo "0. 退出"
printf "请选择: "
read -r choice
case "${choice}" in
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 "无效选项"; pause_menu ;;
esac
echo
done
}
if [ "${1:-}" = "--preflight" ]; then
qipai_preflight
elif [ "${1:-}" = "--status" ]; then
show_status
elif [ "${1:-}" = "--diagnose" ]; then
qipai_diagnose
else
main_menu "$@"
fi