zoukankan      html  css  js  c++  java
  • Linux(四)—— 项目部署与ansible自动化部署

    项目部署与ansible自动化部署

    一、项目部署

    # 1.将项目的压缩包拖入xshell
    
    # 2.从数据库中导出sql文件,拖入xshell
    
    # 3.启动数据库服务,进入mysql数据库
    
    # 4.在Linux中建立数据库
    mysql> create database bbs charset utf8mb4;    # Linux中大小写不区分,名字尽量少大写、数字开头
    
    # 5.将sql文件导入Linux的mysql数据库中
    mysql> use bbs
    mysql> source /opt/bbs.sql
    
    # 6.解压Django项目文件
    unzip BBS.zip
    
    # 7.进入项目的setting中
    [root@web01 ~]# cd BBS
    [root@web01 BBS]# cd BBS
    [root@web01 BBS]# vim settings.py
    
    # 8.修改settings文件
    ALLOWED_HOST = ['*']      # 修改为允许所有ip访问
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '10.0.0.100',     # 修改数据库配置的HOST地址,修改为Linux中mysql的地址
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '123',
            'NAME': 'time8',
        }
    }
    
    # 9.创建mysql用户并授权(在mysql中创建mysql用户,不同版本mysql创建用户授权方式不同)
    mysql> grant select,insert,delete,update on bbs.* to bbs@'10.0.0.%' identified by '123';
    	# 关于数据库用户管理可以参考:https://www.cnblogs.com/linagcheng/p/9662824.html
    
    # 10.配置nginx
    [root@web01 BBS]# vim /etc/nginx/conf.d/py.conf
    	# 内容如下
        server {
        listen 80;
        server_name 10.0.0.100;
        client_max_body_size 100M;
    
        location  /static {       # 上面的表示路由 
        alias /opt/BBS/static/;    # 下面的表示路径
        }
    
        location /media {
        alias /opt/BBS/media;
        }
    
        location / {
        index index.html;
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9090;
        uwsgi_param UWSGI_SCRIPT BBS.wsgi;
        uwsgi_param UWSGI_CHDIR /opt/BBS;
        }
        }
    
    # 11.关闭所有已有的uwsgi进程
    kill -9 `ps -ef |grep uwsgi|awk {'print $2'}`
    
    # 12.配置uwsgi
    [root@web01 BBS]# vim  uwsgi.ini
    	# 内容如下:
        [uwsgi]
        socket = 127.0.0.1:9090
        master = true
        workers = 2
        reload-mercy = 10
        vacuum = true
        max-requests = 1000
        limit-as = 512
        buffer-size = 30000
    
    # 13.启动uwsgi
    uwsgi --ini uwsgi.ini &
    
    # 14.重启nginx
    systemctl restart nginx
    
    • 数据库优化
    数据库中删除数据存在安全隐患,因此可以加一个字段state;
    如果state为1,表示没用的数据;如果state为0,表示可以访问;
    只要在查询数据的时候,查询条件加一条state==1,即可访问安全的没有被“删除”的数据
    
    

    二、ansible自动化部署(python自动化运维)

    1、安装ansible

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
        
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
        
    yum install ansible -y
    

    2、ansible例子

    (1)克隆虚拟机

    (2)在虚拟机上修改克隆机配置

    # 修改克隆机的主机名(即standby)
    hostnamectl set-hostname standby      
    
    # 修改主机地址
    vim /etc/sysconfig/network-scripts/ifcfg-eth0    
    	# 修改地址
        IPADDR=10.0.0.200
        # 删除UUID
    
    # 修改host文件
    vim /etc/hosts
    	# 更新主机名和地址
        10.0.0.200 standby
    
    # 重启
    systemctl restart network
    

    (3)利用SSH连接管理机与被管理机——管理机生成秘钥并推送公钥

    验证方式:
    (1)用户+密码(PAM)
    (2)秘钥验证(公钥--钥匙,私钥--锁)
    	通过秘钥对实现,需要将公钥分发到各节点
    
     # 1.生成秘钥对
    [root@web01 ~]# ssh-keygen
    
    # 2.推送公钥给被管理机
    [root@web01 ~]# for i in {1..12};do ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.$i;done               # 被管理机数量多,利用循环分发公钥
    [root@web01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.0.0.200   # 被管理机少,直接推送公钥
    
    # 3.测试推送
    [root@web01 ~]# ssh 10.0.0.200 date      # date表示连接,成功并退出连接
    
    

    (4)配置被管理的主机清单

    [root@web01 ~]# vim /etc/ansible/hosts
    	# 内容如下:
        [web]          # web表示组名,一组中有多个地址的被管理主机
        10.0.0.100
        10.0.0.200
    

    (5)测试ansible

    # 测试ad-hoc的命令
    [root@web01 ~]# ansible web -m ping
    # 如果成功显示如下信息:
        #10.0.0.12 | SUCCESS => {
        #    "changed": false, 
        #    "ping": "pong"
        #}
        #10.0.0.11 | SUCCESS => {
        #    "changed": false, 
        #    "ping": "pong"
        #}
    
    # 测试ansible中shell的命令
    [root@web01 ~]# ansible all -m shell -a "ll"
    

    3、ansible自动化部署nginx

    (1)配置YAML文件

    [root@web01 ~]# vim  playbook_nginx.yml 
    # 内容如下:
    - hosts: web       # 主机组设置
      remote_user: root        # 参与修改的用户
      vars:          # 变量,可以修改所有的端口等
        http_port: 80     
      tasks:
        - name: Add Nginx Yum Repository
          yum_repository:
            name: nginx
            description: Nginx Repository
            baseurl: http://nginx.org/packages/centos/7/$basearch/
            gpgcheck: no
    
        - name: Install Nginx Server
          yum: 
    	    name=nginx state=present
    
        - name: Configure Nginx Server
          template: src=./default.conf.template dest=/etc/nginx/conf.d/default.conf
          notify: Restart Nginx Server
    
        - name: Start Nginx Server
          service: name=nginx state=started enabled=yes
    
      handlers:
        - name: Restart Nginx Server
          service: name=nginx state=restarted
    

    (2)配置 default.conf.template 文件

    # 与YMAL文件在用一个目录下
    [root@web01 ~]#vim default.conf.template
        # 内容如下:
        server {
            listen       {{ http_port }};
            server_name  localhost;
    
            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
            }
        }
    

    (3)执行 ansible-playbook

    # 检查语法
    [root@web01 ~]# ansible-playbook --syntax playbook_nginx.yml	 
    
    # 模拟执行
    [root@web01 ~]# ansible-playbook -C playbook_nginx.yml 
    
    # 执行
    [root@web01 ~]# ansible-playbook playbook_nginx.yml	   
    
    

    (4)测试部署

    浏览器访问10.0.0.200:80
    
  • 相关阅读:
    Python 3学习 ——目录 Json Pickle
    Python 3 学习——函数扩展and迭代器生成器装饰器
    Python 3 学习——深浅拷贝以及函数
    Python 3 学习的第七小节——Linux-Ubuntu
    Python 3 —— 文件操作
    Python 3 学习的第五小节——字符编码与三级菜单实践
    关于PHP代码复用‘traits’的一段代码
    一个将对象彻底冻结的函数
    详解vue-cli脚手架项目-package.json
    关于element-ui日期选择器disabledDate使用心得
  • 原文地址:https://www.cnblogs.com/linagcheng/p/10235547.html
Copyright © 2011-2022 走看看