#!/bin/bash # Harbor 快速设置脚本 # 配置基本的项目和功能 set -e HARBOR_REGISTRY="192.168.1.83:8443" HARBOR_USER="admin" HARBOR_PASS="admin123" echo "🚀 Harbor 快速设置开始..." # 1. 登录 Harbor echo "🔐 登录 Harbor..." echo "admin123" | docker login "${HARBOR_REGISTRY}" -u admin --password-stdin # 2. 创建基础项目 echo "📁 创建基础项目..." projects=( "ljwx|自研项目镜像" "tools|工具镜像" "cache|缓存镜像" ) for project_config in "${projects[@]}"; do project_name=$(echo "$project_config" | cut -d'|' -f1) description=$(echo "$project_config" | cut -d'|' -f2) echo " 📁 创建项目: $project_name" response=$(curl -s -k -X POST \ "https://${HARBOR_REGISTRY}/api/v2.0/projects" \ -H "Authorization: Basic $(echo -n '${HARBOR_USER}:${HARBOR_PASS}' | base64)" \ -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\|already exists"; then echo " ✅ 项目已存在或创建成功" else echo " ❌ 项目创建失败: $response" fi done # 3. 推送一些基础镜像到 Harbor echo "📦 推送基础镜像到 Harbor..." base_images=( "alpine:latest|tools" "nginx:alpine|tools" "redis:alpine|cache" "node:20-alpine|tools" "python:3.11-alpine|tools" ) for image_config in "${base_images[@]}"; do original_image=$(echo "$image_config" | cut -d'|' -f1) target_project=$(echo "$image_config" | cut -d'|' -f2) image_name=$(echo "$original_image" | cut -d':' -f1) image_tag=$(echo "$original_image" | cut -d':' -f2) harbor_image="${HARBOR_REGISTRY}/${target_project}/${image_name}:${image_tag}" echo " 📦 处理镜像: $original_image → $harbor_image" # 拉取镜像 echo " ⬇️ 拉取: $original_image" docker pull "$original_image" # 标记镜像 echo " 🏷️ 标记: $harbor_image" docker tag "$original_image" "$harbor_image" # 推送镜像 echo " ⬆️ 推送: $harbor_image" docker push "$harbor_image" # 清理本地原始镜像(可选) # docker rmi "$original_image" 2>/dev/null || true echo " ✅ 完成" done # 4. 创建快速使用脚本 echo "📝 创建快速使用脚本..." mkdir -p ~/bin tee ~/bin/harbor-sync > /dev/null <<'EOF' #!/bin/bash # Harbor 镜像同步脚本 HARBOR_REGISTRY="192.168.1.83:8443" if [ $# -eq 0 ]; then echo "用法: harbor-sync <镜像名>[:<标签>] [目标项目]" echo "" echo "示例:" echo " harbor-sync golang:1.21-alpine tools" echo " harbor-sync prom/prometheus:latest tools" echo " harbor-sync postgres:15-alpine cache" echo "" echo "📋 可用项目:" echo " ljwx - 自研项目" echo " tools - 工具镜像" echo " cache - 缓存镜像" echo " library - 通用镜像" exit 1 fi IMAGE="$1" PROJECT="${2:-tools}" IMAGE_NAME=$(echo "$IMAGE" | cut -d':' -f1 | sed 's|.*/||') IMAGE_TAG=$(echo "$IMAGE" | cut -d':' -f2) if [ "$IMAGE_TAG" = "$IMAGE_NAME" ]; then IMAGE_TAG="latest" fi HARBOR_IMAGE="${HARBOR_REGISTRY}/${PROJECT}/${IMAGE_NAME}:${IMAGE_TAG}" echo "📦 同步镜像: $IMAGE → $HARBOR_IMAGE" # 拉取镜像 docker pull "$IMAGE" # 标记镜像 docker tag "$IMAGE" "$HARBOR_IMAGE" # 推送镜像 docker push "$HARBOR_IMAGE" echo "✅ 同步完成" echo "🔗 Harbor 镜像: $HARBOR_IMAGE" EOF chmod +x ~/bin/harbor-sync # 5. 创建镜像拉取别名 tee ~/bin/harbor-get > /dev/null <<'EOF' #!/bin/bash # 从 Harbor 快速拉取镜像 HARBOR_REGISTRY="192.168.1.83:8443" if [ $# -eq 0 ]; then echo "用法: harbor-get <项目>/<镜像>[:<标签>]" echo "" echo "示例:" echo " harbor-get tools/alpine:latest" echo " harbor-get tools/nginx:alpine" echo " harbor-get cache/redis:alpine" echo " harbor-get ljwx/my-app:v1.0.0" echo "" echo "📋 可用项目:" echo " tools - 工具镜像" echo " cache - 缓存镜像" echo " ljwx - 自研项目" echo " library - 通用镜像" exit 1 fi HARBOR_IMAGE="${HARBOR_REGISTRY}/$1" echo "📦 拉取镜像: $HARBOR_IMAGE" docker pull "$HARBOR_IMAGE" EOF chmod +x ~/bin/harbor-get # 6. 更新 PATH if ! echo "$PATH" | grep -q "$HOME/bin"; then echo "" >> ~/.zshrc echo "# Harbor 工具" >> ~/.zshrc echo "export PATH=\"\$HOME/bin:\$PATH\"" >> ~/.zshrc fi echo "" echo "🎉 Harbor 快速设置完成!" echo "" echo "📋 可用工具:" echo " harbor-sync <镜像> [项目] - 同步镜像到 Harbor" echo " harbor-get <项目/镜像> - 从 Harbor 拉取镜像" echo " harbor-pull <镜像> - 智能拉取(需要代理缓存)" echo "" echo "📦 已推送的基础镜像:" echo " tools/alpine:latest" echo " tools/nginx:alpine" echo " tools/redis:alpine" echo " tools/node:20-alpine" echo " tools/python:3.11-alpine" echo "" echo "💡 使用示例:" echo " harbor-sync golang:1.21-alpine tools" echo " harbor-get tools/nginx:alpine" echo " docker pull ${HARBOR_REGISTRY}/tools/alpine:latest"