- 更新 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]>
262 lines
7.1 KiB
Bash
Executable File
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 "$@" |