文件
workbuddy-portal/tools/push-all.sh
T
wangchuanli dcd420e9c0 fix: 远端与镜像注册表统一改用 HTTPS
git.iwali.top 有 Let's Encrypt 通配证书(*.iwali.top),HTTPS 全程可用:
  https://git.iwali.top/api/v1/version  -> 200
  https://git.iwali.top/v2/             -> 401(Bearer 认证,正常)
证书链校验 ssl_verify_result=0(受信),因此:

- git remote 改为 https://git.iwali.top/...(原为 http://)
- 镜像名 git.iwali.top/... 由 Docker 默认按 HTTPS 访问,
  **不再需要 daemon.json 配 insecure-registries**(明文传输会暴露 Token)
- DEPLOYMENT.md 5.1 改写为「默认走 HTTPS」,HTTP + insecure 降级为补充说明
- Dockerfile 的 image.source 标签、README/DEPLOYMENT 的 clone 地址同步改 https
2026-09-14 15:01:57 +08:00

58 行
2.1 KiB
Bash
可执行文件
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
#!/bin/sh
# =============================================================================
# 用 Gitea Access Token 一次性完成:推代码 + 推镜像
#
# export GITEA_TOKEN=<在 Gitea「设置 → 应用 → 生成令牌」创建,勾 repo + write:package>
# tools/push-all.sh # 推 main + 镜像 latest
# tools/push-all.sh 1.1.0 # 额外打一个版本 tag 并推送
#
# 设计要点:
# * Token **只从环境变量读**,绝不写进 .git/config、URL 或任何文件。
# * 用 `-c credential.helper=` 屏蔽已配置的凭据助手(GCM),
# 否则在非交互会话里 GCM 会挂住等弹窗(连 /dev/tty 都拿不到,直接失败)。
# * 用 `http.extraHeader` 传 Basic 认证,比把 token 拼进 URL 更安全
# (不会落到 reflog / 进程列表里)。
# * git.iwali.top 有 Let's Encrypt 通配证书,**HTTPS 可用**,
# 所以镜像不需要配 insecure-registries。
# =============================================================================
set -eu
HOST="${GITEA_HOST:-git.iwali.top}"
USER="${GITEA_USER:-wangchuanli}"
REPO="${GITEA_REPO:-workbuddy-portal}"
BRANCH="${GITEA_BRANCH:-main}"
TAG="${1:-}"
IMAGE="$HOST/$USER/$REPO"
: "${GITEA_TOKEN:?请先 export GITEA_TOKEN=<Gitea Access Token(repo + write:package)>}"
cd "$(dirname "$0")/.."
# ---------- 1. 推代码 ----------
echo "==> 推送代码到 http://$HOST/$USER/$REPO.git ($BRANCH)"
AUTH="$(printf '%s:%s' "$USER" "$GITEA_TOKEN" | base64 | tr -d '\n')"
git -c credential.helper= \
-c http.extraHeader="Authorization: Basic $AUTH" \
push -u origin "$BRANCH"
# ---------- 2. 构建镜像 ----------
echo "==> 构建镜像 $IMAGE:latest"
docker compose build
# ---------- 3. 登录并推镜像 ----------
echo "==> 登录 $HOST"
printf '%s' "$GITEA_TOKEN" | docker login "$HOST" -u "$USER" --password-stdin
echo "==> 推送 $IMAGE:latest"
docker push "$IMAGE:latest"
if [ -n "$TAG" ]; then
echo "==> 打版本标签并推送 $IMAGE:$TAG"
docker tag "$IMAGE:latest" "$IMAGE:$TAG"
docker push "$IMAGE:$TAG"
fi
echo
echo "完成。其他机器拉取:"
echo " docker pull $IMAGE:${TAG:-latest}"