From c226b1188dd197e19131164fe461aa9c857356a9 Mon Sep 17 00:00:00 2001 From: erio Date: Sun, 1 Mar 2026 21:05:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E2=80=94=20VERSION=20=E6=96=87=E4=BB=B6=20+=20=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E5=8F=91=E5=B8=83=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - VERSION 文件:版本号单一来源(当前 1.0.0) - docker-compose.hub.yml / app.yml:镜像 tag 改为 \${IMAGE_TAG:-latest} - scripts/publish.sh:自动读取 VERSION、打双标签(x.y.z + latest)、推送到 Docker Hub --- VERSION | 1 + docker-compose.app.yml | 7 +++--- docker-compose.hub.yml | 7 +++--- scripts/publish.sh | 56 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 VERSION create mode 100644 scripts/publish.sh diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..3eefcb9 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.0.0 diff --git a/docker-compose.app.yml b/docker-compose.app.yml index 9858a6f..b603db8 100644 --- a/docker-compose.app.yml +++ b/docker-compose.app.yml @@ -2,12 +2,13 @@ # 使用 Docker Hub 镜像部署(仅应用,外部数据库) # 适合:已有 PostgreSQL 实例,将 DATABASE_URL 填入 .env # -# 启动:docker compose -f docker-compose.app.yml up -d -# 更新:docker compose -f docker-compose.app.yml pull && docker compose -f docker-compose.app.yml up -d +# 启动:IMAGE_TAG=1.0.0 docker compose -f docker-compose.app.yml up -d +# 更新:IMAGE_TAG=1.1.0 docker compose -f docker-compose.app.yml pull && docker compose -f docker-compose.app.yml up -d +# 不指定 IMAGE_TAG 时默认使用 latest services: app: - image: touwaeriol/sub2apipay:latest + image: touwaeriol/sub2apipay:${IMAGE_TAG:-latest} ports: - '${APP_PORT:-3001}:3000' env_file: .env diff --git a/docker-compose.hub.yml b/docker-compose.hub.yml index 61f5e16..d6eb82b 100644 --- a/docker-compose.hub.yml +++ b/docker-compose.hub.yml @@ -2,12 +2,13 @@ # 使用 Docker Hub 镜像部署(含自带 PostgreSQL) # 适合:全新服务器,无现有数据库 # -# 启动:docker compose -f docker-compose.hub.yml up -d -# 更新:docker compose -f docker-compose.hub.yml pull && docker compose -f docker-compose.hub.yml up -d +# 启动:IMAGE_TAG=1.0.0 docker compose -f docker-compose.hub.yml up -d +# 更新:IMAGE_TAG=1.1.0 docker compose -f docker-compose.hub.yml pull && docker compose -f docker-compose.hub.yml up -d +# 不指定 IMAGE_TAG 时默认使用 latest services: app: - image: touwaeriol/sub2apipay:latest + image: touwaeriol/sub2apipay:${IMAGE_TAG:-latest} ports: - '${APP_PORT:-3001}:3000' env_file: .env diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100644 index 0000000..b88d7f1 --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# scripts/publish.sh +# 构建并发布 Docker 镜像到 Docker Hub +# 在构建服务器(us-asaki-root)上运行 +# +# 用法: +# ./scripts/publish.sh # 读取 VERSION 文件中的版本号 +# ./scripts/publish.sh 1.2.3 # 手动指定版本号 + +set -euo pipefail + +REGISTRY="touwaeriol/sub2apipay" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" + +# 读取版本号 +if [[ $# -ge 1 ]]; then + VERSION="$1" +else + VERSION="$(cat "$ROOT_DIR/VERSION" | tr -d '[:space:]')" +fi + +if [[ -z "$VERSION" ]]; then + echo "错误:VERSION 文件为空,请填写版本号(如 1.0.0)" >&2 + exit 1 +fi + +echo "==============================" +echo " 构建版本: $VERSION" +echo " 镜像: $REGISTRY" +echo "==============================" + +cd "$ROOT_DIR" + +# 构建 +echo "[1/3] 构建镜像..." +docker compose build + +# 打标签:具体版本 + latest +echo "[2/3] 打标签: $VERSION 和 latest..." +docker tag sub2apipay-app:latest "$REGISTRY:$VERSION" +docker tag sub2apipay-app:latest "$REGISTRY:latest" + +# 推送 +echo "[3/3] 推送到 Docker Hub..." +docker push "$REGISTRY:$VERSION" +docker push "$REGISTRY:latest" + +echo "" +echo "✓ 发布完成" +echo " $REGISTRY:$VERSION" +echo " $REGISTRY:latest" +echo "" +echo "部署命令:" +echo " IMAGE_TAG=$VERSION docker compose -f docker-compose.hub.yml pull" +echo " IMAGE_TAG=$VERSION docker compose -f docker-compose.hub.yml up -d"