文章目录

  • 项目实战: 基于Ansible的云平台自动化运维系统
    • 一、项目介绍
      • 1.项目介绍
      • 2.项目背景
    • 二、项目环境搭建
      • 1.项目目录的配置
      • 2.远程服务器虚拟环境的配置
      • 3.MySQL数据库配置
      • 4.django数据库配置
        • 问题:
    • 三、DevOPS工程
      • 1.Django工程多配置文件
      • 2.Django工程应用与模块加载
      • 3.连接远程虚拟环境
        • 问题
      • 生成公钥

项目实战: 基于Ansible的云平台自动化运维系统

一、项目介绍

1.项目介绍

本项目通过KVM虚拟化搭建Linux系统集群,使用 Ansible实现Linux集群下的批量部署与自动化管理,实现Web形式的自动化运维系统,集中批量控制服务器, 最终实现能支撑1000台实例的环境提供管理和自动化任务, 提高运维工程师的工作质量和效率。 项目基于HTTP实现自动化任务接受和响应接口设计,基于MySQL用作的关系型数据存取, 基于Redis的任务锁机制和消息队列, 基于MongoDB的事件日志记录, 最终实现邮件通知功能、敏感数据加密功能、日志事件记录功能。

2.项目背景

(1)互联网快速发展
网站用户规模、使用快速上升
要求庞大系统支撑能力
更加快速的运维效率应对突发流量
更加自动化的方式减少人工投入成本
更加可靠的技术手段,保障系统的稳定
(2)云时代
腾讯云、阿里云、亚马逊云、青云等云厂商的市场份额不断增加
大部分技术架构设计不再以网络设计、IDC和系统硬件等方面作为重点
运维基础的、繁琐的工作逐步减少
小公司也不再需要一个运维工程师或者系统工程师

结论: 在这样的时代背景下, 大型互联网公司为了应对市场的快速变化,就需要运维自动化

二、项目环境搭建

1.项目目录的配置

创建Django项目CMDB
连接并配置远程服务器
[Tools] -> [Deployment]

具体操作如下:
新建一个django项目


查看django版本

配置本地目录和远程服务器目录的映射(Mapping)


上述操作完成, 本地文件修改, 远程服务器文件也同时修改

2.远程服务器虚拟环境的配置

连接远程服务器


上传文件到服务器

  • 创建虚拟环境并激活虚拟环境
    安装virtuaenv
    在服务器上建虚拟环境
[root@docker CMDB]# virtualenv -p /usr/bin/python3 env
created virtual environment CPython3.6.8.final.0-64 in 384mscreator CPython3Posix(dest=/data/www/CMDB/env, clear=False, global=False)seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1)activators PythonActivator,FishActivator,XonshActivator,CShellActivator,PowerShellActivator,BashActivator
[root@docker CMDB]#
[root@docker CMDB]# ls
CMDB  env  manage.py
[root@docker CMDB]# source env/bin/activate
(env) [root@docker CMDB]# pip install django==2.2 -i https://pypi.douban.com/simple
  • 出现的报错及处理方式
# sqlite版本问题 django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

解决方式: 不使用sqlite存储数据, 使用mysql
屏蔽数据库设置

# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases# DATABASES = {#     'default': {#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }
  • 远程服务器解释器和目录映射的配置
  • 在远程服务器上测试Django项目是否可以成功运行
python manage.py runserver

3.MySQL数据库配置

远程用户登录配置
连接数据库
设置用户授权

[root@docker CMDB]# systemctl start mariadb
[root@docker CMDB]# systemctl enable mariadb[root@docker CMDB]# mysql -uroot -pdaliu#创建数据库
MariaDB [(none)]> create database if not exists devopsProject default charset utf8;
Query OK, 1 row affected (0.00 sec)#新建用户
MariaDB [(none)]> create user devops@'%' identified by 'devops';
Query OK, 0 rows affected (0.00 sec)# 用户授权
MariaDB [(none)]>  grant all on devopsProject.* to devops@'%';
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> Bye
  • 测试试用户授权是否成功
(env) [root@docker CMDB]# mysql -udevops -pdevopsMariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| devopsProject      |
+--------------------+
2 rows in set (0.00 sec)

4.django数据库配置

  • 修改配置文件的信息
ALLOWED_HOSTS = ['*']
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'devopsProject','USER': 'devops','PASSWORD': 'devops','HOST': '39.101.175.120','PORT': '3306',}
}
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

问题:

登陆root 设置了mysql数据库用户 用-hIP登陆不上,
原因:阿里云安全组吧3306端口加入

一定要上传代码到云服务器

2.runserver时
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
解决方法: pip安装mysqlclient(若安装包失败,是因为缺少开发包的原因, yum安装mariadb-devel和python-devel)

3.编码问题

  • 生成数据库表
(env) [root@docker CMDB]# python manage.py makemigrations # 生成迁移脚本
(env) [root@docker CMDB]# python manage.py migrate # 写入数据库, 创建关于用户和用户组等数据表信息
(env) [root@docker CMDB]# python manage.py createsuperuser # 创建超级用户
# 启动项目, 访问网址http://IP:8000/admin
(env) [root@docker CMDB]# python manage.py runserver 0.0.0.0:8000
  • 测试


这里如果访问39.101.175.120:8000无法访问的话
可能原因:
1.在代码setting中没有允许此IP访问
ALLOWED_HOSTS = [’*’]
2.阿里云安全组规则没有加入8000端口

  • 测试数据表是否创建?数据信息是否写入?
    连接mariadb数据库

    配置数据库信息

    访问数据库表和数据内容

    数据库表配置结束

三、DevOPS工程

开发环境、生产环境、测试环境都有自己的数据库,不能混为一谈,否则会对造成麻烦
实现devops工程之前, 使用Pycharm编辑器工具创建devops项目。

1.Django工程多配置文件

  • base.py文件: 基本的配置文件,将原先seetings.py文件的内容拷贝进来.(参考第一个devops项目)
配置数据库
配置时区和语言
  • development.py文件: 开发环境的配置文件
from .base import *
DEBUG = True

开发环境中DEBUG = True,因为我们呢需要通过报错解决问题
生产环境中一定不能开启DEBUG,因为使用者是用户或者黑客,一旦暴露报错,就给了黑客机会

  • production.py文件: 生产环境的配置文件
from .base import *
#开发环境一定要关闭调试模式
DEBUG = False
#允许所有主机访问 ALLOWED_HOSTS = ['*']
  • 修改manage.py文件, 默认寻找的设置文件是当前项目中的settings文件, 如果是开发环境, 修改如下:
def main():os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'CMDB.settings.develop')#。。。。。。
if __name__ == '__main__':main()

如果项目将来需要上线, 修改启动项目访问的配置文件为生产环境的配置文件即可, 如下:

def main():os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'CMDB.settings.product')#。。。。。。
if __name__ == '__main__':main()
  • 启动项目
 python manage.py runserver

2.Django工程应用与模块加载

为了方便在一个大的Django项目中,管理实现不同的业务功能, 我们会在项目中创建多个APP实现功
能。为了更加方便管理APP, 项目结构更加清晰。可以专门创建apps目录存储项目应用, 专门创建extra_apps存储项目第三方APP, 项目结构如下所示:

但项目运行时, 不会自动寻找apps和extra_apps子目录中创建的APP, 需要手动在配置文件中配置,
修改devops/settings/base.py文件, 添加内容如下:

创建应用

(env) [root@docker apps]# python ../manage.py startapp scanhost
(env) [root@docker apps]# ls
__init__.py  scanhost

在服务器端建的,本地并没有,下载到本地

修改配置文件,手动添加应用

INSTALLED_APPS = ['apps.scanhost',
]

3.连接远程虚拟环境


问题


解决:Alt+Enter自行intall

生成公钥

(env) [root@docker ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match.  Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:kVqcZ6BrU58q4dY9Z/6uYa+81Sl4m0fLSEXU+i8PpSg root@docker
The key's randomart image is:
+---[RSA 2048]----+
|        .     ...|
|       o +     ..|
|      . B o   .. |
|       = = .  .. |
|      * S o   ...|
|     o + o  .o =o|
|      + o E.BoB.+|
|     . .   O.===.|
|            *O=o.|
+----[SHA256]-----+
(env) [root@docker ~]# 
(env) [root@docker ~]# cd /root/.ssh/
(env) [root@docker .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub daliu@localhost:/mnt/
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: ERROR: ssh: Could not resolve hostname localhost:/mnt/: Name or service not known(env) [root@docker .ssh]# ssh-copy-id -i id_rsa.pub daliu@localhost
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_rsa.pub"
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:qk1sSJr+ZyQU7Otnr6tLY5rX+80DGPIzKByFwYv/Mq8.
ECDSA key fingerprint is MD5:7e:de:36:5e:3a:f4:93:50:55:d0:64:60:d1:37:e7:e9.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
daliu@localhost's password:
Permission denied, please try again.
daliu@localhost's password:
Permission denied, please try again.
daliu@localhost's password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
(env) [root@docker .ssh]# 

自动化运维-----项目实战: 基于Ansible的云平台自动化运维系统相关推荐

  1. Python+Django+Ansible Playbook自动化运维项目实战(二)

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  2. Python+Django+Ansible Playbook自动化运维项目实战:资产管理

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  3. Python自动化开发基础 项目实战-监控系统 Day16-李杰-专题视频课程

    Python自动化开发基础 项目实战-监控系统 Day16-14487人已学习 课程介绍         课程特色:实战,细致,生动,深入浅出 适用人群:适合Python初学者 课程详情:从0基础开始 ...

  4. 项目实战——基于计算机视觉的物体位姿定位及机械臂抓取(单目标定)

    项目实战--基于计算机视觉的物体位姿定位及机械臂抓取(单目标定) 请各位读者朋友注意,这里面很多东西涉及到我的毕设,写作辛苦,请勿滥用,转载请务必注明出处!         单目标定主要分为两个部分, ...

  5. 嵌入式项目实战——基于QT的视频监控系统设计(二)

    嵌入式项目实战--基于QT的视频监控系统设计(二) 昨天我分享了关于QT的基本使用方法,掌握了这些基本的方法就可以设计一个简单的视频监控界面.下面我们开始分享完成这个嵌入式项目同样重要的知识点--UD ...

  6. 嵌入式项目实战——基于QT的视频监控系统设计(三)

    嵌入式项目实战--基于QT的视频监控系统设计(三) 进入到五一假期第三天,继续我们的项目.本来五一假期还是想好好休息一下的,因为最近学习的状态不太好,刷题都没有思路了,但是身边的同学太卷了,不过我还是 ...

  7. 嵌入式项目实战——基于QT的视频监控系统设计(四)

    嵌入式项目实战--基于QT的视频监控系统设计(四) 进入到五一假期的第四天,通过前三天的分享,相信你应该已经掌握了QT的基本使用.UDP网络编程.v4l2视频处理模块.多线程编程等基本的知识点.其实昨 ...

  8. 嵌入式项目实战——基于QT的视频监控系统设计(一)

    嵌入式项目实战--基于QT的视频监控系统设计(一) 这个五一因为疫情,只能待在家里,想了想不如将我之前做的一个小的嵌入式的练习项目分享出来,供入门嵌入式的同学们学习.基于QT的视频监控系统设计虽然是个 ...

  9. Arduino项目实战——基于Arduino【智能垃圾桶】设计

       Arduino项目实战        -基于Arduino[智能垃圾桶]设计 第一次接触Arduino是在大一的时候,距离现在已经五年,当时一个简单的"电子琴"项目就让我抓耳 ...

最新文章

  1. 比尔·盖茨彻底告别微软,慈善领域「再就业」发挥余热
  2. MySQL基础篇:事务管理
  3. 社区发现算法 - Fast Unfolding(Louvian)算法初探
  4. EP39 全局静态ApplicationContext的问题
  5. IEC61850电能质量1~50次谐波有效值建模
  6. vs.net2003在代理下的一个奇怪小问题
  7. Keras】基于SegNet和U-Net的遥感图像语义分割
  8. java mysql读取多条数据_myeclipse 使用Java访问mysql数据库,数据库中有多条记录,为何只能读出一条数据??...
  9. 加装的硬盘进入后点不了文件夹_【装机帮扶站】第638期:空间不够,那就加加加!机械硬盘推荐~...
  10. 比赛正式开始的openeim001
  11. 如何将Oracle中同一列的多行记录拼接成一个字符串 十一__262 | 浏览 8183 次 推荐于2016-01-25 17:34:18 最佳答案 需要用wm_concat函数来实现。
  12. W-Cms XSS和遍历目录漏洞
  13. matlab导入arcgis中国边界图,【干货】ArcGIS提取影像边界的几种方法
  14. RubyOnRails环境搭建
  15. Java Web三大组件
  16. 带着孩子学数学--经验总结1:乘法怎么教,小学数学阶段等等
  17. java入门学习教程,详细说明
  18. java 播放swf_java文档在线播放实现
  19. elasticsearch6.6文档翻译-查询语句-查询上下文和过滤上下文
  20. 《我和PIC单片机:基于PIC18》——第1章 初识PIC 1.1 与众不同的PIC

热门文章

  1. 452页24万字智慧城市顶层设计及智慧应用解决方案
  2. 河南工程学院第五届ACM大学生程序设计竞赛(部分题解)
  3. APP端接入支付宝支付接口
  4. 洛谷 P2181对角线——排列组合
  5. 【杰理AC632n】
  6. python大数据作业-客户价值分析-实训头歌
  7. Spring Aop 获取入参和出参
  8. 产业洞察:4成云计算企业落地北京,资本加持之下形成良好应用生态
  9. CSS预处理之less,sass
  10. 二 、C语言程序的基本语句和基本结构