#!/bin/bash # Harbor 代理缓存项目设置脚本 # 自动创建常用的代理缓存项目 set -e HARBOR_REGISTRY="192.168.1.83:8443" HARBOR_USER="admin" HARBOR_PASS="admin123" echo "🚀 开始配置 Harbor 代理缓存项目..." # 获取访问令牌 echo "🔐 获取访问令牌..." AUTH_TOKEN=$(echo -n "${HARBOR_USER}:${HARBOR_PASS}" | base64) # 定义代理项目配置(使用简单数组格式) proxy_projects=( "dockerhub-proxy|https://registry-1.docker.io|Docker Hub 镜像缓存" "ghcr-proxy|https://ghcr.io|GitHub Container Registry" "quay-proxy|https://quay.io|Quay.io 镜像缓存" "k8s-proxy|https://registry.k8s.io|Kubernetes 官方镜像" "gcr-proxy|https://gcr.io|Google Container Registry" "k8s-gcr-proxy|https://k8s.gcr.io|Kubernetes Google 镜像" ) # 创建项目函数 create_project() { local project_name="$1" local description="$2" echo "📁 创建项目: $project_name" # 检查项目是否已存在 http_status=$(curl -s -o /dev/null -w "%{http_code}" -k \ "https://${HARBOR_REGISTRY}/api/v2.0/projects/${project_name}" \ -H "Authorization: Basic ${AUTH_TOKEN}") if [ "$http_status" = "200" ]; then echo " ✅ 项目已存在,跳过创建" return 0 fi # 创建项目 response=$(curl -s -k -X POST \ "https://${HARBOR_REGISTRY}/api/v2.0/projects" \ -H "Authorization: Basic ${AUTH_TOKEN}" \ -H "Content-Type: application/json" \ -d "{ \"project_name\": \"${project_name}\", \"metadata\": { \"public\": \"true\", \"enable_content_trust\": \"false\", \"prevent_vul\": \"false\", \"severity\": \"medium\", \"auto_scan\": \"false\", \"reuse_sys_cve_allowlist\": \"true\" }, \"storage_quota\": -1, \"crawl_enable\": false }") if echo "$response" | grep -q "project_name"; then echo " ✅ 项目创建成功" elif echo "$response" | grep -q "already exists"; then echo " ✅ 项目已存在" else echo " ❌ 项目创建失败: $response" return 1 fi } # 创建所有代理项目 for project_config in "${proxy_projects[@]}"; do project_name=$(echo "$project_config" | cut -d'|' -f1) upstream=$(echo "$project_config" | cut -d'|' -f2) description=$(echo "$project_config" | cut -d'|' -f3) create_project "$project_name" "$description" done echo -e "\n🎉 代理缓存项目配置完成!" echo -e "\n📋 已创建的项目:" for project_config in "${proxy_projects[@]}"; do project_name=$(echo "$project_config" | cut -d'|' -f1) upstream=$(echo "$project_config" | cut -d'|' -f2) description=$(echo "$project_config" | cut -d'|' -f3) echo " 📁 $project_name" echo " 上游: $upstream" echo " 说明: $description" echo done echo "💡 使用示例:" echo " Docker Hub 镜像: docker pull ${HARBOR_REGISTRY}/dockerhub-proxy/library/nginx:latest" echo " GitHub 镜像: docker pull ${HARBOR_REGISTRY}/ghcr-proxy/owner/repo:tag" echo " K8s 镜像: docker pull ${HARBOR_REGISTRY}/k8s-proxy/kube-apiserver:v1.28.0" echo -e "\n⚠️ 下一步:" echo " 1. 在 Harbor UI 中配置代理缓存的上游认证信息(避免限流)" echo " 2. 设置镜像保留策略和垃圾回收计划" echo " 3. 配置客户端使用代理缓存"