#!/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" # 检查必要的文件是否存在 if [ ! -f "$ROOT_DIR/go.work" ]; then echo "错误: go.work 文件不存在,请确保已正确配置工作区" >&2 exit 1 fi if [ ! -f "$ROOT_DIR/grpc/user/userv1/go.mod" ]; then echo "错误: grpc/user/userv1/go.mod 文件不存在" >&2 exit 1 fi # 检查 proto 文件是否已生成(至少检查一个关键文件) if [ ! -f "$ROOT_DIR/grpc/user/userv1/user.pb.go" ]; then echo "proto 文件未生成,正在自动生成..." >&2 cd "$ROOT_DIR/grpc" && make generate cd "$ROOT_DIR" if [ ! -f "$ROOT_DIR/grpc/user/userv1/user.pb.go" ]; then echo "错误: proto 文件生成失败" >&2 exit 1 fi echo "proto 文件生成成功" >&2 fi # 每次重新构建镜像 echo "开始构建 Docker 镜像..." DOCKER_BUILDKIT=1 docker build \ --build-arg BUILDKIT_INLINE_CACHE=1 \ --build-arg GOPROXY="${GOPROXY:-https://goproxy.cn,direct}" \ -t "$IMAGE:$TAG" -f Dockerfile . USE_IMAGE="$IMAGE:$TAG" 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.yaml" if [ ! -f "$CONFIG_PATH" ]; then echo "配置文件缺失:$CONFIG_PATH" >&2 exit 1 fi docker run -d \ --name "$CID_NAME" \ --restart unless-stopped \ -p "$PORT:8077" \ -v "$ROOT_DIR:/app" \ "$USE_IMAGE" echo "container: $CID_NAME image: $USE_IMAGE port: $PORT" #docker run -d --name marketing-data-test --restart unless-stopped -p 8077:8077 -v ./storage/export:/app/storage/export -v ./log:/app/log -v ./config.yaml:/app/server/config.yaml:ro 69a376c70023