#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" ENV_NAME="${1:-test}" IMAGE="marketing-system-data-tool" TAG="$ENV_NAME" PORT="${PORT:-8077}" cd "$ROOT_DIR" ENV_FILE_OVERRIDE="${2:-}" ENV_FILE="" if [ -n "$ENV_FILE_OVERRIDE" ]; then if [ -f "$ENV_FILE_OVERRIDE" ]; then ENV_FILE="$ENV_FILE_OVERRIDE" else echo "警告:指定的 env 文件不存在:$ENV_FILE_OVERRIDE,忽略 --env-file" >&2 fi else if [ -f ".env.$ENV_NAME" ]; then ENV_FILE=".env.$ENV_NAME" elif [ -f "server/.env.$ENV_NAME" ]; then ENV_FILE="server/.env.$ENV_NAME" fi fi if [ -z "$ENV_FILE" ]; then echo "未使用 env 文件,配置仅通过 server/config.$ENV_NAME.yaml 加载" >&2 fi docker build -t "$IMAGE:$TAG" -f Dockerfile . mkdir -p log storage/export CID_NAME="marketing-data-$ENV_NAME" RUNNING=$(docker inspect -f '{{.State.Running}}' "$CID_NAME" 2>/dev/null || echo false) if [ "$RUNNING" = "true" ]; then docker stop "$CID_NAME" >/dev/null 2>&1 || true fi if docker ps -a --format '{{.Names}}' | grep -q "^${CID_NAME}$"; then docker rm "$CID_NAME" >/dev/null 2>&1 || true fi CONFIG_PATH="$ROOT_DIR/server/config.$ENV_NAME.yaml" if [ ! -f "$CONFIG_PATH" ]; then echo "配置文件缺失:$CONFIG_PATH" >&2 exit 1 fi if [ -n "$ENV_FILE" ]; then docker run -d \ --name "$CID_NAME" \ --restart unless-stopped \ --env APP_ENV="$ENV_NAME" \ --env-file "$ENV_FILE" \ -p "$PORT:8077" \ -v "$ROOT_DIR/storage/export:/app/storage/export" \ -v "$ROOT_DIR/log:/app/log" \ -v "$CONFIG_PATH:/app/server/config.$ENV_NAME.yaml:ro" \ "$IMAGE:$TAG" else docker run -d \ --name "$CID_NAME" \ --restart unless-stopped \ --env APP_ENV="$ENV_NAME" \ -p "$PORT:8077" \ -v "$ROOT_DIR/storage/export:/app/storage/export" \ -v "$ROOT_DIR/log:/app/log" \ -v "$CONFIG_PATH:/app/server/config.$ENV_NAME.yaml:ro" \ "$IMAGE:$TAG" fi echo "container: $CID_NAME image: $IMAGE:$TAG port: $PORT"