69 lines
2.7 KiB
Bash
Executable File
69 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 在己方环境构建应用镜像(不向甲方交付源码)
|
||
set -euo pipefail
|
||
|
||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
cd "$ROOT"
|
||
|
||
if ! docker info >/dev/null 2>&1; then
|
||
echo "错误: 无法连接 Docker 守护进程。" >&2
|
||
echo " macOS: 请先打开 Docker Desktop,等待菜单栏鲸鱼图标就绪后再执行。" >&2
|
||
echo " Linux: sudo systemctl start docker" >&2
|
||
exit 1
|
||
fi
|
||
|
||
export DOCKER_BUILDKIT=1
|
||
|
||
VERSION="${1:-latest}"
|
||
PLATFORM="${DOCKER_PLATFORM:-linux/amd64}"
|
||
|
||
BACKEND_IMAGE="zkxw-backend:${VERSION}"
|
||
WEB_IMAGE="zkxw-web:${VERSION}"
|
||
|
||
PIP_INDEX_URL="${PIP_INDEX_URL:-https://mirrors.aliyun.com/pypi/simple/}"
|
||
PIP_TRUSTED_HOST="${PIP_TRUSTED_HOST:-mirrors.aliyun.com}"
|
||
NPM_REGISTRY="${NPM_REGISTRY:-https://registry.npmmirror.com}"
|
||
|
||
BUILD_ARGS=(
|
||
--progress=plain
|
||
--platform "${PLATFORM}"
|
||
)
|
||
|
||
if [[ "$(uname -s)" == "Darwin" && "$(uname -m)" == "arm64" && "${PLATFORM}" == "linux/amd64" ]]; then
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo " 提示: 当前为 Apple Silicon 交叉构建 linux/amd64"
|
||
echo " 后端 pip 约 15~40 分钟、前端 pnpm 约 10~20 分钟"
|
||
echo " 日志可能长时间停在某一步,请勿 Ctrl+C,除非确认已失败"
|
||
echo " 更快方式: 在 Linux x86 云主机上执行同一打包脚本"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo ""
|
||
fi
|
||
|
||
echo "==> 构建后端镜像: ${BACKEND_IMAGE} (${PLATFORM})"
|
||
docker build "${BUILD_ARGS[@]}" \
|
||
--build-arg "PIP_INDEX_URL=${PIP_INDEX_URL}" \
|
||
--build-arg "PIP_TRUSTED_HOST=${PIP_TRUSTED_HOST}" \
|
||
-t "${BACKEND_IMAGE}" -f backend/Dockerfile backend/
|
||
|
||
NODE_IMAGE="${NODE_IMAGE:-docker.m.daocloud.io/library/node:20-alpine}"
|
||
NGINX_IMAGE="${NGINX_IMAGE:-docker.m.daocloud.io/library/nginx:1.27-alpine}"
|
||
|
||
echo "==> 构建前端镜像: ${WEB_IMAGE} (${PLATFORM})"
|
||
echo " 基础镜像: ${NODE_IMAGE} / ${NGINX_IMAGE}"
|
||
docker build "${BUILD_ARGS[@]}" \
|
||
--build-arg "NODE_IMAGE=${NODE_IMAGE}" \
|
||
--build-arg "NGINX_IMAGE=${NGINX_IMAGE}" \
|
||
--build-arg "NPM_REGISTRY=${NPM_REGISTRY}" \
|
||
-t "${WEB_IMAGE}" -f deploy/docker/web-admin/Dockerfile .
|
||
|
||
if [[ "${VERSION}" != "latest" ]]; then
|
||
docker tag "${BACKEND_IMAGE}" zkxw-backend:latest
|
||
docker tag "${WEB_IMAGE}" zkxw-web:latest
|
||
echo "==> 已同步标签 zkxw-backend:latest / zkxw-web:latest"
|
||
fi
|
||
|
||
echo ""
|
||
echo "完成。镜像:"
|
||
docker images --format ' {{.Repository}}:{{.Tag}}\t{{.Size}}' | grep -E '^ zkxw-(backend|web):' || true
|