#!/usr/bin/env bash # 各公司私有镜像仓库档案 —— 所有 build / deploy 脚本共用这一份。 # # 以前每个 dev-deploy.sh / prod-build.sh / prod-deploy.sh 各写死一份仓库地址和账号, # 换仓库要改 6+ 处、极易漏;现在统一放这里,换地址只改本文件。 # # 用法(在脚本里): # source "$REPO_ROOT/deploy/registry-profiles.sh" # registry_profile yunyan # → 设好 REGISTRY / REGISTRY_USER / REGISTRY_PASS / COMPANY_DESC # COMPANY="$(pick_company)" # → 交互选公司(无 TTY 时用 DEFAULT_COMPANY) # # ⚠️ 本文件纳入 git,下面的仓库密码会随仓库提交(私有仓库内可接受)。 # 公开仓库前务必清空 REGISTRY_PASS。 set -euo pipefail COMPANIES=(yunyan lingpu along) # 可选公司(交互菜单按此顺序展示;along 2026-08-16 起也有正式环境,故进生产菜单) DEFAULT_COMPANY="yunyan" # 不指定且无 TTY(CI/管道)时用哪个 # 按公司设置仓库三件套。失败返回非 0,由调用方决定是否 exit。 registry_profile() { case "${1:-}" in yunyan) COMPANY_DESC="云雁" REGISTRY="registry.voitrans.net" # 云雁自有仓库(1Panel OpenResty 反代 → docker-registry:5000) REGISTRY_USER="liwei" REGISTRY_PASS="li13451234" ;; lingpu) COMPANY_DESC="灵谱" REGISTRY="registry.lingpu.net" # 灵谱自有仓库 REGISTRY_USER="liwei" REGISTRY_PASS="li13451234" ;; along) COMPANY_DESC="阿龙" REGISTRY="registry.ymaikj.com" # 仓库实体就在阿龙测试机 8.133.166.29 上(NPM 反代 → docker-registry:5000) # 正式机 47.116.104.181 也从这里拉镜像(阿龙只此一个仓库) REGISTRY_USER="admin" # 注意:账号是 admin,与云雁/灵谱的 liwei 不同 REGISTRY_PASS="li13451234" ;; *) printf "\033[31m✗ 未知公司: %s(应为 %s)\033[0m\n" "${1:-<空>}" "${COMPANIES[*]}" >&2 return 1 ;; esac } # 生产镜像名按公司区分。prod-build.sh 与 prod-deploy.sh 都调它,避免两处各写一份映射后漂移 # ——构建推的名字和部署拉的名字对不上,报错要到远端 docker pull 才暴露。 # # admin/console:各公司都用 starpivot-* 新命名,与 docker-compose.yml 里写死的 image/container_name # 一致。云雁的 admin/console 生产目标已于 2026-08-05 迁到上海机(那台没有历史容器), # app:2026-08-10 起统一为 starpivot-app。旧名 voitrans-a11 已废弃——仓库里的旧 tag 不再更新, # 首次用新名部署需先 ./prod-build.sh 推一版(旧 tag 不会自动搬过来)。 # # 现在三个服务、各家公司都是 starpivot-<服务>,函数保留公司参数只为兼容调用方和将来再分叉。 # # 用法:IMAGE_NAME="$(prod_image_name lingpu admin)" prod_image_name() { # $1=公司 $2=服务(admin|console|app) case "${2:-}" in admin|console|app) printf 'starpivot-%s' "$2" ;; *) printf "\033[31m✗ 未知的服务: %s(应为 admin|console|app)\033[0m\n" "${2:-<空>}" >&2 return 1 ;; esac } # 交互选择公司;无 TTY 时回落到 DEFAULT_COMPANY。选中的 key 从 stdout 返回(菜单走 stderr,不污染返回值)。 pick_company() { if [ ! -t 0 ]; then printf '%s' "$DEFAULT_COMPANY"; return 0; fi printf "\033[34m选择镜像仓库所属公司:\033[0m\n" >&2 local i=1 c for c in "${COMPANIES[@]}"; do ( registry_profile "$c" >/dev/null 2>&1 printf " %d) %-8s → %s (%s)\n" "$i" "$c" "${COMPANY_DESC:-}" "${REGISTRY:-}" >&2 ) i=$((i+1)) done printf " 请输入序号 [1-%d](回车用默认 %s): " "${#COMPANIES[@]}" "$DEFAULT_COMPANY" >&2 local sel; read -r sel || { printf '%s' "$DEFAULT_COMPANY"; return 0; } [ -n "$sel" ] || { printf '%s' "$DEFAULT_COMPANY"; return 0; } case "$sel" in ''|*[!0-9]*) printf "\033[31m✗ 无效序号: %s\033[0m\n" "$sel" >&2; return 1 ;; esac { [ "$sel" -ge 1 ] && [ "$sel" -le "${#COMPANIES[@]}" ]; } || { printf "\033[31m✗ 序号超出范围\033[0m\n" >&2; return 1; } printf '%s' "${COMPANIES[$((sel-1))]}" }