deploy: 挂目录+替换文件部署,构建产物到 deploy/,不重建 web/admin 镜像
Made-with: Cursor
This commit is contained in:
@@ -281,12 +281,34 @@ if grep -q '9527' "$ROOT/docker-compose.yml" 2>/dev/null; then
|
||||
exit 1
|
||||
fi
|
||||
export GOPROXY="${GOPROXY:-https://goproxy.cn,direct}"
|
||||
# 国内直连 Docker Hub 超时时,用镜像拉取基础镜像(Dockerfile FROM 与 mongo 镜像)
|
||||
export REGISTRY_MIRROR="${REGISTRY_MIRROR:-docker.m.daocloud.io/library/}"
|
||||
compose_cmd build --no-cache
|
||||
# 先显式从镜像站拉 mongo,避免 compose up 时直连 Docker Hub 超时
|
||||
echo "拉取 mongo 镜像..."
|
||||
run_sudo docker pull "${REGISTRY_MIRROR}mongo:7" || true
|
||||
|
||||
# 挂目录方案:构建产物到 deploy/,容器挂载这些目录,无需重建 web/admin 镜像
|
||||
mkdir -p "$ROOT/deploy/web/dist" "$ROOT/deploy/admin/dist" "$ROOT/deploy/api"
|
||||
|
||||
echo "构建 web 前端 -> deploy/web/dist ..."
|
||||
run_sudo docker run --rm -v "$ROOT/web:/app" -v "$ROOT/deploy/web/dist:/out" -w /app \
|
||||
"${REGISTRY_MIRROR}node:20-alpine" sh -c "rm -rf /out/* 2>/dev/null; (npm ci --legacy-peer-deps 2>/dev/null || npm install --legacy-peer-deps) && npm run build && cp -r dist/. /out/"
|
||||
|
||||
echo "构建 admin 前端 -> deploy/admin/dist ..."
|
||||
run_sudo docker run --rm -v "$ROOT/admin:/app" -v "$ROOT/deploy/admin/dist:/out" -w /app \
|
||||
"${REGISTRY_MIRROR}node:20-alpine" sh -c "rm -rf /out/* 2>/dev/null; (npm ci --legacy-peer-deps 2>/dev/null || npm install --legacy-peer-deps) && npm run build && cp -r dist/. /out/"
|
||||
|
||||
echo "构建 api 二进制 -> deploy/api/server ..."
|
||||
run_sudo docker run --rm -v "$ROOT/server:/src" -v "$ROOT/deploy/api:/out" -w /src -e GOPROXY="${GOPROXY}" \
|
||||
"${REGISTRY_MIRROR}golang:1.21-alpine" sh -c "go build -mod=vendor -o /out/server ."
|
||||
|
||||
# 仅构建 api 运行时镜像(轻量,无业务代码);web/admin 使用官方 nginx 镜像无需构建
|
||||
compose_cmd build api
|
||||
|
||||
# 仅当本地没有 mongo:7 时才从镜像站拉取,避免每次重复下载约 250MB
|
||||
MONGO_IMAGE="${REGISTRY_MIRROR}mongo:7"
|
||||
if ! run_sudo docker image inspect "$MONGO_IMAGE" >/dev/null 2>&1; then
|
||||
echo "拉取 mongo 镜像(仅首次或镜像缺失时)..."
|
||||
run_sudo docker pull "$MONGO_IMAGE" || true
|
||||
else
|
||||
echo "mongo 镜像已存在,跳过拉取."
|
||||
fi
|
||||
# 证书目录在 compose up 前就要就绪(compose 内 nginx 容器会挂载)
|
||||
NGINX_DOMAIN="${NGINX_DOMAIN:-yuheng.yuxindazhineng.com}"
|
||||
NGINX_SSL_DIR="/etc/ssl/yh_web/$NGINX_DOMAIN"
|
||||
|
||||
Reference in New Issue
Block a user