# Traefik 配置管理指南

## 🎯 配置与应用分离的最佳实践

### ⚠️ 重要：避免低逼格操作

**❌ 错误做法（显得很low）：**
- 修改Nomad job文件来添加新域名
- 重新部署整个Traefik服务
- 把配置嵌入在应用定义中

**✅ 正确做法（优雅且专业）：**

## 配置文件分离架构

### 1. 配置文件位置

- **动态配置**: `/root/mgmt/components/traefik/config/dynamic.yml`
- **应用配置**: `/root/mgmt/components/traefik/jobs/traefik-cloudflare-git4ta-live.nomad`

### 2. 关键特性

- ✅ **热重载**: Traefik配置了`file`提供者，支持`watch: true`
- ✅ **自动生效**: 修改YAML配置文件后自动生效，无需重启
- ✅ **配置分离**: 配置与应用完全分离，符合最佳实践

### 3. 添加新域名的工作流程

```bash
# 只需要编辑配置文件
vim /root/mgmt/components/traefik/config/dynamic.yml

# 添加新的服务配置
services:
  new-service-cluster:
    loadBalancer:
      servers:
        - url: "https://new-service.tailnet-68f9.ts.net:8080"
      healthCheck:
        path: "/health"
        interval: "30s"
        timeout: "15s"

# 添加新的路由配置
routers:
  new-service-ui:
    rule: "Host(`new-service.git-4ta.live`)"
    service: new-service-cluster
    entryPoints:
      - websecure
    tls:
      certResolver: cloudflare

# 保存后立即生效，无需重启！
```

### 4. 架构优势

- 🚀 **零停机时间**: 配置变更无需重启服务
- 🔧 **灵活管理**: 独立管理配置和应用
- 📝 **版本控制**: 配置文件可以独立版本管理
- 🎯 **专业标准**: 符合现代DevOps最佳实践

## 当前服务配置

### 已配置的服务

1. **Consul集群**
   - 域名: `consul.git-4ta.live`
   - 后端: 多节点负载均衡
   - 健康检查: `/v1/status/leader`

2. **Nomad集群**
   - 域名: `nomad.git-4ta.live`
   - 后端: 多节点负载均衡
   - 健康检查: `/v1/status/leader`

3. **Waypoint服务**
   - 域名: `waypoint.git-4ta.live`
   - 后端: `hcp1.tailnet-68f9.ts.net:9701`
   - 协议: HTTPS (跳过证书验证)

4. **Vault服务**
   - 域名: `vault.git-4ta.live`
   - 后端: `warden.tailnet-68f9.ts.net:8200`
   - 健康检查: `/ui/`

5. **Authentik服务**
   - 域名: `authentik.git-4ta.live`
   - 后端: `authentik.tailnet-68f9.ts.net:9443`
   - 协议: HTTPS (跳过证书验证)
   - 健康检查: `/flows/-/default/authentication/`

6. **Traefik Dashboard**
   - 域名: `traefik.git-4ta.live`
   - 服务: 内置dashboard

### SSL证书管理

- **证书解析器**: Cloudflare DNS Challenge
- **自动续期**: Let's Encrypt证书自动管理
- **存储位置**: `/opt/traefik/certs/acme.json`
- **强制HTTPS**: 所有HTTP请求自动重定向到HTTPS

## 故障排除

### 检查服务状态

```bash
# 检查Traefik API
curl -s http://hcp1.tailnet-68f9.ts.net:8080/api/overview

# 检查路由配置
curl -s http://hcp1.tailnet-68f9.ts.net:8080/api/http/routers

# 检查服务配置
curl -s http://hcp1.tailnet-68f9.ts.net:8080/api/http/services
```

### 检查证书状态

```bash
# 检查SSL证书
openssl s_client -connect consul.git-4ta.live:443 -servername consul.git-4ta.live < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer

# 检查证书文件
ssh root@hcp1 "cat /opt/traefik/certs/acme.json | jq '.cloudflare.Certificates'"
```

### 查看日志

```bash
# 查看Traefik日志
nomad logs -tail traefik-cloudflare-v1

# 查看特定错误
nomad logs -tail traefik-cloudflare-v1 | grep -i "error\|warn\|fail"
```

## 最佳实践

1. **配置管理**
   - 始终使用`dynamic.yml`文件管理路由配置
   - 避免修改Nomad job文件
   - 使用版本控制管理配置文件

2. **服务发现**
   - 优先使用Tailscale网络地址
   - 配置适当的健康检查
   - 使用HTTPS协议（跳过自签名证书验证）

3. **SSL证书**
   - 依赖Cloudflare DNS Challenge
   - 监控证书自动续期
   - 定期检查证书状态

4. **监控和日志**
   - 启用Traefik API监控
   - 配置访问日志
   - 定期检查服务健康状态

## 记住

**配置与应用分离是现代基础设施管理的核心原则！**

这种架构不仅提高了系统的灵活性和可维护性，更体现了专业的DevOps实践水平。
