Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpsPilot - 运维管理平台

License Node.js Version

🚀 一个现代化的运维管理平台,集资产管理、工单管理、监控告警、作业编排于一体


✨ 特性

📦 资产管理

  • 物理服务器、云服务器、域名、SSL证书统一管理
  • 支持资产分类、状态、IP地址、管理信息等完整字段
  • 资产导入导出功能

📋 工单管理

  • 工单创建、流转、审批全流程
  • 支持多种工单类型(变更、故障、咨询等)
  • 工单状态跟踪与统计

📊 仪表盘

  • 资产统计图表
  • 证书到期预警
  • 工单状态分布

🔔 监控告警

  • Alertmanager Webhook 接收
  • 告警规则配置与管理
  • 告警收敛与去重
  • 告警→工单自动创建

📢 通知渠道

  • 飞书 Webhook 机器人
  • 邮件 SMTP 发送
  • Slack Incoming Webhook
  • 通知模板配置
  • 升级策略(超时未处理→升级)

🔄 作业编排

  • 批量主机选择执行
  • Shell 命令/脚本执行
  • SSH 远程执行
  • 脚本库管理
  • 执行历史记录

📈 其他功能

  • 容量管理
  • 变更日历
  • 故障复盘
  • 运维手册
  • 拓扑管理
  • SLA 配置

📋 目录


🚀 快速开始

1. 克隆项目

git clone https://github.com/yourusername/opspilot.git
cd opspilot

2. 安装依赖

npm install

3. 配置环境变量

# 复制环境变量模板
cp .env.example .env

# 编辑 .env 文件,设置必要的环境变量
# JWT_SECRET=your-secret-key-here
# ENCRYPTION_KEY=your-64-char-hex-encryption-key

4. 启动服务

# 开发环境
JWT_SECRET=your-secret-key node server/index.js

# 生产环境(使用 pm2)
pm2 start ecosystem.config.js

5. 访问应用

6. 默认账户

用户名: admin
密码: admin123

⚠️ 重要: 生产环境请立即修改默认密码!


📦 环境要求

最低要求

  • Node.js >= 18.0.0
  • 2GB 内存
  • 1GB 磁盘空间

推荐配置

  • Node.js >= 20.0.0
  • 4GB 内存
  • 10GB 磁盘空间
  • SSD 硬盘

支持的操作系统

  • Linux (Ubuntu, CentOS, Debian)
  • macOS
  • Windows (WSL2 推荐)

🛠️ 安装部署

方式一: 本地开发

# 克隆项目
git clone https://github.com/yourusername/opspilot.git
cd opspilot

# 安装依赖
npm install

# 配置环境变量
cp .env.example .env
# 编辑 .env 文件

# 启动服务
JWT_SECRET=your-secret-key node server/index.js

方式二: Docker 部署

# 构建镜像
docker build -t opspilot:latest .

# 运行容器
docker run -d \
  --name opspilot \
  -p 3000:3000 \
  -e JWT_SECRET=your-secret-key \
  -e ENCRYPTION_KEY=your-64-char-hex-encryption-key \
  -v opspilot-data:/app/data \
  opspilot:latest

方式三: PM2 生产部署

# 安装 PM2
npm install -g pm2

# 启动服务
pm2 start ecosystem.config.js

# 保存 PM2 配置
pm2 save
pm2 startup

# 查看状态
pm2 status
pm2 logs opspilot

⚙️ 配置说明

环境变量

变量名 必填 说明 默认值 示例
JWT_SECRET JWT 签名密钥 - your-secret-key-here
ENCRYPTION_KEY AES-256-GCM 加密密钥 (64位hex) - a1b2c3d4e5f6...
NODE_ENV 运行环境 development production
PORT 服务端口 3000 8080

生成加密密钥

# 生成 JWT 密钥
openssl rand -base64 32

# 生成 AES-256-GCM 密钥 (64位hex)
openssl rand -hex 32

配置文件

项目配置文件位于 config/ 目录:

  • business-config.json - 业务配置
  • swagger.json - API 文档配置

📚 API 文档

认证

所有受保护的 API 需要在请求头中携带 Token:

Authorization: Bearer <token>

主要 API 端点

认证 API

  • POST /api/auth/login - 用户登录
  • POST /api/auth/logout - 用户登出
  • POST /api/auth/refresh - 刷新 Token

资产 API

  • GET /api/assets - 资产列表
  • POST /api/assets - 创建资产
  • PUT /api/assets/:id - 更新资产
  • DELETE /api/assets/:id - 删除资产

工单 API

  • GET /api/workorders - 工单列表
  • POST /api/workorders - 创建工单
  • PUT /api/workorders/:id - 更新工单
  • DELETE /api/workorders/:id - 删除工单

作业编排 API

  • GET /api/jobs - 作业列表
  • POST /api/jobs - 创建作业
  • POST /api/jobs/run/:id - 执行作业
  • POST /api/jobs/ssh - SSH 远程执行
  • POST /api/jobs/batch-ssh - 批量 SSH 执行
  • GET /api/jobs/assets/hosts - 主机列表
  • GET /api/jobs/scripts - 脚本库列表
  • POST /api/jobs/scripts - 新增脚本

监控告警 API

  • GET /api/alerts - 告警列表
  • POST /api/alerts/webhook - Alertmanager Webhook
  • GET /api/alert-rules - 告警规则列表
  • POST /api/alert-rules - 创建告警规则

通知渠道 API

  • GET /api/channels - 渠道列表
  • POST /api/channels - 创建渠道
  • GET /api/templates - 模板列表
  • POST /api/templates - 创建模板

详细 API 文档请访问: http://localhost:3000/api-docs


📁 项目结构

ops-platform/
├── server/                    # 后端服务
│   ├── index.js              # 主入口文件
│   ├── routes/               # API 路由
│   │   ├── assets.js         # 资产管理
│   │   ├── workorder.js      # 工单管理
│   │   ├── jobs.js           # 作业编排
│   │   ├── alerts.js         # 监控告警
│   │   ├── notifications.js  # 通知渠道
│   │   └── ...               # 其他路由
│   ├── middleware/           # 中间件
│   ├── config/               # 配置文件
│   └── ops.db                # SQLite 数据库
├── html/                     # 前端页面
│   ├── index.html           # 主页面
│   ├── asset.html           # 资产管理
│   ├── workorder.html       # 工单管理
│   ├── job.html             # 作业编排
│   ├── alert.html           # 监控告警
│   └── ...                  # 其他页面
├── css/                      # 样式文件
├── js/                       # JavaScript 文件
├── config/                   # 配置文件
├── docs/                     # 文档
├── backup/                   # 备份文件
├── .env.example             # 环境变量模板
├── ecosystem.config.js      # PM2 配置
├── package.json             # 项目依赖
└── README.md                # 本文件

🔧 开发指南

开发环境搭建

# 1. 克隆项目
git clone https://github.com/yourusername/opspilot.git
cd opspilot

# 2. 安装依赖
npm install

# 3. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置 JWT_SECRET 和 ENCRYPTION_KEY

# 4. 启动服务
JWT_SECRET=your-secret-key node server/index.js

开发规范

代码规范

  • 使用 ESLint 进行代码检查
  • 遵循 JavaScript Standard Style
  • 文件命名使用小写+下划线

提交规范

feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具相关

分支规范

  • main - 主分支
  • develop - 开发分支
  • feature/* - 功能分支
  • hotfix/* - 紧急修复分支

数据库迁移

项目使用 sql.js (WebAssembly SQLite),数据库迁移通过 migrateDatabase 函数自动执行。

新增迁移示例:

runMigration('v11_add_new_table', `
  CREATE TABLE IF NOT EXISTS new_table (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL
  );
`);

添加新功能

  1. 后端 API

    • server/routes/ 创建新的路由文件
    • server/index.js 注册路由
    • 添加数据库表和迁移
  2. 前端页面

    • html/ 创建新的 HTML 文件
    • js/extracted/ 创建对应的 JavaScript 文件
    • 更新导航菜单
  3. 测试

    • 手动测试 API 端点
    • 测试前端交互
    • 验证数据库操作

🧪 测试

运行测试

# 运行所有测试
npm test

# 运行特定测试
npm test -- --testPathPattern=assets

# 运行测试并生成覆盖率报告
npm run test:coverage

手动测试

# 测试健康检查
curl http://localhost:3000/api/health

# 测试登录
curl -X POST http://localhost:3000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"admin123"}'

# 测试资产列表
curl http://localhost:3000/api/assets \
  -H "Authorization: Bearer <token>"

🚢 部署

生产环境部署

  1. 配置环境变量

    export JWT_SECRET=your-production-secret
    export ENCRYPTION_KEY=your-production-encryption-key
    export NODE_ENV=production
  2. 使用 PM2 部署

    npm install -g pm2
    pm2 start ecosystem.config.js
    pm2 save
    pm2 startup
  3. 配置反向代理 (Nginx)

    server {
        listen 80;
        server_name your-domain.com;
    
        location / {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
  4. 配置 SSL (Let's Encrypt)

    certbot --nginx -d your-domain.com

备份与恢复

# 备份数据库
cp server/ops.db backup/ops.db.$(date +%Y%m%d)

# 恢复数据库
cp backup/ops.db.YYYYMMDD server/ops.db

🐛 常见问题

Q: 服务启动失败,提示端口被占用

A: 修改端口或停止占用进程

# 查看占用端口的进程
lsof -i :3000

# 停止进程
kill -9 <PID>

# 或使用其他端口
PORT=8080 JWT_SECRET=your-secret-key node server/index.js

Q: 数据库连接失败

A: 检查数据库文件权限

chmod 644 server/ops.db

Q: 前端页面无法加载

A: 检查静态文件路径和权限

ls -la html/
ls -la css/
ls -la js/

Q: JWT 认证失败

A: 确保设置了正确的 JWT_SECRET 环境变量

export JWT_SECRET=your-secret-key

🤝 贡献指南

我们欢迎所有形式的贡献!

如何贡献

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'feat: Add AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 创建 Pull Request

提交规范

  • feat: - 新功能
  • fix: - 修复 bug
  • docs: - 文档更新
  • style: - 代码格式调整
  • refactor: - 重构
  • test: - 测试相关
  • chore: - 构建/工具相关

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件


🙏 致谢

  • Node.js - JavaScript 运行时
  • Express.js - Web 框架
  • sql.js - WebAssembly SQLite
  • ssh2 - SSH 客户端库

📞 联系方式


📝 更新日志

v2.0.0 (2026-04-29)

  • ✨ 新增作业编排功能
  • ✨ 新增监控告警对接
  • ✨ 新增通知渠道集成
  • 🔧 优化资产管理
  • 🔧 优化工单管理

v1.0.0 (2026-04-10)

  • ✨ 资产管理
  • ✨ 工单管理
  • ✨ 仪表盘

Made with ❤️ by OpsPilot Team

About

一个现代化的运维管理平台,集资产管理、工单管理、监控告警、作业编排于一体

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages