# host_manager **Repository Path**: usecode/host_manager ## Basic Information - **Project Name**: host_manager - **Description**: 基于 Django + Celery 的企业级主机管理平台,提供主机管理、自动密码轮换、健康监测和统计报表功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-10 - **Last Updated**: 2025-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 主机管理系统 基于 Django + Celery 的企业级主机管理平台,提供主机全生命周期管理、自动密码轮换和健康监控功能。 ## 功能特点 - 🖥️ 主机/城市/机房全功能管理 - 🔐 自动密码轮换(可配置间隔) - 📊 每日统计报表生成 - 🚦 主机可达性检测(Ping) - ⚡ 异步任务处理 - ⏱️ 请求耗时监控中间件 ## 项目启动 ### 方式一:Docker 启动(推荐) # 1. 克隆项目 git clone https://github.com/yourrepo/host-manager.git cd host-manager # 2. 启动服务(后台模式) docker-compose up -d --build # 3. 应用数据库迁移 docker-compose exec web python manage.py migrate # 4. 创建管理员用户 docker-compose exec web python manage.py createsuperuser # 5. 访问系统 管理后台 http://localhost:8000/admin API文档 http://localhost:8000/api-docs/ ### 方式二:手动启动(开发环境) #前置依赖 - Python 3.8+ - MySQL 5.7+ - Redis 3.0+ ```bash python manage.py runserver ``` # 1. 创建虚拟环境 ```shell python -m venv venv source venv/bin/activate # Linux/MacOS venv\Scripts\activate # Windows ``` # 2. 安装依赖 ```shell pip install -r requirements.txt ``` # 3. 配置环境变量 ```shell cp .env.example .env ``` # 编辑.env文件配置数据库和Redis连接 # 4. 启动服务 ```shell python manage.py migrate # 数据库迁移 python manage.py runserver # 启动Django celery -A host_manager worker -l info # 启动Celery Worker celery -A host_manager beat -l info # 启动Celery Beat ``` # 5. 接口文档 #### 基础信息 - **Base URL**: `http://your-domain.com/api/` - **认证方式**: Basic Auth 或 Session Auth - **数据格式**: JSON #### 城市管理接口 (Cities) | 方法 | 路径 | 描述 | 示例请求体 | | :----- | :-------------- | :----------- | :--------------------------------- | | GET | `/cities/` | 列出所有城市 | - | | POST | `/cities/` | 创建新城市 | `{"name": "上海", "code": "SH"}` | | GET | `/cities/{id}/` | 获取城市详情 | - | | PUT | `/cities/{id}/` | 更新城市信息 | `{"name": "上海市", "code": "SH"}` | | DELETE | `/cities/{id}/` | 删除城市 | - | #### 机房管理接口 (DataCenters) | 方法 | 路径 | 描述 | 示例请求体 | | :----- | :------------------- | :----------- | :-------------------------------------------------- | | GET | `/datacenters/` | 列出所有机房 | - | | POST | `/datacenters/` | 创建新机房 | `{"name": "浦东机房", "city": 1, "address": "..."}` | | GET | `/datacenters/{id}/` | 获取机房详情 | - | | PUT | `/datacenters/{id}/` | 更新机房信息 | `{"name": "浦东数据中心", "address": "..."}` | | DELETE | `/datacenters/{id}/` | 删除机房 | - | #### 主机管理接口 (Hosts) | 方法 | 路径 | 描述 | 示例请求体 | | :----- | :----------------------------- | :------------- | :----------------------------------------------------------- | | GET | `/hosts/` | 列出所有主机 | - | | POST | `/hosts/` | 创建新主机 | `{"hostname": "web01", "ip_address": "1.1.1.1", "data_center": 1, "root_password": "pass"}` | | GET | `/hosts/{id}/` | 获取主机详情 | - | | PUT | `/hosts/{id}/` | 更新主机信息 | `{"hostname": "web01-new", "is_active": false}` | | DELETE | `/hosts/{id}/` | 删除主机 | - | | POST | `/hosts/{id}/change_password/` | 修改主机密码 | - | | GET | `/hosts/{id}/ping/` | 检测主机可达性 | - | #### 主机统计接口 (HostStats) | 方法 | 路径 | 描述 | 示例查询参数 | | :--- | :----------------- | :--------------- | :----------------- | | GET | `/hoststats/` | 列出统计记录 | `?date=2023-08-01` | | GET | `/hoststats/{id}/` | 获取单条统计详情 | - | ### 3. 接口使用示例 #### 创建主机 (POST /hosts/) ```bash curl -X POST \ http://localhost:8000/api/hosts/ \ -H 'Authorization: Basic dXNlcjpwYXNz' \ -H 'Content-Type: application/json' \ -d '{ "hostname": "db-server-01", "ip_address": "192.168.1.100", "data_center": 1, "root_password": "Init@1234" }' ``` #### 修改密码 (POST /hosts/1/change_password/) ```bash curl -X POST \ http://localhost:8000/api/hosts/1/change_password/ \ -H 'Authorization: Basic dXNlcjpwYXNz' ``` 响应示例: ```json { "new_password": "xK9#pL2!z8" } ``` #### 检测主机 (GET /hosts/1/ping/) ```bash curl -X GET \ http://localhost:8000/api/hosts/1/ping/ \ -H 'Authorization: Basic dXNlcjpwYXNz' ``` 响应示例: ```json { "task_id": "d6a8f8c0-2b4a-4b7d-9a3f-8c1b6e9d0a7f" } ``` #### 过滤查询 (GET /hosts/?is_active=true&data_center__name=浦东机房) ```bash curl -X GET \ 'http://localhost:8000/api/hosts/?is_active=true&data_center__name=%E6%B5%A6%E4%B8%9C%E6%9C%BA%E6%88%BF' \ -H 'Authorization: Basic dXNlcjpwYXNz' ``` ### 4. 高级功能 1. **分页**:所有列表接口支持 `?page=1&page_size=10` 参数 2. **搜索**:使用 `?search=关键词` 进行全局搜索(匹配配置的search_fields) 3. **过滤**:所有模型字段均可作为过滤条件(如 `?is_active=false`) 4. **排序**:使用 `?ordering=field_name` 或 `?ordering=-field_name` 降序 ### 5. 错误代码说明 | 状态码 | 含义 | 典型场景 | | :----- | :-------------------- | :------------- | | 200 | OK | 成功请求 | | 201 | Created | 创建成功 | | 400 | Bad Request | 请求参数错误 | | 401 | Unauthorized | 未认证 | | 403 | Forbidden | 权限不足 | | 404 | Not Found | 资源不存在 | | 500 | Internal Server Error | 服务器内部错误 | # 系统架构 ```text ┌─────────────────┐ ┌─────────────┐ ┌─────────────┐ │ Django管理后台 │ │ API接口 │ │ Celery │ │ │◄──►│ │◄──►│ 异步任务 │ └─────────────────┘ └─────────────┘ └─────────────┘ ▲ │ ┌───────┴───────┐ │ │ ┌─────▼─────┐ ┌─────▼─────┐ │ MySQL │ │ Redis │ │ 数据库 │ │ 消息队列 │ └───────────┘ └───────────┘ ``` ### 常见问题 # Q: 如何查看Celery任务状态? # Docker方式 ```bash docker-compose exec celery celery -A host_manager inspect active ``` # 手动方式 ```bash celery -A host_manager status ``` # Q: 如何修改时区设置? - 编辑 settings.py ```python TIME_ZONE = 'Asia/Shanghai' USE_TZ = True ``` # 禁用DEBUG模式 ```bash echo "DEBUG=False" >> .env ``` # 生成新密钥 ```bash echo "SECRET_KEY=$(python -c 'import secrets; print(secrets.token_urlsafe(50))')" >> .env ``` # HTTPS配置: ```bash nginx server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://web:8000; } } ```