本项目通过KVM虚拟化搭建Linux系统集群,使用 Ansible实现Linux集群下的批量部署与自动化管理,实现Web形式的自动化运维系统,集中批量控制服务器, 最终实现能支撑1000台实例的环境提供管理和自动化任务, 提高运维工程师的工作质量和效率。 项目基于HTTP实现自动化任务接受和响应接口设计,基于MySQL用作的关系型数据存取, 基于Redis的任务锁机制和消息队列, 基于MongoDB的事件日志记录, 最终实现邮件通知功能、敏感数据加密功能、日志事件记录功能。
(1)互联网快速发展
网站用户规模、使用快速上升
要求庞大系统支撑能力
更加快速的运维效率应对突发流量
更加自动化的方式减少人工投入成本
更加可靠的技术手段,保障系统的稳定
(2)云时代
腾讯云、阿里云、亚马逊云、青云等云厂商的市场份额不断增加
大部分技术架构设计不再以网络设计、IDC和系统硬件等方面作为重点
运维基础的、繁琐的工作逐步减少
小公司也不再需要一个运维工程师或者系统工程师
结论: 在这样的时代背景下, 大型互联网公司为了应对市场的快速变化,就需要运维自动化
创建Django项目CMDB
连接并配置远程服务器
[Tools] -> [Deployment]
具体操作如下:
新建一个django项目
查看django版本
配置本地目录和远程服务器目录的映射(Mapping)
上述操作完成, 本地文件修改, 远程服务器文件也同时修改
[root@docker CMDB]# virtualenv -p /usr/bin/python3 env
created virtual environment CPython3.6.8.final.0-64 in 384ms
creator 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'),
# }
# }
python manage.py runserver
远程用户登录配置
连接数据库
设置用户授权
[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 -pdevops
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| devopsProject |
+--------------------+
2 rows in set (0.00 sec)
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)
(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端口
开发环境、生产环境、测试环境都有自己的数据库,不能混为一谈,否则会对造成麻烦
实现devops工程之前, 使用Pycharm编辑器工具创建devops项目。
配置数据库
配置时区和语言
from .base import *
DEBUG = True
开发环境中DEBUG = True,因为我们呢需要通过报错解决问题
生产环境中一定不能开启DEBUG,因为使用者是用户或者黑客,一旦暴露报错,就给了黑客机会
from .base import *
#开发环境一定要关闭调试模式
DEBUG = False
#允许所有主机访问 ALLOWED_HOSTS = ['*']
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
为了方便在一个大的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',
]
(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]#