fix: 修复 Docker 部署 API 地址与数据库连接问题
This commit is contained in:
@@ -1,14 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
if (set -o pipefail) >/dev/null 2>&1; then
|
||||
set -o pipefail
|
||||
fi
|
||||
|
||||
export MSYS_NO_PATHCONV=1
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SCRIPT_PATH="$0"
|
||||
case "$SCRIPT_PATH" in
|
||||
/*) ;;
|
||||
*) SCRIPT_PATH="$(pwd)/$SCRIPT_PATH" ;;
|
||||
esac
|
||||
SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$SCRIPT_PATH")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
ROOT_ENV_FILE="$ROOT_DIR/.env"
|
||||
ROOT_ENV_EXAMPLE_FILE="$ROOT_DIR/.env.example"
|
||||
VENV_DIR="$SCRIPT_DIR/.venv"
|
||||
MODE="${1:-start}"
|
||||
|
||||
RED='\033[0;31m'
|
||||
@@ -16,9 +24,59 @@ GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||||
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||||
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
|
||||
info() { printf '%b\n' "${GREEN}[INFO]${NC} $*"; }
|
||||
warn() { printf '%b\n' "${YELLOW}[WARN]${NC} $*"; }
|
||||
error() { printf '%b\n' "${RED}[ERROR]${NC} $*"; exit 1; }
|
||||
|
||||
is_container() {
|
||||
[ -f "/.dockerenv" ] && return 0
|
||||
|
||||
if [ -r /proc/1/cgroup ] && grep -Eq "(docker|containerd|kubepods)" /proc/1/cgroup 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
is_wsl() {
|
||||
grep -qi microsoft /proc/version 2>/dev/null
|
||||
}
|
||||
|
||||
is_msys() {
|
||||
case "$(uname -s)" in
|
||||
MINGW*|MSYS*|CYGWIN*) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
to_windows_path() {
|
||||
target_path="$1"
|
||||
|
||||
if is_wsl && command -v wslpath >/dev/null 2>&1; then
|
||||
wslpath -w "$target_path"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if is_msys && command -v cygpath >/dev/null 2>&1; then
|
||||
cygpath -aw "$target_path"
|
||||
return 0
|
||||
fi
|
||||
|
||||
printf '%s\n' "$target_path"
|
||||
}
|
||||
|
||||
DEFAULT_VENV_DIR="$SCRIPT_DIR/.venv"
|
||||
DEFAULT_VENV_DISPLAY_PATH="./server/.venv"
|
||||
if [ -n "${SERVER_VENV_DIR:-}" ]; then
|
||||
VENV_DIR="$SERVER_VENV_DIR"
|
||||
VENV_DISPLAY_PATH="$SERVER_VENV_DIR"
|
||||
elif is_container; then
|
||||
VENV_DIR="/tmp/x-financial-server-venv"
|
||||
VENV_DISPLAY_PATH="$VENV_DIR"
|
||||
else
|
||||
VENV_DIR="$DEFAULT_VENV_DIR"
|
||||
VENV_DISPLAY_PATH="$DEFAULT_VENV_DISPLAY_PATH"
|
||||
fi
|
||||
|
||||
if [ ! -f "$ROOT_ENV_FILE" ]; then
|
||||
if [ -f "$ROOT_ENV_EXAMPLE_FILE" ]; then
|
||||
@@ -29,10 +87,41 @@ if [ ! -f "$ROOT_ENV_FILE" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
ENV_OVERRIDE_SERVER_HOST_SET=false
|
||||
ENV_OVERRIDE_POSTGRES_HOST_SET=false
|
||||
ENV_OVERRIDE_DATABASE_URL_SET=false
|
||||
|
||||
if [ "${SERVER_HOST+x}" = x ]; then
|
||||
ENV_OVERRIDE_SERVER_HOST_SET=true
|
||||
ENV_OVERRIDE_SERVER_HOST="$SERVER_HOST"
|
||||
fi
|
||||
|
||||
if [ "${POSTGRES_HOST+x}" = x ]; then
|
||||
ENV_OVERRIDE_POSTGRES_HOST_SET=true
|
||||
ENV_OVERRIDE_POSTGRES_HOST="$POSTGRES_HOST"
|
||||
fi
|
||||
|
||||
if [ "${DATABASE_URL+x}" = x ]; then
|
||||
ENV_OVERRIDE_DATABASE_URL_SET=true
|
||||
ENV_OVERRIDE_DATABASE_URL="$DATABASE_URL"
|
||||
fi
|
||||
|
||||
set -a
|
||||
. "$ROOT_ENV_FILE"
|
||||
set +a
|
||||
|
||||
if [ "$ENV_OVERRIDE_SERVER_HOST_SET" = true ]; then
|
||||
SERVER_HOST="$ENV_OVERRIDE_SERVER_HOST"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_POSTGRES_HOST_SET" = true ]; then
|
||||
POSTGRES_HOST="$ENV_OVERRIDE_POSTGRES_HOST"
|
||||
fi
|
||||
|
||||
if [ "$ENV_OVERRIDE_DATABASE_URL_SET" = true ]; then
|
||||
DATABASE_URL="$ENV_OVERRIDE_DATABASE_URL"
|
||||
fi
|
||||
|
||||
SERVER_HOST="${SERVER_HOST:-0.0.0.0}"
|
||||
SERVER_PORT="${SERVER_PORT:-8000}"
|
||||
DEFAULT_SERVER_RELOAD="false"
|
||||
@@ -49,17 +138,6 @@ fi
|
||||
|
||||
SERVER_RELOAD="${SERVER_RELOAD:-$DEFAULT_SERVER_RELOAD}"
|
||||
|
||||
is_wsl() {
|
||||
grep -qi microsoft /proc/version 2>/dev/null
|
||||
}
|
||||
|
||||
is_msys() {
|
||||
case "$(uname -s)" in
|
||||
MINGW*|MSYS*|CYGWIN*) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
needs_windows_python() {
|
||||
is_msys || is_wsl
|
||||
}
|
||||
@@ -119,11 +197,18 @@ pip_ready() {
|
||||
}
|
||||
|
||||
create_venv() {
|
||||
info "Creating virtual environment at ./server/.venv"
|
||||
info "Creating virtual environment at $VENV_DISPLAY_PATH"
|
||||
if [ -d "$VENV_DIR" ]; then
|
||||
rm -rf "$VENV_DIR"
|
||||
fi
|
||||
run_bootstrap_python -m venv "$VENV_DIR"
|
||||
mkdir -p "$(dirname "$VENV_DIR")"
|
||||
|
||||
venv_target="$VENV_DIR"
|
||||
if [ "$PYTHON_BOOTSTRAP_IS_WINDOWS" = "true" ]; then
|
||||
venv_target="$(to_windows_path "$VENV_DIR")"
|
||||
fi
|
||||
|
||||
run_bootstrap_python -m venv "$venv_target"
|
||||
|
||||
if ! PYTHON_BIN="$(venv_python_path)"; then
|
||||
error "Virtual environment was not created successfully."
|
||||
@@ -155,10 +240,13 @@ ensure_pip() {
|
||||
}
|
||||
|
||||
ensure_python_bootstrap() {
|
||||
PYTHON_BOOTSTRAP_IS_WINDOWS="false"
|
||||
|
||||
if needs_windows_python; then
|
||||
if find_windows_python >/dev/null 2>&1; then
|
||||
PYTHON_BOOTSTRAP="$(find_windows_python)"
|
||||
info "Detected Windows bash environment — using Windows Python"
|
||||
PYTHON_BOOTSTRAP_IS_WINDOWS="true"
|
||||
info "Detected Windows bash environment, using Windows Python"
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -179,6 +267,10 @@ ensure_python_bootstrap() {
|
||||
ensure_dependencies() {
|
||||
ensure_python_bootstrap
|
||||
|
||||
if is_container && [ "$VENV_DIR" != "$DEFAULT_VENV_DIR" ]; then
|
||||
info "Docker runtime detected, using isolated Python environment at $VENV_DISPLAY_PATH"
|
||||
fi
|
||||
|
||||
if ! PYTHON_BIN="$(venv_python_path)"; then
|
||||
warn "Python virtual environment not found"
|
||||
create_venv
|
||||
|
||||
Reference in New Issue
Block a user