#!/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" </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"