- 更新 Gitea runner 配置,支持优化的 CI/CD 环境 - 完善 Harbor HTTPS 配置和远程访问支持 - 优化 Harbor 日志配置,改用 json-file 驱动 - 添加 Docker 构建加速和代理缓存脚本 - 新增完整的文档和使用指南 - 添加 AI 开发工具集成配置 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
208 lines
5.4 KiB
Bash
Executable File
208 lines
5.4 KiB
Bash
Executable File
#!/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" |