diff --git a/README.md b/README.md index 53db4e1..beee4a4 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,10 @@ curl -fsSL https://raw.githubusercontent.com/zxyszx/NewSzxcn-Email/main/install. bash <(curl -fsSL https://raw.githubusercontent.com/zxyszx/NewSzxcn-Email/main/install.sh) ``` -空白服务器会进入防火墙、邮件域名、管理员账号和 Web 部署方式的引导。检测到 -`/opt/newszxcn-email/.env` 时,脚本会先询问是更新现有邮局、修复现有安装、退出, -还是完整备份旧目录后全新安装;不会再直接跳过引导并重启服务。更新会先备份数据库, -并在启动失败时自动回滚。 +脚本会先显示统一管理菜单。空白服务器默认选择安装,并进入防火墙、邮件域名、管理员 +账号和 Web 部署方式的引导;检测到已有安装时默认选择安全更新。选择重新安装会先将 +`/opt/newszxcn-email` 完整改名备份,再进入首次安装流程。更新会先备份数据库,并在 +启动失败时自动回滚。 脚本会自动完成: diff --git a/install.sh b/install.sh index 8e31f56..0934fb9 100755 --- a/install.sh +++ b/install.sh @@ -4,7 +4,7 @@ set -Eeuo pipefail REPOSITORY="zxyszx/NewSzxcn-Email" RAW_BASE="https://raw.githubusercontent.com/${REPOSITORY}/main" INSTALL_DIR="${LANQIN_INSTALL_DIR:-/opt/newszxcn-email}" -COMMAND="${1:-install}" +COMMAND="${1:-menu}" ROLLBACK_FILE="${INSTALL_DIR}/.rollback-image" NGINX_CONFIG="/etc/nginx/conf.d/newszxcn-email.conf" ACME_WEBROOT="/var/www/newszxcn-acme" @@ -21,7 +21,8 @@ NewSzxcn Email 管理命令 用法:newszxcn-email - install 首次安装;检测到已有安装时显示操作菜单 + menu 显示安装与运维菜单 + install 首次安装;已有安装会先完整备份再重新安装 update 备份数据库并更新到最新版 status 查看容器与健康状态 logs 持续查看运行日志 @@ -163,19 +164,24 @@ prompt_choice() { done } -prompt_existing_install_action() { - local public_url action - public_url="$(env_value LANQIN_PUBLIC_BASE_URL || true)" - prompt_text "\n[发现] 检测到已有 NewSzxcn Email 安装:${INSTALL_DIR}\n" - if [[ -n "${public_url}" ]]; then - prompt_text "[发现] 当前访问地址:${public_url}\n" +prompt_menu_choice() { + local default_value="$1" value="${LANQIN_MENU_ACTION:-}" + if [[ -z "${value}" ]] && ! has_tty; then + fail "非交互环境请直接使用 install、update、status 等子命令。" fi - prompt_text '请选择操作 [1]:\n1. 更新现有邮局(推荐,自动备份并支持回滚)\n2. 修复现有安装(保留配置和数据)\n3. 退出,不做任何修改\n4. 备份现有安装并全新安装\n' - if [[ -z "${LANQIN_EXISTING_ACTION:-}" ]] && ! has_tty; then - fail "非交互环境不能选择已有安装操作;更新请执行 newszxcn-email update。" - fi - action="$(prompt_choice LANQIN_EXISTING_ACTION "请选择 [1]: " "1" "4")" - printf '%s' "${action}" + while true; do + if [[ -z "${value}" ]] && has_tty; then + read -r -p "请选择 [${default_value}]: " value