提交
This commit is contained in:
1 parent
09afdb1d65
commit
afd517ce10
215 files changed
+32936
-23862
No files matched your search
Executable
+68
@@ -0,0 +1,68 @@
|
||||
#!/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
|
||||
Executable
+73
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env bash
|
||||
# 打包 Docker 交付物:预构建应用镜像 + compose + 数据库 SQL(不含前后端源码)
|
||||
# 目标运行环境:甲方 Linux x86_64 云主机(固定 linux/amd64,与发版机 macOS/ARM 无关)
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
# 交付镜像架构(甲方云主机默认 amd64;勿改为 arm64 除非已确认对方为 ARM 云)
|
||||
export DOCKER_PLATFORM=linux/amd64
|
||||
export DOCKER_BUILDKIT=1
|
||||
|
||||
VERSION="${1:-$(date +%Y%m%d)}"
|
||||
OUT_DIR="${ROOT}/dist"
|
||||
PKG_NAME="zkxw-docker-deploy-${VERSION}"
|
||||
STAGING="${OUT_DIR}/${PKG_NAME}"
|
||||
ARCHIVE="${OUT_DIR}/${PKG_NAME}.tar.gz"
|
||||
IMAGES_TAR="${STAGING}/images/zkxw-app-images.tar"
|
||||
|
||||
BACKEND_IMAGE="zkxw-backend:${VERSION}"
|
||||
WEB_IMAGE="zkxw-web:${VERSION}"
|
||||
|
||||
echo "==> [1/4] 构建应用镜像(平台 ${DOCKER_PLATFORM},供 Linux 云主机)"
|
||||
"${ROOT}/scripts/build-docker-images.sh" "${VERSION}"
|
||||
|
||||
echo "==> [2/4] 导出镜像到 tar"
|
||||
rm -rf "${STAGING}"
|
||||
mkdir -p "${STAGING}/images" "${STAGING}/deploy/docker" "${STAGING}/docs/sql"
|
||||
|
||||
docker save -o "${IMAGES_TAR}" "${BACKEND_IMAGE}" "${WEB_IMAGE}"
|
||||
|
||||
echo "==> [3/4] 组装部署文件(无 backend/ web-admin 源码)"
|
||||
cp "${ROOT}/deploy/docker/docker-compose.yml" "${STAGING}/deploy/docker/"
|
||||
sed -e "s|^ZKXW_BACKEND_IMAGE=.*|ZKXW_BACKEND_IMAGE=${BACKEND_IMAGE}|" \
|
||||
-e "s|^ZKXW_WEB_IMAGE=.*|ZKXW_WEB_IMAGE=${WEB_IMAGE}|" \
|
||||
"${ROOT}/deploy/docker/.env.example" > "${STAGING}/deploy/docker/.env.example"
|
||||
cp "${ROOT}/deploy/docker/README.md" "${STAGING}/deploy/docker/"
|
||||
cp -R "${ROOT}/deploy/docker/mysql" "${STAGING}/deploy/docker/"
|
||||
cp "${ROOT}/docs/sql/zkxw.sql" "${STAGING}/docs/sql/zkxw.sql"
|
||||
|
||||
cp "${ROOT}/deploy/docker/README.md" "${STAGING}/部署说明.md"
|
||||
|
||||
cat > "${STAGING}/VERSION.txt" <<EOF
|
||||
package=${PKG_NAME}
|
||||
version=${VERSION}
|
||||
platform=${DOCKER_PLATFORM}
|
||||
backend_image=${BACKEND_IMAGE}
|
||||
web_image=${WEB_IMAGE}
|
||||
built_at=$(date -Iseconds)
|
||||
git_commit=$(git -C "${ROOT}" rev-parse --short HEAD 2>/dev/null || echo unknown)
|
||||
deploy_dir=deploy/docker
|
||||
EOF
|
||||
|
||||
echo "==> [4/4] 生成压缩包"
|
||||
mkdir -p "${OUT_DIR}"
|
||||
tar -czf "${ARCHIVE}" -C "${OUT_DIR}" "${PKG_NAME}"
|
||||
|
||||
echo ""
|
||||
echo "完成: ${ARCHIVE}"
|
||||
echo "应用镜像: $(du -h "${IMAGES_TAR}" | cut -f1)"
|
||||
echo "总包大小: $(du -h "${ARCHIVE}" | cut -f1)"
|
||||
echo ""
|
||||
echo "包内不含前后端源码,包含:"
|
||||
echo " - images/zkxw-app-images.tar"
|
||||
echo " - deploy/docker/ (compose + .env.example + mysql init)"
|
||||
echo " - docs/sql/zkxw.sql"
|
||||
echo ""
|
||||
echo "甲方服务器执行:"
|
||||
echo " tar -xzf ${PKG_NAME}.tar.gz"
|
||||
echo " cd ${PKG_NAME}"
|
||||
echo " docker load -i images/zkxw-app-images.tar"
|
||||
echo " cd deploy/docker && cp .env.example .env && vim .env"
|
||||
echo " docker compose up -d"
|
||||
Reference in new issue
Block a user