✨ 新功能: - 一键自动化部署脚本 (build-infra.sh) - 统一端口配置 (3开头端口,避免冲突) - 多平台Docker构建支持 (AMD64 + ARM64) - Jenkins Configuration as Code (零手动配置) - 完整的服务验证和健康检查 🏗️ 核心组件: - Jenkins LTS + JDK21 (端口38080) - Gitea 1.21 (端口33000, SSH: 32222) - Docker Registry + UI (端口35001/35002) - 统一cicd-network网络 📋 管理工具: - 自动化部署和验证脚本 - 健康检查和日志管理工具 - 完整的文档和故障排查指南 🎯 已验证功能: - 所有服务正常启动和运行 - API和Web界面完全可访问 - 多平台构建环境就绪 - 完整的CI/CD流水线支持 适用环境: Mac Studio M2 + Docker Desktop
182 lines
4.5 KiB
Bash
Executable File
182 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
||
# ExpressVPN TLS证书问题综合解决方案
|
||
|
||
set -e
|
||
G='\033[0;32m';Y='\033[1;33m';R='\033[0;31m';NC='\033[0m'
|
||
log() { echo -e "${G}[INFO]${NC} $1"; }
|
||
warn() { echo -e "${Y}[WARN]${NC} $1"; }
|
||
error() { echo -e "${R}[ERROR]${NC} $1"; }
|
||
|
||
log "=== ExpressVPN TLS问题解决方案 ==="
|
||
|
||
# 方案1:修改Docker配置跳过TLS验证(不推荐,仅临时使用)
|
||
disable_tls_verify() {
|
||
log "方案1:临时禁用TLS验证"
|
||
|
||
# 备份配置
|
||
cp ~/.docker/daemon.json ~/.docker/daemon.json.backup 2>/dev/null || true
|
||
|
||
# 添加TLS跳过配置
|
||
cat > ~/.docker/daemon.json << 'EOF'
|
||
{
|
||
"experimental": true,
|
||
"features": {
|
||
"buildkit": true
|
||
},
|
||
"insecure-registries": [
|
||
"localhost:5001"
|
||
],
|
||
"registry-mirrors": [],
|
||
"disable-legacy-registry": false
|
||
}
|
||
EOF
|
||
|
||
# 重启Docker
|
||
osascript -e 'quit app "OrbStack"' && sleep 3 && open -a OrbStack
|
||
sleep 10
|
||
|
||
log "✅ Docker配置已更新,请重试拉取镜像"
|
||
}
|
||
|
||
# 方案2:使用本地镜像缓存
|
||
use_local_cache() {
|
||
log "方案2:创建本地镜像缓存"
|
||
|
||
# 创建本地缓存目录
|
||
mkdir -p ~/docker-cache
|
||
|
||
# 下载常用镜像的tar包(如果可能)
|
||
log "提示:可以在网络条件好的时候预先下载镜像:"
|
||
echo " docker save gitea/gitea:latest > ~/docker-cache/gitea.tar"
|
||
echo " docker load < ~/docker-cache/gitea.tar"
|
||
}
|
||
|
||
# 方案3:使用国内云服务器中转
|
||
setup_proxy_server() {
|
||
log "方案3:配置代理服务器"
|
||
|
||
cat << 'EOF'
|
||
建议在国内云服务器上设置Docker Registry代理:
|
||
|
||
1. 在云服务器运行:
|
||
docker run -d --restart=always -p 5000:5000 \
|
||
--name registry-proxy \
|
||
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
|
||
registry:2
|
||
|
||
2. 在本地配置使用代理:
|
||
{
|
||
"registry-mirrors": ["http://your-server:5000"]
|
||
}
|
||
EOF
|
||
}
|
||
|
||
# 方案4:ExpressVPN配置优化
|
||
optimize_expressvpn() {
|
||
log "方案4:ExpressVPN配置优化"
|
||
|
||
cat << 'EOF'
|
||
ExpressVPN配置建议:
|
||
|
||
1. 切换协议:
|
||
- 打开ExpressVPN应用
|
||
- 进入设置 > Protocol
|
||
- 选择 "Automatic" 而不是 "OpenVPN"
|
||
|
||
2. 切换服务器位置:
|
||
- 尝试美国西海岸服务器(洛杉矶)
|
||
- 尝试香港服务器
|
||
- 避免使用欧洲服务器
|
||
|
||
3. 禁用某些功能:
|
||
- 关闭 "Network Lock"
|
||
- 关闭 "Block ads & trackers"
|
||
|
||
4. 使用分流:
|
||
- 在路由器层面配置Docker Hub直连
|
||
EOF
|
||
}
|
||
|
||
# 方案5:直接解决当前问题
|
||
fix_current_issue() {
|
||
log "方案5:直接修复当前Gitea拉取问题"
|
||
|
||
# 尝试使用已有的alpine镜像构建gitea
|
||
log "使用临时解决方案..."
|
||
|
||
# 创建简化的compose文件
|
||
cat > /tmp/gitea-simple.yml << 'EOF'
|
||
version: '3.8'
|
||
services:
|
||
gitea-simple:
|
||
image: alpine:latest
|
||
container_name: gitea-temp
|
||
command: /bin/sh -c "echo 'Gitea服务占位符,网络修复后替换' && sleep 3600"
|
||
ports:
|
||
- "3000:3000"
|
||
networks:
|
||
- cicd-network
|
||
|
||
networks:
|
||
cicd-network:
|
||
external: true
|
||
EOF
|
||
|
||
# 启动临时服务
|
||
docker network create cicd-network 2>/dev/null || true
|
||
docker-compose -f /tmp/gitea-simple.yml up -d
|
||
|
||
log "✅ 临时Gitea服务已启动,端口3000"
|
||
log "修复网络问题后可以替换为真正的Gitea镜像"
|
||
}
|
||
|
||
# 测试网络连接
|
||
test_network() {
|
||
log "测试网络连接..."
|
||
|
||
echo "测试结果:"
|
||
echo -n "Docker Hub API: "
|
||
curl -s -w "%{http_code}" -o /dev/null https://index.docker.io || echo "失败"
|
||
|
||
echo -n "Docker Registry: "
|
||
curl -s -w "%{http_code}" -o /dev/null https://registry-1.docker.io || echo "失败"
|
||
|
||
echo -n "Gitea官网: "
|
||
curl -s -w "%{http_code}" -o /dev/null https://gitea.io || echo "失败"
|
||
}
|
||
|
||
# 主菜单
|
||
show_menu() {
|
||
echo "
|
||
=== ExpressVPN TLS问题解决方案 ===
|
||
1. 🔧 禁用TLS验证(临时方案)
|
||
2. 💾 使用本地镜像缓存
|
||
3. 🌐 配置代理服务器
|
||
4. 📡 ExpressVPN优化建议
|
||
5. 🚀 直接修复当前问题
|
||
6. 🧪 测试网络连接
|
||
0. 退出
|
||
|
||
请选择 (0-6): "
|
||
}
|
||
|
||
# 主程序
|
||
main() {
|
||
while true; do
|
||
show_menu
|
||
read -r choice
|
||
case $choice in
|
||
1) disable_tls_verify ;;
|
||
2) use_local_cache ;;
|
||
3) setup_proxy_server ;;
|
||
4) optimize_expressvpn ;;
|
||
5) fix_current_issue ;;
|
||
6) test_network ;;
|
||
0) log "退出"; exit 0 ;;
|
||
*) warn "无效选择" ;;
|
||
esac
|
||
echo; read -p "按回车继续..."; echo
|
||
done
|
||
}
|
||
|
||
main "$@" |