CentOS7 部署itops

开源地址: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,点击登录:

image-20240921225727736

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

image-20240921225831625

在【MySQL数据库配置】栏中,填写以下内容:

  • 【数据库地址】:127.0.0.1(本机);
  • 【数据库名称】:itops
  • 【账号】:root
  • 【密码】:testtest
  • 【端口】:3306

填写完成后,点击下方的【提交】进行验证:

image-20240925141733637

验证成功后,会显示出其他配置信息栏,在【LDAP配置】栏中,填写以下内容:

  • 【AD服务器地址】;
  • 【域名】;
  • 【账号】;
  • 【密码】;
  • 【默认查找起始】;
  • 【是否开启加密连接】;

填写完成后,点击下方的【提交】进行验证,验证成功后,先点击最下方的【重载配置】:

image-20240921234252769

重载后等待1分钟,然后重新登录系统,在【账号权限配置】栏中,填写所有组为AD域中的用户组,然后点击【提交】,验证成功后点击【返回使用】。

八、使用AD域用户登录

前面配置完itops后,可直接使用AD域用户进行登录,登录成功后的首页如下:

image-20240921235251470

九、使用itops

1.取消页脚显示

编辑 /usr/local/itops/templates/ad 目录下的 admanager.html 静态文件,注释掉以下内容:

vim /usr/local/itops/templates/ad/admanager.html

# 找到以下内容
    <footer class="footer">
        <span>IT &copy; 2019</span>
    </footer>

# 注释掉该内容
    <!--footer class="footer">
        <span>IT &copy; 2019</span>
    </footer-->

同样注释掉该内容的静态文件还有 /usr/local/itops/templates/admanager 目录下的 creatusermail.htmlcreatusers.htmlmodifypasswd.htmlmodifyuserattributes.htmlmovecomputer.htmlmoveuser.html 静态文件,以及 /usr/local/itops/templates/api 目录下的 apinames.htmlapipermissions.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 &copy; 2019</span>#}
    {
   
    
    #        </footer>#}
    <!--end footer-->

# 注释掉该内容
    <!--Start footer>
    {
   
    
    #        <footer class="footer">#}
    {
   
    
    #            <span>IT &copy; 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(