222 lines
6.0 KiB
Markdown
222 lines
6.0 KiB
Markdown
# 🏗️ 基础设施管理项目
|
||
|
||
这是一个现代化的多云基础设施管理平台,专注于 OpenTofu、Ansible 和 Nomad + Podman 的集成管理。
|
||
|
||
## 🎯 项目特性
|
||
|
||
- **🌩️ 多云支持**: Oracle Cloud, 华为云, Google Cloud, AWS, DigitalOcean
|
||
- **🏗️ 基础设施即代码**: 使用 OpenTofu 管理云资源
|
||
- **⚙️ 配置管理**: 使用 Ansible 自动化配置和部署
|
||
- **🐳 容器编排**: Nomad 集群管理和 Podman 容器运行时
|
||
- **🔄 CI/CD**: Gitea Actions 自动化流水线
|
||
- **📊 监控**: Prometheus + Grafana 监控体系
|
||
- **🔐 安全**: 多层安全防护和合规性
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
mgmt/
|
||
├── .gitea/workflows/ # CI/CD 工作流
|
||
├── tofu/ # OpenTofu 基础设施代码
|
||
│ ├── environments/ # 环境配置 (dev/staging/prod)
|
||
│ ├── modules/ # 可复用模块
|
||
│ ├── providers/ # 云服务商配置
|
||
│ └── shared/ # 共享配置
|
||
├── configuration/ # Ansible 配置管理
|
||
│ ├── inventories/ # 主机清单
|
||
│ ├── playbooks/ # 剧本
|
||
│ ├── roles/ # 角色
|
||
│ └── group_vars/ # 组变量
|
||
├── monitoring/ # 监控配置
|
||
├── scripts/ # 自动化脚本
|
||
│ ├── setup/ # 环境设置脚本
|
||
│ └── utilities/ # 实用工具脚本
|
||
├── mgmt.sh # 项目管理主脚本
|
||
└── Makefile # 项目管理命令
|
||
```
|
||
|
||
**注意:** 项目已从 Docker Swarm 迁移到 Nomad + Podman,原有的 swarm 目录已不再使用。
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 环境准备
|
||
|
||
```bash
|
||
# 克隆项目
|
||
git clone <repository-url>
|
||
cd mgmt
|
||
|
||
# 检查环境状态
|
||
./mgmt.sh status
|
||
|
||
# 快速部署(适用于开发环境)
|
||
./mgmt.sh deploy
|
||
```
|
||
|
||
### 2. 配置云服务商
|
||
|
||
```bash
|
||
# 复制配置模板
|
||
cp tofu/environments/dev/terraform.tfvars.example tofu/environments/dev/terraform.tfvars
|
||
|
||
# 编辑配置文件,填入你的云服务商凭据
|
||
vim tofu/environments/dev/terraform.tfvars
|
||
```
|
||
|
||
### 3. 初始化基础设施
|
||
|
||
```bash
|
||
# 初始化 OpenTofu
|
||
./mgmt.sh tofu init
|
||
|
||
# 查看执行计划
|
||
./mgmt.sh tofu plan
|
||
|
||
# 应用基础设施变更
|
||
cd tofu/environments/dev && tofu apply
|
||
```
|
||
|
||
### 4. 部署 Nomad 服务
|
||
|
||
```bash
|
||
# 部署 Consul 集群
|
||
nomad run /root/mgmt/consul-cluster-nomad.nomad
|
||
|
||
# 查看 Nomad 任务
|
||
nomad job status
|
||
|
||
# 查看节点状态
|
||
nomad node status
|
||
```
|
||
|
||
## 🛠️ 常用命令
|
||
|
||
| 命令 | 描述 |
|
||
|------|------|
|
||
| `./mgmt.sh status` | 显示项目状态总览 |
|
||
| `./mgmt.sh deploy` | 快速部署所有服务 |
|
||
| `./mgmt.sh cleanup` | 清理所有部署的服务 |
|
||
| `./mgmt.sh tofu <cmd>` | OpenTofu 管理命令 |
|
||
| `nomad job status` | 查看 Nomad 任务状态 |
|
||
| `nomad node status` | 查看 Nomad 节点状态 |
|
||
| `podman ps` | 查看运行中的容器 |
|
||
| `scripts/setup/setup-opentofu.sh help` | OpenTofu 设置帮助 |
|
||
|
||
## 🌩️ 支持的云服务商
|
||
|
||
### Oracle Cloud Infrastructure (OCI)
|
||
- ✅ 计算实例
|
||
- ✅ 网络配置 (VCN, 子网, 安全组)
|
||
- ✅ 存储 (块存储, 对象存储)
|
||
- ✅ 负载均衡器
|
||
|
||
### 华为云
|
||
- ✅ 弹性云服务器 (ECS)
|
||
- ✅ 虚拟私有云 (VPC)
|
||
- ✅ 弹性负载均衡 (ELB)
|
||
- ✅ 云硬盘 (EVS)
|
||
|
||
### Google Cloud Platform
|
||
- ✅ Compute Engine
|
||
- ✅ VPC 网络
|
||
- ✅ Cloud Load Balancing
|
||
- ✅ Persistent Disk
|
||
|
||
### Amazon Web Services
|
||
- ✅ EC2 实例
|
||
- ✅ VPC 网络
|
||
- ✅ Application Load Balancer
|
||
- ✅ EBS 存储
|
||
|
||
### DigitalOcean
|
||
- ✅ Droplets
|
||
- ✅ VPC 网络
|
||
- ✅ Load Balancers
|
||
- ✅ Block Storage
|
||
|
||
## 🔄 CI/CD 流程
|
||
|
||
### 基础设施部署流程
|
||
1. **代码提交** → 触发 Gitea Actions
|
||
2. **OpenTofu Plan** → 生成执行计划
|
||
3. **人工审核** → 确认变更
|
||
4. **OpenTofu Apply** → 应用基础设施变更
|
||
5. **Ansible 部署** → 配置和部署应用
|
||
|
||
### 应用部署流程
|
||
1. **应用代码更新** → 构建容器镜像
|
||
2. **镜像推送** → 推送到镜像仓库
|
||
3. **Nomad Job 更新** → 更新任务定义
|
||
4. **Nomad 部署** → 滚动更新服务
|
||
5. **健康检查** → 验证部署状态
|
||
|
||
## 📊 监控和可观测性
|
||
|
||
### 监控组件
|
||
- **Prometheus**: 指标收集和存储
|
||
- **Grafana**: 可视化仪表板
|
||
- **AlertManager**: 告警管理
|
||
- **Node Exporter**: 系统指标导出
|
||
|
||
### 日志管理
|
||
- **ELK Stack**: Elasticsearch + Logstash + Kibana
|
||
- **Fluentd**: 日志收集和转发
|
||
- **结构化日志**: JSON 格式标准化
|
||
|
||
## 🔐 安全最佳实践
|
||
|
||
### 基础设施安全
|
||
- **网络隔离**: VPC, 安全组, 防火墙
|
||
- **访问控制**: IAM 角色和策略
|
||
- **数据加密**: 传输和静态加密
|
||
- **密钥管理**: 云服务商密钥管理服务
|
||
|
||
### 应用安全
|
||
- **容器安全**: 镜像扫描, 最小权限
|
||
- **网络安全**: 服务网格, TLS 终止
|
||
- **秘密管理**: Docker Secrets, Ansible Vault
|
||
- **安全审计**: 日志监控和审计
|
||
|
||
## 🧪 测试策略
|
||
|
||
### 基础设施测试
|
||
- **语法检查**: OpenTofu validate
|
||
- **安全扫描**: Checkov, tfsec
|
||
- **合规检查**: OPA (Open Policy Agent)
|
||
|
||
### 应用测试
|
||
- **单元测试**: 应用代码测试
|
||
- **集成测试**: 服务间集成测试
|
||
- **端到端测试**: 完整流程测试
|
||
|
||
## 📚 文档
|
||
|
||
- [架构概览](docs/architecture/project-overview.md)
|
||
- [部署指南](docs/runbooks/deployment-guide.md)
|
||
- [运维手册](docs/runbooks/operations-guide.md)
|
||
- [故障排除](docs/runbooks/troubleshooting.md)
|
||
- [API 文档](docs/api/README.md)
|
||
|
||
## 🤝 贡献指南
|
||
|
||
1. Fork 项目
|
||
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
|
||
3. 提交变更 (`git commit -m 'Add amazing feature'`)
|
||
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
||
5. 创建 Pull Request
|
||
|
||
## 📄 许可证
|
||
|
||
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
|
||
|
||
## 🆘 支持
|
||
|
||
如果你遇到问题或有疑问:
|
||
|
||
1. 查看 [文档](docs/)
|
||
2. 搜索 [Issues](../../issues)
|
||
3. 创建新的 [Issue](../../issues/new)
|
||
|
||
## 🎉 致谢
|
||
|
||
感谢所有为这个项目做出贡献的开发者和社区成员! |