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"