73 lines
2.3 KiB
Bash
Executable File
73 lines
2.3 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
|
|
|
|
# 检查 grpc 目录和 Makefile 是否存在
|
|
if [ ! -d "$ROOT_DIR/grpc" ]; then
|
|
echo "错误: grpc 目录不存在" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$ROOT_DIR/grpc/Makefile" ]; then
|
|
echo "错误: grpc/Makefile 文件不存在" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# proto 文件将在容器内自动生成,无需在构建前生成
|
|
|
|
# 每次重新构建镜像
|
|
echo "开始构建 Docker 镜像(使用构建缓存加速)..."
|
|
echo "提示: 首次构建可能需要 3-5 分钟,后续构建会更快(使用缓存)"
|
|
START_TIME=$(date +%s)
|
|
DOCKER_BUILDKIT=1 docker build \
|
|
--progress=plain \
|
|
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
|
--build-arg GOPROXY="${GOPROXY:-https://goproxy.cn,direct}" \
|
|
-t "$IMAGE:$TAG" -f Dockerfile .
|
|
BUILD_TIME=$(($(date +%s) - START_TIME))
|
|
echo "构建完成,耗时: ${BUILD_TIME} 秒"
|
|
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/storage:/app/storage" \
|
|
-v "$ROOT_DIR/log:/app/log" \
|
|
-v "$ROOT_DIR/server:/app/server:ro" \
|
|
-v "$ROOT_DIR/web:/app/web:ro" \
|
|
"$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 |