feat: 版本管理 — VERSION 文件 + 构建发布脚本

- VERSION 文件:版本号单一来源(当前 1.0.0)
- docker-compose.hub.yml / app.yml:镜像 tag 改为 \${IMAGE_TAG:-latest}
- scripts/publish.sh:自动读取 VERSION、打双标签(x.y.z + latest)、推送到 Docker Hub
This commit is contained in:
erio
2026-03-01 21:05:51 +08:00
parent 149a08f1a3
commit c226b1188d
4 changed files with 65 additions and 6 deletions

1
VERSION Normal file
View File

@@ -0,0 +1 @@
1.0.0

View File

@@ -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

View File

@@ -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

56
scripts/publish.sh Normal file
View File

@@ -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"