# Op Manager **Repository Path**: KratosMax/OpManager ## Basic Information - **Project Name**: Op Manager - **Description**: 私人项目,作为毕设 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-12-16 - **Last Updated**: 2024-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Op Manager * [Op Manager](#op-manager) * [一、介绍](#%E4%B8%80%E4%BB%8B%E7%BB%8D) * [二、系统架构](#%E4%BA%8C%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84) * [前端:](#%E5%89%8D%E7%AB%AF) * [后端:](#%E5%90%8E%E7%AB%AF) * [环境:](#%E7%8E%AF%E5%A2%83) * [用户:](#%E7%94%A8%E6%88%B7) * [三、安装教程](#%E4%B8%89%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B) * [四、启动说明](#%E5%9B%9B%E5%90%AF%E5%8A%A8%E8%AF%B4%E6%98%8E) * [五、已实现/未实现功能](#%E4%BA%94%E5%B7%B2%E5%AE%9E%E7%8E%B0%E6%9C%AA%E5%AE%9E%E7%8E%B0%E5%8A%9F%E8%83%BD) * [六、踩坑填坑](#%E5%85%AD%E8%B8%A9%E5%9D%91%E5%A1%AB%E5%9D%91) * [Nginx](#nginx) * [七、后续优化](#%E4%B8%83%E5%90%8E%E7%BB%AD%E4%BC%98%E5%8C%96) * [静态资源分离](#%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90%E5%88%86%E7%A6%BB) * [Monit功能的完善](#monit%E5%8A%9F%E8%83%BD%E7%9A%84%E5%AE%8C%E5%96%84) * [Zabbix功能的接入](#zabbix%E5%8A%9F%E8%83%BD%E7%9A%84%E6%8E%A5%E5%85%A5) * [Ansible的接入](#ansible%E7%9A%84%E6%8E%A5%E5%85%A5) * [X、个人总结](#x%E4%B8%AA%E4%BA%BA%E6%80%BB%E7%BB%93) ### 一、介绍 作为小火车的毕业设计,在设想中,这是一个基于Ansible、Zabbix、Monit等常用运维工具进行一体化、自动化的运维系统,前端使用bootstrap的前端框架,由于不想重复造轮子,这里使用一个大佬的前端主题来进行开发:[dunwoo的GitHub](https://github.com/dwosc/dunwoo-admin) 演示地址: [dunwoo的项目](https://dunwoo.com/projects/dunwoo-admin/index.html) ### 二、系统架构 #### 前端: BootStrap 4 BootStrap 4 开源后台管理主题: [dunwoo 的 GitHub](https://github.com/dwosc/dunwoo-admin) #### 后端: Django 3.0 #### 环境: Centos 7(或6) Python 3.6 可能需要将/usr/local/python3/lib/python3.6/site-packages/django/db/backends/mysql/base.py这个文件修改: version = Database.version_info if version < (1, 3, 13) pass #去掉版本校验 Zabbix 4+ (我是4.2.6) Nginx 1.17.3 (非必需) #### 用户: 尽量用root,其他的肯定会遇到很多问题,请自行修改代码逻辑 ### 三、安装教程 1. 拉取这个项目(这不是废话吗) 2. pip安装OpDev.txt里面所有的模块(如果你的pip是python2的那就用pip3安装) 3. 安装mysql 4. 导入opmanager.sql到库里 5. 在mysql里面设置好mysql的参数,使其能正常连上数据库 6. 在数据库中的setting库中配置好zabbix_api的网址,例如我的是http://zabbix.hhhhh.xyz ### 四、启动说明 1. 在mysql库里面的user表里设置好你的账号密码 2. 在OpManager/OpManager/settings.py中配置好允许访问的域名/ip,例如配置了192.168.3.1就可以通过192.168.3.1来访问,其他的一律不可以 3. 在根目录下执行: python3 manage.py runserver 192.168.3.1:10086 192.168.3.1为对外IP,0.0.0.0为自动获取已存在的IP,10086为对外端口 4. 通过IP:端口访问,例如http://192.168.3.1:10086 ### 五、已实现/未实现功能 - [x] 前端(总体) - [x] 基础html模板 ![首页](Screenshot/JPG/index.jpg "首页") - [x] 登录模板 ![登录](Screenshot/JPG/login.jpg "登录") - [x] 资产管理 - [x] 添加主机 ![添加主机](Screenshot/JPG/addhost.jpg "添加主机") - [x] 资产列表 ![资产列表](Screenshot/JPG/hostmanager.jpg "资产列表") - [x] 资产更新日志 ![资产更新日志](Screenshot/JPG/hostlogs.jpg "资产更新日志") - [x] 主机管理 - [x] 主机设置 ![主机设置](Screenshot/JPG/hostsetting.jpg "主机设置") - [x] 部署应用 ![部署应用](Screenshot/JPG/addapp.jpg "部署应用") - [x] 配置管理 ![配置管理](Screenshot/JPG/config.jpg "配置管理") - [x] 应用操作 - [x] 远程控制 ![远程控制](Screenshot/JPG/Webssh.jpg "远程控制") - [x] MySQL ![mysql](Screenshot/JPG/mysql.jpg "mysql") - [x] 定时调度 ![定时调度](Screenshot/JPG/crontab.jpg "定时调度") - [x] 防火墙 ![防火墙](Screenshot/JPG/firewall.jpg "防火墙") - [x] 应用监控 - [x] 系统监控 ![系统监控](Screenshot/JPG/monitor_linux.jpg "系统监控") ![系统监控](Screenshot/JPG/monitor_linux2.jpg "系统监控") - [x] monit ![monit](Screenshot/JPG/monitor_monit.jpg "monit") - [x] 日志统计 - [x] 系统日志 ![系统日志](Screenshot/JPG/logs_system.jpg "系统日志") - [x] 用户日志 ![用户日志](Screenshot/JPG/logs_user.jpg "用户日志") - [x] 安装日志 ![安装日志](Screenshot/JPG/logs_install.jpg "安装日志") - [x] 用户管理 - [x] 用户管理(权限、用户组) ![用户管理](Screenshot/JPG/user_manager.jpg "用户管理") - [x] 用户组管理(权限、用户组) ![用户管理](Screenshot/JPG/users_manager.jpg "用户组管理") - [x] 用户设置(密码、备注) ![用户设置](Screenshot/JPG/user_manager.jpg "用户设置") - [x] 域名管理 - [x] 域名列表 ![域名列表](Screenshot/JPG/domains.jpg "域名列表") - [x] 主机记录 ![主机记录](Screenshot/JPG/domains_host.jpg "主机记录") ### 六、踩坑填坑 #### Nginx 踩坑: 使用Nginx代理到django的后端时,会导致websocket连不上 填坑: Nginx配置为: server { listen 80; server_name 域名; access_log logs/op.access.log main; location / { proxy_pass http://192.168.3.1:10086; proxy_http_version 1.1; # 下面两个proxy用来将http升级为websocket proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } ### 七、后续优化 #### 静态资源分离 - [x] 使用Nginx代理静态资源 * 具体的实现为: * 在原有的基础上,用Nginx拦截js、css、png、jpg等静态文件的后缀,让Nginx去调用 * 这样就能保证在有Nginx的时候有静态分离,没有也可以使用 location /assets/ { # 缓存24小时 expires 24h; # 小于1M的文件直接放在内存中 sendfile on; sendfile_max_chunk 1m; # 开启Gzip gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png; gzip_disable "MSIE [1-6]\."; # 注意root在assets的上一层 root /data/Django/OpManager; } #### Monit功能的完善 - [ ] 增删改查的完善 #### Zabbix功能的接入 - [ ] 图形接入 #### Ansible的接入 - [ ] 编辑和发送剧本 ### X、个人总结 Op Manager 是我的个人项目,大佬们不会对我的项目感兴趣的,所以我也不需要担心,如果有初学者想练手,可以拿来做参考,但是我坚决反对使用我的项目进行获取利益,人情利益、金钱利益等一切都不可以,也不可以拿来当作业或当任务等提交,对于上述说明我可能描述的不够清楚,**总而言之,只允许用于非商业性学习**。