@@ -134,6 +134,35 @@ load_existing_env_defaults() {
134134 fi
135135}
136136
137+ step_existing_deployment_action () {
138+ DEPLOY_ACTION=" full"
139+ if [[ ! -f " $EXISTING_ENV_FILE " ]]; then
140+ return 0
141+ fi
142+
143+ echo " "
144+ printf " ${BOLD}${CYAN} ━━━ 已有部署 ━━━${NC} \n"
145+ echo " "
146+ echo " 1) 完整部署向导 — 重新确认端口、数据库、密钥等配置"
147+ echo " 2) 仅配置一键更新 — 只切换 Docker socket 挂载并重启服务"
148+ echo " "
149+ ask " 请选择 (1 或 2)" " 2" EXISTING_DEPLOY_CHOICE
150+
151+ case " $EXISTING_DEPLOY_CHOICE " in
152+ 1|full|deploy)
153+ DEPLOY_ACTION=" full"
154+ success " 进入完整部署向导"
155+ ;;
156+ 2|update|socket|docker|watchtower)
157+ DEPLOY_ACTION=" update_options"
158+ success " 进入一键更新配置模式"
159+ ;;
160+ * )
161+ error " 无效选择: $EXISTING_DEPLOY_CHOICE "
162+ ;;
163+ esac
164+ }
165+
137166is_codex2api_repo () {
138167 [[ -f " docker-compose.yml" ]] && [[ -f " deploy.sh" ]] \
139168 && grep -q ' ^name: codex2api' docker-compose.yml 2> /dev/null
@@ -382,7 +411,11 @@ step_build_mode() {
382411# ---------- 第六步:更新能力 ----------
383412step_update_options () {
384413 echo " "
385- printf " ${BOLD}${CYAN} ━━━ 6/7 更新能力 ━━━${NC} \n"
414+ if [[ " ${DEPLOY_ACTION:- full} " == " update_options" ]]; then
415+ printf " ${BOLD}${CYAN} ━━━ 更新能力 ━━━${NC} \n"
416+ else
417+ printf " ${BOLD}${CYAN} ━━━ 6/7 更新能力 ━━━${NC} \n"
418+ fi
386419 echo " "
387420
388421 if [[ " $BUILD_MODE " == " local" ]]; then
@@ -416,6 +449,96 @@ step_update_options() {
416449 esac
417450}
418451
452+ infer_existing_deploy_config () {
453+ PORT=" $( env_default CODEX_PORT " $( env_default PORT " 8080" ) " ) "
454+ if ! [[ " $PORT " =~ ^[0-9]+$ ]] || (( PORT < 1 || PORT > 65535 )) ; then
455+ error " 已有 .env 中的端口无效: $PORT "
456+ fi
457+
458+ local bind_default db_default
459+ bind_default=" $( env_default BIND_HOST " 0.0.0.0" ) "
460+ case " $bind_default " in
461+ 127.* |localhost)
462+ BIND_HOST=" 127.0.0.1"
463+ BIND_MODE=" loopback"
464+ ;;
465+ * )
466+ BIND_HOST=" 0.0.0.0"
467+ BIND_MODE=" all"
468+ ;;
469+ esac
470+
471+ db_default=" $( env_default DATABASE_DRIVER " sqlite" ) "
472+ db_default=" $( printf " %s" " $db_default " | tr ' [:upper:]' ' [:lower:]' ) "
473+ case " $db_default " in
474+ postgres|postgresql|pg)
475+ DB_MODE=" postgres"
476+ ;;
477+ * )
478+ DB_MODE=" sqlite"
479+ ;;
480+ esac
481+
482+ ADMIN_SECRET=" $( env_default ADMIN_SECRET " " ) "
483+ API_KEYS=" $( env_default CODEX_API_KEYS " " ) "
484+ BUILD_MODE=" image"
485+
486+ if existing_local_build_compose_active; then
487+ BUILD_MODE=" local"
488+ fi
489+ }
490+
491+ existing_local_build_compose_active () {
492+ local compose_file
493+ if [[ " ${DB_MODE:- } " == " sqlite" ]]; then
494+ compose_file=" docker-compose.sqlite.local.yml"
495+ else
496+ compose_file=" docker-compose.local.yml"
497+ fi
498+
499+ [[ -f " $compose_file " ]] || return 1
500+ [[ -n " $( $COMPOSE_CMD -f " $compose_file " ps -q codex2api 2> /dev/null || true) " ]]
501+ }
502+
503+ confirm_update_options_only () {
504+ echo " "
505+ printf " ${BOLD}${CYAN} ━━━ 配置确认 ━━━${NC} \n"
506+ echo " "
507+ echo " 模式: 仅配置一键更新"
508+ echo " 端口: $PORT "
509+ if [[ " $BIND_MODE " == " loopback" ]]; then
510+ echo " 监听范围: 127.0.0.1 (仅本机访问)"
511+ else
512+ echo " 监听范围: 0.0.0.0 (全部网络)"
513+ fi
514+ echo " 数据库: $DB_MODE "
515+ echo " 构建方式: $( [[ " $BUILD_MODE " == " image" ]] && echo " 拉取镜像" || echo " 本地构建" ) "
516+ if [[ " $BUILD_MODE " == " local" ]]; then
517+ echo " 一键更新: 本地构建无需挂载"
518+ else
519+ echo " 一键更新: $( [[ " ${ENABLE_DOCKER_SOCKET:- false} " == " true" ]] && echo " 启用 Docker socket 挂载" || echo " 未启用" ) "
520+ fi
521+ echo " "
522+ ask " 确认应用并重启服务? (y/n)" " y" CONFIRM
523+ if [[ " $CONFIRM " != " y" && " $CONFIRM " != " Y" ]]; then
524+ warn " 已取消"
525+ exit 0
526+ fi
527+ }
528+
529+ run_update_options_only () {
530+ infer_existing_deploy_config
531+ step_update_options
532+ if [[ " $BUILD_MODE " == " local" ]]; then
533+ success " 当前为本地构建部署,一键更新无需 Docker socket 挂载,未重启服务"
534+ return 0
535+ fi
536+ confirm_update_options_only
537+ resolve_compose_file
538+ apply_docker_socket_option
539+ deploy
540+ }
541+
419542# ---------- 第七步:确认 ----------
420543step_confirm () {
421544 echo " "
@@ -690,6 +813,11 @@ main() {
690813 preflight
691814 update_repo_code
692815 load_existing_env_defaults
816+ step_existing_deployment_action
817+ if [[ " $DEPLOY_ACTION " == " update_options" ]]; then
818+ run_update_options_only
819+ exit 0
820+ fi
693821 step_port
694822 step_bind
695823 step_database
0 commit comments