364 lines
8.8 KiB
Markdown
364 lines
8.8 KiB
Markdown
# 🛠️ 服务器管理自动化项目
|
||
|
||
这是一个基于 Ansible 的服务器管理自动化项目,用于管理多台服务器的系统更新、配置和维护。
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
mgmt/
|
||
├── ansible/
|
||
│ ├── inventory.ini # 服务器清单
|
||
│ ├── ansible.cfg # Ansible 配置
|
||
│ ├── system-update.yml # 系统更新 playbook
|
||
│ ├── cloud-providers-update.yml # 云服务商更新 playbook
|
||
│ ├── system-cleanup.yml # 系统清理和维护
|
||
│ ├── service-health-check.yml # 服务健康检查
|
||
│ ├── security-hardening.yml # 安全加固和备份
|
||
│ ├── docker-management.yml # Docker 容器管理
|
||
│ ├── network-connectivity.yml # 网络连通性检查
|
||
│ ├── certificate-management.yml # SSL 证书管理
|
||
│ ├── ops-toolkit.yml # 运维工具包
|
||
│ ├── cron-setup.yml # 定时任务配置
|
||
│ └── run.sh # 执行脚本
|
||
├── scripts/
|
||
│ └── ops-manager.sh # 运维管理脚本
|
||
├── config.json # Semaphore 配置
|
||
├── keys-info.md # SSH 密钥信息
|
||
├── semaphore-setup-guide.md # Semaphore 设置指南
|
||
└── README.md # 项目说明
|
||
```
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 环境准备
|
||
|
||
确保已安装 Ansible:
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt update && sudo apt install ansible
|
||
|
||
# CentOS/RHEL
|
||
sudo yum install ansible
|
||
```
|
||
|
||
### 2. 配置服务器清单
|
||
|
||
编辑 `ansible/inventory.ini` 文件,服务器已按功能分组:
|
||
|
||
- **lxc**: Debian/Ubuntu 容器
|
||
- **alpine**: Alpine Linux 容器
|
||
- **proxmox**: Proxmox VE 物理机
|
||
- **armbian**: ARM 设备
|
||
- **hcp**: HCP 云服务器
|
||
- **feiniu**: 飞牛服务器
|
||
- **germany**: 德国服务器
|
||
- 以及各种云服务商组
|
||
|
||
### 3. 使用运维管理脚本
|
||
|
||
```bash
|
||
# 给脚本执行权限
|
||
chmod +x scripts/ops-manager.sh
|
||
|
||
# 交互式模式
|
||
./scripts/ops-manager.sh
|
||
|
||
# 直接执行
|
||
./scripts/ops-manager.sh update lxc # 更新 LXC 容器
|
||
./scripts/ops-manager.sh cleanup all # 清理所有服务器
|
||
./scripts/ops-manager.sh health proxmox # 检查 Proxmox 健康状态
|
||
./scripts/ops-manager.sh docker lxc # 管理 LXC 中的 Docker
|
||
./scripts/ops-manager.sh toolkit germany # 运行德国服务器工具包
|
||
|
||
# 检查模式(不做实际更改)
|
||
./scripts/ops-manager.sh update all --check
|
||
```
|
||
|
||
## 🛠️ 可用的运维脚本
|
||
|
||
### 核心功能
|
||
- **system-update.yml**: 系统包更新
|
||
- **system-cleanup.yml**: 磁盘清理、日志清理、缓存清理
|
||
- **service-health-check.yml**: 服务状态监控
|
||
- **security-hardening.yml**: 安全加固和备份
|
||
|
||
### 专业工具
|
||
- **docker-management.yml**: Docker 容器和镜像管理
|
||
- **network-connectivity.yml**: 网络连通性和性能测试
|
||
- **certificate-management.yml**: SSL 证书监控和管理
|
||
- **ops-toolkit.yml**: 统一运维仪表板
|
||
|
||
### 自动化
|
||
- **cron-setup.yml**: 配置定时任务自动化
|
||
- **ops-manager.sh**: 便捷的命令行管理工具
|
||
|
||
## 🤖 自动化定时任务
|
||
|
||
设置自动化定时任务:
|
||
```bash
|
||
ansible-playbook -i ansible/inventory.ini ansible/cron-setup.yml
|
||
```
|
||
|
||
配置的定时任务:
|
||
- **每日 08:00**: 系统健康检查
|
||
- **每日 01:00**: Docker 清理 (LXC 组)
|
||
- **每周日 02:00**: 系统清理
|
||
- **每周一 04:30**: 证书检查
|
||
- **每周二 06:00**: 网络连通性检查
|
||
- **每月1日 03:00**: 安全检查
|
||
|
||
查看自动化状态:
|
||
```bash
|
||
automation-status
|
||
```
|
||
|
||
## 📊 使用 Semaphore Web UI
|
||
|
||
参考 `semaphore-setup-guide.md` 文件设置 Semaphore Web 界面管理。
|
||
|
||
推送到 Gitea 后,Semaphore 可以:
|
||
- ✅ 直接识别 Ansible 项目结构
|
||
- ✅ 使用现有的 inventory 分组
|
||
- ✅ 运行预定义的 playbooks
|
||
- ✅ 支持按组选择性更新
|
||
- ✅ 提供 Web 界面管理和监控
|
||
|
||
## 💡 最佳实践
|
||
|
||
### 日常运维
|
||
```bash
|
||
# 每日快速检查
|
||
./scripts/ops-manager.sh toolkit all
|
||
|
||
# 每周系统维护
|
||
./scripts/ops-manager.sh cleanup all
|
||
./scripts/ops-manager.sh health all
|
||
|
||
# 每月安全检查
|
||
./scripts/ops-manager.sh security all --check
|
||
./scripts/ops-manager.sh cert all
|
||
```
|
||
|
||
### 紧急情况
|
||
```bash
|
||
# 紧急安全更新
|
||
./scripts/ops-manager.sh update all
|
||
|
||
# 网络问题诊断
|
||
./scripts/ops-manager.sh network all
|
||
|
||
# 服务状态检查
|
||
./scripts/ops-manager.sh health all
|
||
```
|
||
|
||
### 容器管理
|
||
```bash
|
||
# LXC 容器管理
|
||
./scripts/ops-manager.sh docker lxc
|
||
./scripts/ops-manager.sh cleanup lxc
|
||
|
||
# Alpine 容器更新
|
||
./scripts/ops-manager.sh update alpine
|
||
```
|
||
|
||
## 🔧 高级用法
|
||
|
||
### 按组管理
|
||
```bash
|
||
# 物理机维护
|
||
./scripts/ops-manager.sh cleanup proxmox
|
||
./scripts/ops-manager.sh health armbian
|
||
|
||
# 云服务商管理
|
||
./scripts/ops-manager.sh update huawei
|
||
./scripts/ops-manager.sh network google
|
||
|
||
# 容器管理
|
||
./scripts/ops-manager.sh docker lxc
|
||
./scripts/ops-manager.sh update alpine
|
||
```
|
||
|
||
### 检查模式
|
||
```bash
|
||
# 检查更新但不执行
|
||
./scripts/ops-manager.sh update all --check
|
||
|
||
# 详细输出
|
||
./scripts/ops-manager.sh health all --verbose
|
||
|
||
# 仅显示命令
|
||
./scripts/ops-manager.sh cleanup all --dry-run
|
||
```
|
||
|
||
## 📋 服务器组说明
|
||
|
||
- **lxc**: Debian/Ubuntu 容器 (warden, gitea, mysql, postgresql, influxdb)
|
||
- **alpine**: Alpine Linux 容器 (redis, authentik, calibreweb)
|
||
- **proxmox**: Proxmox VE 物理机 (pve, xgp, nuc12)
|
||
- **armbian**: ARM 设备 (onecloud1)
|
||
- **hcp**: HCP 云服务器 (hcp1, hcp2)
|
||
- **feiniu**: 飞牛服务器 (snail)
|
||
- **germany**: 德国服务器 (de)
|
||
- **dev**: 开发服务器 (dev1, dev2)
|
||
- **oci_kr/oci_us**: Oracle 云服务器
|
||
- **huawei/google/aws**: 各云服务商
|
||
|
||
## 📝 注意事项
|
||
|
||
- 确保 SSH 密钥已正确配置
|
||
- LXC 组更新需要顺序执行,避免同时更新
|
||
- Alpine 容器使用 `apk` 包管理器
|
||
- 建议先在测试环境验证
|
||
- 定期备份重要数据
|
||
- 监控自动化日志:`tail -f /var/log/daily-health-check.log`
|
||
|
||
## 🆘 故障排除
|
||
|
||
### 连接问题
|
||
```bash
|
||
# 测试连接
|
||
ansible all -i ansible/inventory.ini -m ping
|
||
|
||
# 检查特定组
|
||
ansible lxc -i ansible/inventory.ini -m ping -e "ansible_ssh_pass=313131"
|
||
```
|
||
|
||
### 权限问题
|
||
```bash
|
||
# 检查 sudo 权限
|
||
ansible all -i ansible/inventory.ini -m shell -a "whoami" --become
|
||
```
|
||
|
||
### 日志查看
|
||
```bash
|
||
# 查看自动化日志
|
||
ls -la /var/log/*-*.log
|
||
tail -f /var/log/daily-health-check.log
|
||
```
|
||
|
||
## 🎯 运维脚本使用示例
|
||
|
||
### 系统更新
|
||
```bash
|
||
# 更新所有服务器
|
||
./scripts/ops-manager.sh update all
|
||
|
||
# 更新特定组
|
||
./scripts/ops-manager.sh update lxc
|
||
./scripts/ops-manager.sh update alpine
|
||
./scripts/ops-manager.sh update proxmox
|
||
```
|
||
|
||
### 系统清理
|
||
```bash
|
||
# 清理所有服务器
|
||
./scripts/ops-manager.sh cleanup all
|
||
|
||
# 清理特定组
|
||
./scripts/ops-manager.sh cleanup lxc
|
||
```
|
||
|
||
### 健康检查
|
||
```bash
|
||
# 检查所有服务器健康状态
|
||
./scripts/ops-manager.sh health all
|
||
|
||
# 检查特定组
|
||
./scripts/ops-manager.sh health proxmox
|
||
```
|
||
|
||
### Docker 管理
|
||
```bash
|
||
# 管理 LXC 组的 Docker
|
||
./scripts/ops-manager.sh docker lxc
|
||
|
||
# 检查 Docker 状态
|
||
./scripts/ops-manager.sh docker all
|
||
```
|
||
|
||
### 网络诊断
|
||
```bash
|
||
# 检查网络连通性
|
||
./scripts/ops-manager.sh network all
|
||
|
||
# 检查特定组网络
|
||
./scripts/ops-manager.sh network germany
|
||
```
|
||
|
||
### 证书管理
|
||
```bash
|
||
# 检查所有证书
|
||
./scripts/ops-manager.sh cert all
|
||
|
||
# 检查特定组证书
|
||
./scripts/ops-manager.sh cert proxmox
|
||
```
|
||
|
||
### 安全检查
|
||
```bash
|
||
# 安全检查(检查模式)
|
||
./scripts/ops-manager.sh security all --check
|
||
|
||
# 执行安全加固
|
||
./scripts/ops-manager.sh security all
|
||
```
|
||
|
||
### 运维工具包
|
||
```bash
|
||
# 运行完整的运维工具包
|
||
./scripts/ops-manager.sh toolkit all
|
||
|
||
# 检查特定服务器
|
||
./scripts/ops-manager.sh toolkit germany
|
||
```
|
||
|
||
## 📈 监控和日志
|
||
|
||
### 自动化监控
|
||
```bash
|
||
# 查看自动化状态
|
||
automation-status
|
||
|
||
# 查看定时任务
|
||
crontab -l
|
||
|
||
# 查看最近的健康检查
|
||
tail -20 /var/log/daily-health-check.log
|
||
```
|
||
|
||
### 手动日志查看
|
||
```bash
|
||
# 查看所有自动化日志
|
||
ls -la /var/log/*-*.log
|
||
|
||
# 实时监控日志
|
||
tail -f /var/log/daily-health-check.log
|
||
|
||
# 查看清理日志
|
||
cat /var/log/weekly-cleanup.log
|
||
```
|
||
|
||
## 🔄 定期维护建议
|
||
|
||
### 每日
|
||
- 运行 `./scripts/ops-manager.sh toolkit all` 快速检查
|
||
- 查看 `automation-status` 了解自动化状态
|
||
|
||
### 每周
|
||
- 运行 `./scripts/ops-manager.sh cleanup all` 系统清理
|
||
- 运行 `./scripts/ops-manager.sh health all` 健康检查
|
||
- 检查 `/var/log/` 下的日志文件
|
||
|
||
### 每月
|
||
- 运行 `./scripts/ops-manager.sh security all --check` 安全检查
|
||
- 运行 `./scripts/ops-manager.sh cert all` 证书检查
|
||
- 运行 `./scripts/ops-manager.sh network all` 网络检查
|
||
|
||
### 按需
|
||
- 系统更新:`./scripts/ops-manager.sh update [group]`
|
||
- Docker 清理:`./scripts/ops-manager.sh docker lxc`
|
||
- 网络诊断:`./scripts/ops-manager.sh network all`
|
||
|
||
## 许可证
|
||
|
||
MIT License |