Files
macos-tools/harbor/scripts/setup-client-acceleration.sh
gaoandClaude 8f47f4e9ea feat: 完善 DevOps 工具链配置和优化 Harbor 服务
- 更新 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]>
2025-11-03 06:39:53 +08:00

262 lines
7.1 KiB
Bash
Executable File

#!/bin/bash
# 客户端镜像加速配置脚本
# 支持配置 Docker 和 containerd 的镜像加速
set -e
HARBOR_REGISTRY="192.168.1.83:8443"
echo "🚀 配置客户端镜像加速..."
# 检测操作系统
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
echo "🐧 检测到 Linux 系统"
SETUP_LINUX=true
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "🍎 检测到 macOS 系统"
SETUP_MACOS=true
else
echo "❌ 不支持的操作系统: $OSTYPE"
exit 1
fi
# Linux Docker 配置
setup_linux_docker() {
echo "📦 配置 Linux Docker 镜像加速..."
# 创建目录
sudo mkdir -p /etc/docker
# 配置 Docker daemon
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
"registry-mirrors": [
"https://${HARBOR_REGISTRY}"
],
"insecure-registries": [
"${HARBOR_REGISTRY}"
],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF
echo "✅ Docker daemon 配置完成"
echo "🔄 重启 Docker 服务..."
sudo systemctl restart docker
echo "✅ Docker 服务已重启"
}
# Linux Containerd 配置
setup_linux_containerd() {
echo "📦 配置 Linux Containerd 镜像加速..."
# 备份原配置
if [ -f /etc/containerd/config.toml ]; then
sudo cp /etc/containerd/config.toml /etc/containerd/config.toml.backup.$(date +%Y%m%d_%H%M%S)
fi
# 创建新配置
sudo mkdir -p /etc/containerd
sudo tee /etc/containerd/config.toml > /dev/null <<'EOF'
# Containerd 配置文件
# 包含镜像加速和插件配置
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://192.168.1.83:8443"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."ghcr.io"]
endpoint = ["https://192.168.1.83:8443"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
endpoint = ["https://192.168.1.83:8443"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
endpoint = ["https://192.168.1.83:8443"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.1.83:8443".tls]
insecure_skip_verify = true
EOF
echo "✅ Containerd 配置完成"
echo "🔄 重启 Containerd 服务..."
sudo systemctl restart containerd
echo "✅ Containerd 服务已重启"
}
# macOS 配置(主要是证书和别名)
setup_macos() {
echo "📦 配置 macOS 环境..."
# 创建别名脚本
mkdir -p ~/bin
tee ~/bin/harbor-pull > /dev/null <<'EOF'
#!/bin/bash
# Harbor 镜像拉取别名脚本
HARBOR_REGISTRY="192.168.1.83:8443"
if [ $# -eq 0 ]; then
echo "用法: harbor-pull <镜像名>[:<标签>]"
echo ""
echo "示例:"
echo " harbor-pull nginx:latest"
echo " harbor-pull library/alpine:3.18"
echo " harbor-pull ghcr.io/owner/repo:tag"
echo ""
echo "📋 可用的代理项目:"
echo " dockerhub-proxy - Docker Hub 镜像"
echo " ghcr-proxy - GitHub Container Registry"
echo " quay-proxy - Quay.io 镜像"
echo " k8s-proxy - Kubernetes 镜像"
echo " ljwx - 本地项目镜像"
exit 1
fi
IMAGE="$1"
PROJECT=""
# 判断镜像类型并选择代理项目
if [[ "$IMAGE" == *"docker.io"* ]] || [[ "$IMAGE" != *"/"* ]]; then
PROJECT="dockerhub-proxy"
# 转换镜像名
if [[ "$IMAGE" == *"docker.io/"* ]]; then
IMAGE=$(echo "$IMAGE" | sed 's|docker.io/||')
fi
if [[ "$IMAGE" != *"/*"* ]]; then
IMAGE="library/$IMAGE"
fi
elif [[ "$IMAGE" == *"ghcr.io"* ]]; then
PROJECT="ghcr-proxy"
IMAGE=$(echo "$IMAGE" | sed 's|ghcr.io/||')
elif [[ "$IMAGE" == *"quay.io"* ]]; then
PROJECT="quay-proxy"
IMAGE=$(echo "$IMAGE" | sed 's|quay.io/||')
elif [[ "$IMAGE" == *"registry.k8s.io"* ]] || [[ "$IMAGE" == *"k8s.gcr.io"* ]]; then
PROJECT="k8s-proxy"
IMAGE=$(echo "$IMAGE" | sed 's|registry.k8s.io/||' | sed 's|k8s.gcr.io/||')
else
PROJECT="ljwx"
fi
FULL_IMAGE="${HARBOR_REGISTRY}/${PROJECT}/${IMAGE}"
echo "📦 拉取镜像: $FULL_IMAGE"
docker pull "$FULL_IMAGE"
# 创建原始镜像名的别名(可选)
ORIGINAL_NAME="$1"
echo "🏷️ 创建别名: $FULL_IMAGE -> $ORIGINAL_NAME"
docker tag "$FULL_IMAGE" "$ORIGINAL_NAME"
EOF
chmod +x ~/bin/harbor-pull
echo "✅ 创建了 harbor-pull 工具: ~/bin/harbor-pull"
# 添加到 PATH(如果还没有)
if ! echo "$PATH" | grep -q "$HOME/bin"; then
echo "" >> ~/.zshrc
echo "# Harbor 工具路径" >> ~/.zshrc
echo "export PATH=\"\$HOME/bin:\$PATH\"" >> ~/.zshrc
echo "✅ 已添加 ~/bin 到 PATH"
fi
# 创建配置文件
mkdir -p ~/.config/harbor
tee ~/.config/harbor/config > /dev/null <<EOF
# Harbor 配置文件
HARBOR_REGISTRY="${HARBOR_REGISTRY}"
HARBOR_USER="admin"
HARBOR_PASSWORD="admin123"
# 代理项目映射
declare -A PROXY_MAP=(
["docker.io"]="dockerhub-proxy"
["ghcr.io"]="ghcr-proxy"
["quay.io"]="quay-proxy"
["registry.k8s.io"]="k8s-proxy"
["k8s.gcr.io"]="k8s-proxy"
)
EOF
echo "✅ 配置文件已创建: ~/.config/harbor/config"
}
# 测试配置
test_configuration() {
echo "🧪 测试配置..."
# 测试 Harbor 连接
if docker info | grep -q "$HARBOR_REGISTRY"; then
echo "✅ Docker 已配置 Harbor 镜像加速"
else
echo "⚠️ Docker 未检测到 Harbor 配置,可能需要手动重启"
fi
# 测试网络连接
if curl -s -k "https://${HARBOR_REGISTRY}/api/v2.0/systeminfo" > /dev/null; then
echo "✅ Harbor 服务连接正常"
else
echo "❌ Harbor 服务连接失败"
return 1
fi
# 提供使用示例
echo ""
echo "💡 使用示例:"
echo " Linux/Docker: docker pull nginx:latest (会自动通过 Harbor 加速)"
echo " macOS: harbor-pull nginx:latest (使用 harbor-pull 工具)"
echo " 显式代理: docker pull ${HARBOR_REGISTRY}/dockerhub-proxy/library/nginx:latest"
}
# 主执行逻辑
main() {
echo "开始配置客户端镜像加速..."
echo "Harbor 服务器: ${HARBOR_REGISTRY}"
echo ""
if [ "$SETUP_LINUX" = true ]; then
# 检查是否运行在 root 权限
if [ "$EUID" -ne 0 ]; then
echo "⚠️ Linux 配置需要 root 权限,请使用 sudo 运行"
echo " sudo $0"
exit 1
fi
# 检查服务状态
if systemctl is-active --quiet docker; then
setup_linux_docker
else
echo "⚠️ Docker 服务未运行,跳过 Docker 配置"
fi
if systemctl is-active --quiet containerd; then
setup_linux_containerd
else
echo "⚠️ Containerd 服务未运行,跳过 Containerd 配置"
fi
fi
if [ "$SETUP_MACOS" = true ]; then
setup_macos
fi
test_configuration
echo ""
echo "🎉 客户端镜像加速配置完成!"
echo ""
echo "📚 更多信息请查看文档: HARBOR_CACHE_OPTIMIZATION.md"
}
# 执行主函数
main "$@"