开源地址:https://github.com/openitsystem/itops
一、itops介绍
ITOps(IT Operations)指的是信息技术操作的管理和优化,涉及到IT基础设施的运行、监控和维护。ITOps的主要目标是确保IT服务的可靠性和可用性,包括服务器、网络、存储和应用程序的管理。
基于Python + Django的AD管理系统,系统主要提供以下功能:
- 丰富的API接口,便于内部系统的集成;
- 在线邮件流查询;
- 常规AD、Exchange操作的WEB化,更友好的交互体验;
- 2FA认证登陆,角色权限分层。增强系统安全性的同时,提升HelpDesk同学解决问题的效率;
- 丰富的报表功能和批量操作功能;
- 详细的日志功能。
二、准备工作
- 操作系统:
CentOS 7.9
- Python:
3.5.x
- MySQL:
5.7.x
三、系统环境配置
1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2.关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
四、安装依赖
1.安装Python
这里安装的版本为 3.5.2
,可参考我博客中《CentOS7 源码安装Python3》文档 ,版本虽然不同,但安装过程一样。
2.安装MySQL
这里安装的版本为 5.7.32
,可参考我博客中《CentOS7 RPM部署MySQL 5.7.32》文档。
2.1 修改my.cnf配置文件
编辑 /etc/my.cnf
配置文件,添加以下参数:
cat >> /etc/my.cnf <<'EOF'
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
validate_password_policy = 0
validate_password_length = 4
EOF
解释说明:
ONLY_FULL_GROUP_BY
:强制使用GROUP BY
时必须保证SELECT
语句中的所有列都被包含在GROUP BY
子句中,或者它们是聚合函数的参数。如果不符合这一条件,查询会报错。该模式确保结果是确定的,不会因为未定义的列导致不一致的查询结果。STRICT_TRANS_TABLES
:在严格模式下,MySQL 会对数据插入进行更严格的检查。如果插入的数据超出了列的范围或者是不合法的值,MySQL 会报错,而不是自动修改数据或截断。这一设置主要用于确保数据的完整性。ERROR_FOR_DIVISION_BY_ZERO
:发生除以零的操作时,MySQL 会报错。如果没有启用这个模式,MySQL 可能会返回NULL
而不会报错。启用此模式有助于避免不期望的计算结果。NO_AUTO_CREATE_USER
:防止在授予权限时自动创建不存在的用户。在 MySQL 旧版本中,如果你执行GRANT
语句给一个不存在的用户,MySQL 会自动创建该用户并赋予权限。启用这个模式可以避免这种情况,确保用户必须手动创建。NO_ENGINE_SUBSTITUTION
:当 MySQL 不支持指定的存储引擎时,启用此模式会让 MySQL 报错,而不是自动切换到默认存储引擎(通常是 InnoDB)。这有助于确保数据库的行为符合预期,避免使用不合适的存储引擎。
2.2 重启MySQL服务
修改配置后,需重启服务生效:
systemctl restart mysqld
2.3 创建itops数据库
登录 MySQL 数据库:
mysql -uroot -ptesttest
创建itops数据库:
create database itops;
flush privileges;
五、安装itops
1.克隆itops源码仓库
cd /usr/local/
git clone https://github.com/openitsystem/itops.git
2.创建虚拟环境
进入克隆后的 itops
目录,创建 Python 虚拟环境:
cd /usr/local/itops
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
3.安装Python依赖项
更新前可以先配置 pip.conf
文件,修改使用国内镜像源:
mkdir -p /root/.pip # 如果没有该目录则创建
cat > /root/.pip/pip.conf <<'EOF'
[global]
timeout = 10
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url = https://pypi.tuna.tsinghua.edu.cn/simple/
trusted-host = mirrors.aliyun.com
pypi.tuna.tsinghua.edu.cn
[install]
trusted-host=
mirrors.aliyun.com
pypi.tuna.tsinghua.edu.cn
EOF
安装 itops 所需的 Python 依赖项:
pip install -r requirements.txt # -r 选项告诉 pip 从指定的文件中读取要安装的依赖项
安装后可以使用 pip list
命令检查所安装的包。
4.设置itops目录权限
设置 itops 安装目录赋予权限为 777
:
chmod -R 777 /usr/local/itops
5.启动uwsgi服务(可选)
执行以下命令,启动平台uwsgi服务:
/usr/local/itops/venv/bin/uwsgi \
--http-socket 10.22.51.49:8080 \
--chdir /usr/local/itops/ \
--plugin python \
--wsgi-file /usr/local/itops/itops/wsgi.py \
--master \
--static-map /static=/usr/local/itops/static/ \
--static-map /static=/usr/local/itops/frontend/dist/static/ \
--static-map /static=/usr/local/itops/venv/lib/python3.5/site-packages/rest_framework/static/ \
--processes 4 --threads 4 \
--uid=99 --gid=99 \
--static-gzip-dir=/usr/local/itops/frontend/ \
--daemonize /usr/local/itops/out.log
解释说明:
--http-socket 10.22.51.49:8080
:监听 IP 地址为10.22.51.49
的 8080 端口。--chdir /usr/local/itops/
:设置工作目录为/usr/local/itops/
。--plugin python
:加载 Python 插件。--wsgi-file /usr/local/itops/itops/wsgi.py
:指定 WSGI 应用的入口文件。--master
:启用主进程管理。--static-map
:映射静态文件目录,这里定义了多个静态文件映射。--processes 4 --threads 4
:启动 4 个进程,每个进程有 4 个线程。--uid=99 --gid=99
:以特定的用户和组 ID 启动进程(通常用于安全性),这里指nobody
。--static-gzip-dir=/usr/local/itops/frontend/
:指定用于 Gzip 静态文件的目录。--daemonize /usr/local/itops/out.log
:把uwsgi
的输出重定向到/usr/local/itops/out.log
文件,且放在后台运行。
六、配置脚本启动和关闭uwsgi服务
这里可以通过配置脚本来启动和关闭uwsgi服务。
1.配置脚本启动服务
在 /usr/local/itops
目录下创建一个名为 start.sh
的启动服务脚本文件,并添加以下内容:
cat > /usr/local/itops/start.sh <<'EOF'
#!/bin/bash
#
SERVER_NAME='itops'
PID=$(pgrep -f $SERVER_NAME)
if [ -z "$PID" ]; then
/usr/local/itops/venv/bin/uwsgi \
--http-socket 10.22.51.49:8080 \
--chdir /usr/local/itops/ \
--plugin python \
--wsgi-file /usr/local/itops/itops/wsgi.py \
--master \
--static-map /static=/usr/local/itops/static/ \
--static-map /static=/usr/local/itops/frontend/dist/static/ \
--static-map /static=/usr/local/itops/venv/lib/python3.5/site-packages/rest_framework/static/ \
--processes 4 --threads 4 \
--uid=99 --gid=99 \
--static-gzip-dir=/usr/local/itops/frontend/ \
>> /usr/local/itops/out.log 2>&1 &
echo "$SERVER_NAME start success..."
else
echo "$SERVER_NAME is running..."
fi
EOF
2.配置脚本关闭服务
在 /usr/local/itops
目录下创建一个名为 stop.sh
的启动服务脚本文件,并添加以下内容:
cat > /usr/local/itops/stop.sh <<'EOF'
#!/bin/bash
#
SERVER_NAME='itops'
PID=$(pgrep -f $SERVER_NAME)
if [ -n "$PID" ]; then
pgrep -f $SERVER_NAME |xargs kill -9
echo "$SERVER_NAME stop success"
else
echo "$SERVER_NAME is not running..."
exit 0
fi
EOF
3.设置脚本权限
chmod +x /usr/local/itops/start.sh
chmod +x /usr/local/itops/stop.sh
4.启动和关闭uwsgi服务
sh start.sh # 启动 uwsgi 服务
sh stop.sh # 关闭 uwsgi 服务
七、访问并配置itops
浏览器访问 AD管理平台地址 http://<IP>:8080
,默认管理员账户为 adminportal
,密码为 tcQW*963@2019
,点击登录:

登录后,点击左上方【修改初始密码】,输入平台管理员的旧密码和新密码进行修改:

在【MySQL数据库配置】栏中,填写以下内容:
- 【数据库地址】:
127.0.0.1
(本机); - 【数据库名称】:
itops
; - 【账号】:
root
; - 【密码】:
testtest
; - 【端口】:
3306
;
填写完成后,点击下方的【提交】进行验证:

验证成功后,会显示出其他配置信息栏,在【LDAP配置】栏中,填写以下内容:
- 【AD服务器地址】;
- 【域名】;
- 【账号】;
- 【密码】;
- 【默认查找起始】;
- 【是否开启加密连接】;
填写完成后,点击下方的【提交】进行验证,验证成功后,先点击最下方的【重载配置】:

重载后等待1分钟,然后重新登录系统,在【账号权限配置】栏中,填写所有组为AD域中的用户组,然后点击【提交】,验证成功后点击【返回使用】。
八、使用AD域用户登录
前面配置完itops后,可直接使用AD域用户进行登录,登录成功后的首页如下:
九、使用itops
1.取消页脚显示
编辑 /usr/local/itops/templates/ad
目录下的 admanager.html
静态文件,注释掉以下内容:
vim /usr/local/itops/templates/ad/admanager.html
# 找到以下内容
<footer class="footer">
<span>IT © 2019</span>
</footer>
# 注释掉该内容
<!--footer class="footer">
<span>IT © 2019</span>
</footer-->
同样注释掉该内容的静态文件还有 /usr/local/itops/templates/admanager
目录下的 creatusermail.html
、creatusers.html
、modifypasswd.html
、modifyuserattributes.html
、movecomputer.html
、moveuser.html
静态文件,以及 /usr/local/itops/templates/api
目录下的 apinames.html
、apipermissions.html
静态文件,以及 /usr/local/itops/templates/log
目录下的 serchlog.html
静态文件。
编辑 /usr/local/itops/templates/ad
目录下的 directorytree.html
静态文件,注释掉以下内容:
vim /usr/local/itops/templates/ad/directorytree.html
# 找到以下内容
<!--Start footer-->
{
# <footer class="footer">#}
{
# <span>IT © 2019</span>#}
{
# </footer>#}
<!--end footer-->
# 注释掉该内容
<!--Start footer>
{
# <footer class="footer">#}
{
# <span>IT © 2019</span>#}
{
# </footer>#}-->
<!--end footer-->
无需重启服务,直接重新访问平台即可。
2.修改登录页面标题
编辑 /usr/local/itops/templates
目录下的 login.html
,修改以下内容:
vim /usr/local/itops/templates/login.html
# 找到以下内容
<title>IT运维平台</title>
<h3>欢迎使用 IT运维平台</h3>
# 修改为以下内容
<title>AD运维平台</title>
<h3>欢迎使用 AD运维平台</h3>
3.修改网站标题
编辑 /usr/local/itops/frontend/dist
目录下的 bigindex.html
,修改以下内容:
vim /usr/local/itops/frontend/dist/bigindex.html
# 找到以下内容
<title>首页</title>
# 修改为以下内容
<title>AD运维管理平台</title>
4.配置自动显示姓名脚本
在上面修改新建用户栏模板中,配置一个输入【姓】和【名】后,【姓名】会自动由【姓】和【名】组成并显示的脚本。
编辑 /usr/local/itops/templates/ad
目录下的 directorytree.html
静态文件,在结尾添加 <script>
脚本标签内容:
vim /usr/local/itops/templates/ad/directorytree.html
# 添加脚本标签内容
<script>
$(document).ready(function(){
$("#add_user_sn").keyup(