65 lines
1.9 KiB
Bash
65 lines
1.9 KiB
Bash
#!/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"
|