MarketingSystemDataExportTool/scripts/deploy_docker.sh

67 lines
2.1 KiB
Bash
Executable File

#!/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
echo "提示: 运行 'cd grpc && make generate' 生成 proto 文件" >&2
read -p "是否继续构建? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
# 如果镜像存在,则直接使用;否则构建
if docker image inspect "$IMAGE:$TAG" >/dev/null 2>&1; then
echo "镜像 $IMAGE:$TAG 已存在,跳过构建。"
else
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 .
fi
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