docs: 添加 Harbor 外网访问配置完整总结

This commit is contained in:
2026-02-27 13:50:30 +08:00
parent b367870923
commit 6b9dcf01fa
+331
View File
@@ -0,0 +1,331 @@
# Harbor 外网访问配置总结
## 配置完成状态
✅ **Harbor 已成功配置外网访问**
- 域名:`harbor.omniverseai.net:8443`
- SSL 证书:Let's Encrypt(有效期 90 天)
- 访问模式:DNS only(直接解析到公网 IP)
- 证书颁发者:Let's Encrypt
- 证书有效期:2026-02-27 至 2026-05-28
## 关键配置
### 1. SSL 证书配置
**证书位置:**
- 证书文件:`/Users/brunogao/ops/data/harbor/secret/cert/server.crt`
- 私钥文件:`/Users/brunogao/ops/data/harbor/secret/cert/server.key`
- 备份位置:`/Users/brunogao/certs/harbor.omniverseai.net.pem`
**认证方式:**
- Cloudflare API Key + Email(DNS-01 验证)
- 凭证文件:`~/.secrets/cloudflare.ini`
**自动续期:**
- 续期脚本:`/usr/local/bin/renew-harbor-cert.sh`
- 续期时间:每月 1 号和 15 号凌晨 2 点
- 续期日志:`/var/log/harbor-cert-renew.log`
### 2. Harbor 配置
**harbor.yml 关键配置:**
```yaml
hostname: harbor.omniverseai.net
http:
port: 8080
https:
port: 8443
certificate: /Users/brunogao/certs/harbor.omniverseai.net.pem
private_key: /Users/brunogao/certs/harbor.omniverseai.net-key.pem
external_url: https://harbor.omniverseai.net:8443
```
**重要:EXT_ENDPOINT 配置**
Harbor 内部服务需要正确的 `EXT_ENDPOINT` 环境变量才能返回正确的 token service URL。
配置文件:`common/config/core/env`
```bash
EXT_ENDPOINT=https://harbor.omniverseai.net:8443
```
⚠️ **注意**:`common/config` 目录被 gitignore 忽略,重新部署时需要手动修改此文件。
### 3. 网络配置
**DNS 模式:**
- DNS only(不通过 Cloudflare 代理)
- 原因:避免 Cloudflare 100MB 文件大小限制
**DNS 解析:**
```
harbor.omniverseai.net → 14.127.218.144:8443
```
**端口转发(路由器配置):**
- 外部端口:8443 → 内部 IP:192.168.1.83:8443
- 外部端口:8080 → 内部 IP:192.168.1.83:8080(可选)
## 使用方法
### Docker Login
```bash
# 从外网登录
docker login harbor.omniverseai.net:8443
# 推送镜像
docker tag myimage:latest harbor.omniverseai.net:8443/library/myimage:latest
docker push harbor.omniverseai.net:8443/library/myimage:latest
# 拉取镜像
docker pull harbor.omniverseai.net:8443/library/myimage:latest
```
### Web 访问
```bash
# 浏览器访问
https://harbor.omniverseai.net:8443
# 默认账号
用户名:admin
密码:admin123
```
## 维护命令
### 证书管理
```bash
# 查看证书状态
sudo certbot certificates
# 查看证书详情
openssl x509 -in /Users/brunogao/certs/harbor.omniverseai.net.pem -noout -text
# 测试续期(不实际续期)
sudo certbot renew --dry-run
# 手动续期
sudo /usr/local/bin/renew-harbor-cert.sh
# 查看续期日志
tail -f /var/log/harbor-cert-renew.log
```
### Harbor 服务管理
```bash
# 重启 Harbor
cd /Users/brunogao/work/codes/tools/macos/harbor
docker-compose down
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 重启 nginx(证书更新后)
docker restart nginx
```
### 验证配置
```bash
# 验证 SSL 证书
openssl s_client -connect harbor.omniverseai.net:8443 -servername harbor.omniverseai.net < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates
# 验证 EXT_ENDPOINT
docker exec harbor-core env | grep EXT_ENDPOINT
# 测试 HTTP 访问
curl -I http://127.0.0.1:8080
# 测试 HTTPS 访问
curl -Ik https://127.0.0.1:8443
# 从外网测试
curl -Ik https://harbor.omniverseai.net:8443
```
## 故障排查
### 问题 1:Docker login 超时
**症状:**
```
Error response from daemon: Get "https://harbor.omniverseai.net/service/token...": context deadline exceeded
```
**原因:**
- `EXT_ENDPOINT` 环境变量缺少端口号
- Harbor 返回的 token service URL 不正确
**解决方案:**
1. 检查 `common/config/core/env` 中的 `EXT_ENDPOINT`
2. 确保包含端口号:`EXT_ENDPOINT=https://harbor.omniverseai.net:8443`
3. 重启 Harbor:`docker-compose down && docker-compose up -d`
4. 验证:`docker exec harbor-core env | grep EXT_ENDPOINT`
### 问题 2:证书验证失败
**症状:**
```
x509: certificate signed by unknown authority
```
**原因:**
- Harbor 使用的是旧的自签名证书
- 证书文件没有正确复制到 Harbor 目录
**解决方案:**
1. 检查证书文件:
```bash
ls -lh /Users/brunogao/ops/data/harbor/secret/cert/
openssl x509 -in /Users/brunogao/ops/data/harbor/secret/cert/server.crt -noout -issuer
```
2. 如果证书不正确,重新复制:
```bash
cp /Users/brunogao/certs/harbor.omniverseai.net.pem /Users/brunogao/ops/data/harbor/secret/cert/server.crt
cp /Users/brunogao/certs/harbor.omniverseai.net-key.pem /Users/brunogao/ops/data/harbor/secret/cert/server.key
docker restart nginx
```
### 问题 3:外网无法访问
**症状:**
```
curl: (28) Failed to connect to harbor.omniverseai.net port 8443: Connection timed out
```
**原因:**
- 路由器端口转发未配置
- 防火墙阻止端口
- DNS 解析错误
**解决方案:**
1. 检查 DNS 解析:
```bash
nslookup harbor.omniverseai.net
# 应该返回:14.127.218.144
```
2. 检查本地服务:
```bash
curl -Ik https://127.0.0.1:8443
# 应该返回 200 OK
```
3. 检查路由器端口转发配置
4. 检查防火墙规则
## 重要提醒
1. **证书续期**
- Let's Encrypt 证书有效期 90 天
- 已配置自动续期(每月 1 号和 15 号)
- 建议每月检查续期日志
2. **备份**
- 定期备份 Harbor 数据
- 备份 Cloudflare API 凭证
- 备份 harbor.yml 配置文件
3. **安全**
- 修改默认管理员密码
- 定期更新 Harbor 版本
- 监控访问日志
4. **DNS only 模式**
- 必须保持 DNS only 模式(不启用 Cloudflare 代理)
- 原因:避免 Cloudflare 100MB 文件大小限制
- 大型 Docker 镜像无法通过 Cloudflare 代理上传
## 配置文件位置
```
/Users/brunogao/work/codes/tools/macos/harbor/
├── harbor.yml # Harbor 主配置文件
├── docker-compose.yml # Docker Compose 配置
├── common/config/core/env # Harbor Core 环境变量(包含 EXT_ENDPOINT)
├── setup-letsencrypt-dns-only.sh # SSL 证书配置脚本
├── SSL-CERTIFICATE-DNS-ONLY-GUIDE.md # SSL 证书配置指南
└── SSL-SETUP-SUMMARY.md # SSL 配置快速总结
/Users/brunogao/certs/
├── harbor.omniverseai.net.pem # SSL 证书(备份)
└── harbor.omniverseai.net-key.pem # SSL 私钥(备份)
/Users/brunogao/ops/data/harbor/secret/cert/
├── server.crt # Harbor 使用的 SSL 证书
└── server.key # Harbor 使用的 SSL 私钥
/Users/brunogao/.secrets/
└── cloudflare.ini # Cloudflare API 凭证
/usr/local/bin/
└── renew-harbor-cert.sh # 证书自动续期脚本
```
## 测试结果
✅ **本地访问测试**
```bash
curl -I http://127.0.0.1:8080
# HTTP/1.1 200 OK
curl -Ik https://127.0.0.1:8443
# HTTP/1.1 200 OK
```
✅ **外网访问测试**
```bash
curl -Ik https://harbor.omniverseai.net:8443
# HTTP/1.1 200 OK
```
✅ **Docker Login 测试**
```bash
docker login harbor.omniverseai.net:8443
# Login Succeeded
```
✅ **SSL 证书验证**
```bash
openssl s_client -connect harbor.omniverseai.net:8443 -servername harbor.omniverseai.net
# subject=CN=harbor.omniverseai.net
# issuer=C=US, O=Let's Encrypt, CN=E8
# notBefore=Feb 27 04:23:00 2026 GMT
# notAfter=May 28 04:22:59 2026 GMT
```
## 下一步建议
1. **修改默认密码**
```bash
# 登录 Web 界面修改 admin 密码
https://harbor.omniverseai.net:8443
```
2. **创建项目和用户**
- 创建项目(如 library, production, staging)
- 创建用户并分配权限
- 配置镜像扫描策略
3. **配置镜像同步**
- 配置 Docker Hub 代理
- 配置其他 Registry 同步
4. **监控和日志**
- 配置日志收集
- 设置告警规则
- 监控磁盘使用情况
---
**配置完成时间:** 2026-02-27
**配置人员:** Claude Code
**Git 仓库:** http://192.168.1.83:33000/gao/ljwx-harbor.git