修复健康检查
This commit is contained in:
@@ -41,3 +41,5 @@ deploy/caddy/conf.d/show.caddy
|
|||||||
logs
|
logs
|
||||||
.gocache
|
.gocache
|
||||||
artifacts/
|
artifacts/
|
||||||
|
|
||||||
|
frontend/coverage/
|
||||||
+1
-1
@@ -165,7 +165,7 @@ HFB_SHOW_DIR=../hfb_show
|
|||||||
- 通过 Caddy 自动申请或续签 HTTPS 证书。
|
- 通过 Caddy 自动申请或续签 HTTPS 证书。
|
||||||
- 等待 MySQL、Redis 就绪。
|
- 等待 MySQL、Redis 就绪。
|
||||||
- 按顺序执行尚未应用的数据库迁移。
|
- 按顺序执行尚未应用的数据库迁移。
|
||||||
- 重启后端并检查 `https://你的域名/api/health`。
|
- 重启后端并在容器内检查 `http://127.0.0.1:8080/api/health`。默认不依赖公网 DNS、TLS 或 Caddy;如需检查公网入口,可设置 `PROD_HEALTH_URL=https://你的域名/api/health`。
|
||||||
|
|
||||||
如需部署完成后直接跟随查看后端日志:
|
如需部署完成后直接跟随查看后端日志:
|
||||||
|
|
||||||
|
|||||||
@@ -104,6 +104,12 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
expose:
|
expose:
|
||||||
- "8080"
|
- "8080"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "wget -q -O /dev/null -T 5 http://127.0.0.1:8080/api/health"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 6s
|
||||||
|
retries: 12
|
||||||
|
start_period: 10s
|
||||||
|
|
||||||
beszel:
|
beszel:
|
||||||
image: henrygd/beszel:0.18.7
|
image: henrygd/beszel:0.18.7
|
||||||
|
|||||||
+25
-7
@@ -69,7 +69,7 @@ show_help() {
|
|||||||
|
|
||||||
环境变量:
|
环境变量:
|
||||||
PROD_HEALTH_URL=https://你的域名/api/health
|
PROD_HEALTH_URL=https://你的域名/api/health
|
||||||
部署后健康检查地址,默认使用 CADDY_DOMAIN
|
部署后公网健康检查地址;设置后使用外部 curl 检查
|
||||||
PROD_PUBLIC_URL=https://你的域名
|
PROD_PUBLIC_URL=https://你的域名
|
||||||
输出给用户看的访问地址
|
输出给用户看的访问地址
|
||||||
PROD_READY_TIMEOUT=120
|
PROD_READY_TIMEOUT=120
|
||||||
@@ -591,18 +591,36 @@ run_migrations() {
|
|||||||
|
|
||||||
wait_http_ready() {
|
wait_http_ready() {
|
||||||
local attempt
|
local attempt
|
||||||
local url
|
local url="${HEALTH_URL}"
|
||||||
url="$(health_url)"
|
|
||||||
log "等待接口健康检查通过..."
|
if [[ -n "${url}" ]]; then
|
||||||
|
log "等待公网接口健康检查通过..."
|
||||||
|
for ((attempt = 1; attempt <= READY_TIMEOUT; attempt++)); do
|
||||||
|
if curl -fsS --max-time 5 "${url}" >/dev/null 2>&1; then
|
||||||
|
log_success "公网健康检查通过:${url}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
log_error "公网健康检查超时:${url}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
url="http://127.0.0.1:8080/api/health"
|
||||||
|
log "等待后端容器内健康检查通过..."
|
||||||
for ((attempt = 1; attempt <= READY_TIMEOUT; attempt++)); do
|
for ((attempt = 1; attempt <= READY_TIMEOUT; attempt++)); do
|
||||||
if curl -fsS --max-time 5 "${url}" >/dev/null 2>&1; then
|
if compose exec -T backend wget -q -O /dev/null -T 5 "${url}" >/dev/null 2>&1; then
|
||||||
log_success "健康检查通过:${url}"
|
log_success "容器内健康检查通过:${url}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
log_error "健康检查超时:${url}"
|
log_error "后端容器内健康检查超时:${url}"
|
||||||
|
log_warn "最近 backend 日志:"
|
||||||
|
compose logs --tail=120 backend || true
|
||||||
|
log_error "可继续执行:$(compose_user_cmd) logs backend"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user