forked from linkong/planet
release: bump version to 0.74.3
This commit is contained in:
117
planet.sh
117
planet.sh
@@ -229,6 +229,8 @@ prepare_uv_build_config() {
|
||||
|
||||
prepare_uv_build_config
|
||||
|
||||
source "$SCRIPT_DIR/scripts/lib/docker-bootstrap.zsh"
|
||||
|
||||
# Shell / Docker helpers
|
||||
is_pid() {
|
||||
[[ "${1:-}" =~ ^[0-9]+$ ]] && [ "$1" -gt 0 ]
|
||||
@@ -373,14 +375,6 @@ write_port_state() {
|
||||
chmod 600 "$PLANET_PORT_STATE_FILE" 2>/dev/null || true
|
||||
}
|
||||
|
||||
compose_available() {
|
||||
docker compose version >/dev/null 2>&1
|
||||
}
|
||||
|
||||
compose_v1_available() {
|
||||
command -v docker-compose >/dev/null 2>&1
|
||||
}
|
||||
|
||||
report_missing_compose() {
|
||||
clear_wait_spinner
|
||||
log_error "未检测到可用的 Docker Compose"
|
||||
@@ -394,27 +388,9 @@ report_missing_compose() {
|
||||
return 1
|
||||
}
|
||||
|
||||
buildx_version() {
|
||||
docker buildx version 2>/dev/null | awk '{print $2}' | sed 's/^v//'
|
||||
}
|
||||
|
||||
buildx_meets_minimum() {
|
||||
local current_version="$1"
|
||||
local required_version="$2"
|
||||
|
||||
[ -n "$current_version" ] || return 1
|
||||
[ -n "$required_version" ] || return 1
|
||||
|
||||
if [ "$(printf '%s\n%s\n' "$required_version" "$current_version" | sort -V | head -n 1)" = "$required_version" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
log_buildx_diagnostics_if_needed() {
|
||||
local current_buildx_version=""
|
||||
local required_buildx_version="0.17.0"
|
||||
local required_buildx_version="$DOCKER_MIN_BUILDX_VERSION"
|
||||
|
||||
current_buildx_version="$(buildx_version)"
|
||||
|
||||
@@ -440,6 +416,10 @@ compose_up() {
|
||||
if docker compose "${args[@]}"; then
|
||||
return 0
|
||||
fi
|
||||
if ! compose_v1_available; then
|
||||
log_error "Docker Compose 执行失败: docker compose ${arg_text}"
|
||||
return 1
|
||||
fi
|
||||
log_warn "docker compose 执行失败,回退到 docker-compose v1"
|
||||
fi
|
||||
|
||||
@@ -1298,47 +1278,6 @@ format_wait_elapsed_seconds() {
|
||||
'
|
||||
}
|
||||
|
||||
docker_daemon_available() {
|
||||
docker info >/dev/null 2>&1
|
||||
}
|
||||
|
||||
log_docker_daemon_diagnostics() {
|
||||
local docker_service_status=""
|
||||
local docker_socket_status=""
|
||||
local service_hint="sudo systemctl enable --now docker.socket && sudo systemctl restart docker"
|
||||
|
||||
docker_service_status="$(systemctl is-active docker 2>/dev/null || true)"
|
||||
docker_socket_status="$(systemctl is-active docker.socket 2>/dev/null || true)"
|
||||
|
||||
if [ -S /var/run/docker.sock ] && [ ! -r /var/run/docker.sock ]; then
|
||||
log_note "检测到 /var/run/docker.sock 存在,但当前用户无法访问。"
|
||||
log_note "请确认当前用户已加入 docker 组,并重新登录会话。"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$docker_service_status" = "active" ]; then
|
||||
log_note "Docker CLI 可执行,但当前会话仍无法连接 daemon。"
|
||||
log_note "请先执行: docker info"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$docker_service_status" = "failed" ] || [ "$docker_socket_status" = "failed" ]; then
|
||||
log_note "检测到 Docker daemon 当前未正常运行。"
|
||||
log_note "可先执行: ${service_hint}"
|
||||
log_note "如仍失败,继续查看: journalctl -u docker.service -n 50 --no-pager"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$docker_socket_status" != "active" ]; then
|
||||
log_note "检测到 Docker socket 未激活,daemon 可能无法通过 systemd socket activation 启动。"
|
||||
log_note "可先执行: ${service_hint}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_note "当前无法连接 Docker daemon,请先执行: docker info"
|
||||
log_note "若 daemon 未启动,可尝试: ${service_hint}"
|
||||
}
|
||||
|
||||
print_database_failure_diagnostics() {
|
||||
if ! docker_daemon_available; then
|
||||
log_note "数据库容器尚未真正开始启动,当前失败更像是 Docker 运行时不可用。"
|
||||
@@ -2505,15 +2444,16 @@ wait_for_postgres_health() {
|
||||
}
|
||||
|
||||
start_database_services() {
|
||||
docker start planet_postgres planet_redis >/dev/null 2>&1 || compose_up up -d postgres redis >/dev/null 2>&1
|
||||
# Reconcile existing containers too; docker start cannot apply changed port bindings.
|
||||
compose_up up -d --no-deps postgres redis
|
||||
}
|
||||
|
||||
restart_database_services() {
|
||||
docker restart planet_postgres planet_redis >/dev/null 2>&1 || compose_up up -d postgres redis >/dev/null 2>&1
|
||||
start_database_services && docker restart planet_postgres planet_redis
|
||||
}
|
||||
|
||||
start_postgres_service() {
|
||||
docker start planet_postgres >/dev/null 2>&1 || compose_up up -d postgres >/dev/null 2>&1
|
||||
compose_up up -d --no-deps postgres
|
||||
}
|
||||
|
||||
# Backend lifecycle helpers
|
||||
@@ -4046,6 +3986,21 @@ asyncio.run(init_db())
|
||||
PY
|
||||
}
|
||||
|
||||
verify_backend_database_connection() {
|
||||
local check_status=0
|
||||
local check_command=("$SCRIPT_DIR/.venv/bin/python" "$SCRIPT_DIR/scripts/check_database_connection.py")
|
||||
|
||||
set_wait_detail "验证后端实际 PostgreSQL 地址、端口与认证"
|
||||
run_command_with_spinner "验证后端数据库连接" "${check_command[@]}" || check_status=$?
|
||||
# Exit 2 means missing published ports; credentials and other failures must not recreate data services.
|
||||
[ "$check_status" -eq 2 ] || return "$check_status"
|
||||
|
||||
log_warn "PostgreSQL 实际端口映射不匹配,保留数据卷并按 Compose 配置重建一次"
|
||||
compose_up up -d --no-deps --force-recreate postgres || return 1
|
||||
wait_for_postgres_health || return 1
|
||||
run_command_with_spinner "重新验证后端数据库连接" "${check_command[@]}"
|
||||
}
|
||||
|
||||
planet_app_services_running() {
|
||||
local backend_port=""
|
||||
local frontend_port=""
|
||||
@@ -4109,6 +4064,14 @@ init() {
|
||||
|
||||
print_splash
|
||||
|
||||
start_wait_session "准备 Docker 运行环境"
|
||||
if ! ensure_docker_runtime "${PLANET_COMMAND_ARGS[@]}"; then
|
||||
stop_wait_session
|
||||
exit 1
|
||||
fi
|
||||
stop_wait_session
|
||||
log_success "Docker / Compose / Buildx 已就绪"
|
||||
|
||||
start_wait_session "准备 Python 运行时"
|
||||
ensure_python_runtime
|
||||
stop_wait_session
|
||||
@@ -4132,6 +4095,11 @@ init() {
|
||||
|
||||
start_wait_session "启动数据库服务"
|
||||
ensure_database_services_healthy
|
||||
if ! verify_backend_database_connection; then
|
||||
stop_wait_session
|
||||
log_error "后端数据库连接检查失败,尚未执行建表和默认数据初始化"
|
||||
exit 1
|
||||
fi
|
||||
stop_wait_session
|
||||
log_success "数据库服务已就绪"
|
||||
|
||||
@@ -4677,9 +4645,16 @@ parse_global_args() {
|
||||
|
||||
trap cleanup_failed_start EXIT
|
||||
|
||||
PLANET_COMMAND_ARGS=("$@")
|
||||
parse_global_args "$@"
|
||||
set -- "${GLOBAL_ARG_REMAINDER[@]}"
|
||||
|
||||
case "$1" in
|
||||
init|start|restart|stop|health|log|createuser)
|
||||
refresh_docker_group "${PLANET_COMMAND_ARGS[@]}" || exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$1" in
|
||||
init)
|
||||
shift
|
||||
|
||||
Reference in New Issue
Block a user