Skip to content

Commit 850af48

Browse files
committed
fix(deploy): route by first deployment state
Check whether the install is first-run or existing before choosing the full wizard or one-click update configuration path.
1 parent a99a950 commit 850af48

2 files changed

Lines changed: 51 additions & 15 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797

9898
如果当前目录已有 `.env`,脚本会读取其中的端口、监听地址、数据库、Redis、管理密钥和 API 密钥作为默认值,后续重跑脚本时可直接回车复用原配置。
9999

100-
已有部署后只想补开启一键更新时,重新运行 `bash deploy.sh`,在「已有部署」步骤选择 **仅配置一键更新** 即可。该模式不会重新询问端口、监听范围、数据库、密钥等配置,也不会重写 `.env`
100+
脚本会先检查当前系统是首次部署还是已有部署,再选择部署线路。已有部署后只想补开启一键更新时,重新运行 `bash deploy.sh`,在「部署状态检查」步骤选择 **仅配置一键更新** 即可。该模式不会重新询问端口、监听范围、数据库、密钥等配置,也不会重写 `.env`
101101

102102
**场景 1:尚未克隆仓库(一行远程拉起)**
103103

deploy.sh

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -128,37 +128,74 @@ env_default() {
128128
printf "%s" "${value:-$fallback}"
129129
}
130130

131-
load_existing_env_defaults() {
131+
known_compose_service_exists() {
132+
local compose_file
133+
for compose_file in docker-compose.yml docker-compose.sqlite.yml docker-compose.local.yml docker-compose.sqlite.local.yml; do
134+
[[ -f "$compose_file" ]] || continue
135+
if [[ -n "$($COMPOSE_CMD -f "$compose_file" ps -q codex2api 2>/dev/null || true)" ]]; then
136+
EXISTING_COMPOSE_FILE="$compose_file"
137+
return 0
138+
fi
139+
done
140+
return 1
141+
}
142+
143+
detect_deployment_state() {
144+
DEPLOY_ACTION="full"
145+
DEPLOYMENT_STATE="first"
146+
DEPLOYMENT_REASON="未检测到 .env 或已创建的 compose 服务"
147+
EXISTING_COMPOSE_FILE=""
148+
132149
if [[ -f "$EXISTING_ENV_FILE" ]]; then
133-
success "检测到已有 .env,将作为交互默认值"
150+
DEPLOYMENT_STATE="existing"
151+
DEPLOYMENT_REASON="检测到已有 .env"
152+
fi
153+
154+
if known_compose_service_exists; then
155+
DEPLOYMENT_STATE="existing"
156+
if [[ -f "$EXISTING_ENV_FILE" ]]; then
157+
DEPLOYMENT_REASON="检测到已有 .env 和 compose 服务 ($EXISTING_COMPOSE_FILE)"
158+
else
159+
DEPLOYMENT_REASON="检测到已有 compose 服务 ($EXISTING_COMPOSE_FILE)"
160+
fi
134161
fi
135162
}
136163

137-
step_existing_deployment_action() {
138-
DEPLOY_ACTION="full"
139-
if [[ ! -f "$EXISTING_ENV_FILE" ]]; then
164+
step_deployment_route() {
165+
detect_deployment_state
166+
167+
echo ""
168+
printf "${BOLD}${CYAN}━━━ 部署状态检查 ━━━${NC}\n"
169+
echo ""
170+
if [[ "$DEPLOYMENT_STATE" == "first" ]]; then
171+
success "检测结果: 首次部署"
172+
info "$DEPLOYMENT_REASON"
173+
success "部署线路: 完整部署向导"
140174
return 0
141175
fi
142176

143-
echo ""
144-
printf "${BOLD}${CYAN}━━━ 已有部署 ━━━${NC}\n"
177+
success "检测结果: 已有部署"
178+
info "$DEPLOYMENT_REASON"
179+
if [[ -f "$EXISTING_ENV_FILE" ]]; then
180+
success "已有 .env 将作为交互默认值"
181+
fi
145182
echo ""
146183
echo " 1) 完整部署向导 — 重新确认端口、数据库、密钥等配置"
147184
echo " 2) 仅配置一键更新 — 只切换 Docker socket 挂载并重启服务"
148185
echo ""
149-
ask "请选择 (1 或 2)" "2" EXISTING_DEPLOY_CHOICE
186+
ask "请选择部署线路 (1 或 2)" "2" DEPLOY_ROUTE_CHOICE
150187

151-
case "$EXISTING_DEPLOY_CHOICE" in
188+
case "$DEPLOY_ROUTE_CHOICE" in
152189
1|full|deploy)
153190
DEPLOY_ACTION="full"
154-
success "进入完整部署向导"
191+
success "部署线路: 完整部署向导"
155192
;;
156193
2|update|socket|docker|watchtower)
157194
DEPLOY_ACTION="update_options"
158-
success "进入一键更新配置模式"
195+
success "部署线路: 仅配置一键更新"
159196
;;
160197
*)
161-
error "无效选择: $EXISTING_DEPLOY_CHOICE"
198+
error "无效选择: $DEPLOY_ROUTE_CHOICE"
162199
;;
163200
esac
164201
}
@@ -812,8 +849,7 @@ main() {
812849
bootstrap_repo "$@"
813850
preflight
814851
update_repo_code
815-
load_existing_env_defaults
816-
step_existing_deployment_action
852+
step_deployment_route
817853
if [[ "$DEPLOY_ACTION" == "update_options" ]]; then
818854
run_update_options_only
819855
exit 0

0 commit comments

Comments
 (0)