自动化运维-----项目实战: 基于Ansible的云平台自动化运维系统
文章目录自动化运维自动化运维新建一个django项目查看django版本连接远程服务器上传文件到服务器安装virtuaenv在服务器上见虚拟环境[root@docker CMDB]# virtualenv -p /usr/bin/python3 envcreated virtual environment CPython3.6.8.final.0-64 in 38...
文章目录
项目实战: 基于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 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'),
# }
# }
- 远程服务器解释器和目录映射的配置
- 在远程服务器上测试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 -pdevops
MariaDB [(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]#
更多推荐
所有评论(0)