• Ansible Playbooks 部署Nginx综合案例


    Ansible Playbooks 部署Nginx综合案例
    --------------------------------------------------------------------------------------------
    在ansible 主机上
    1、创建目录结构
    mkdir -pv /etc/ansible/roles/nginx/{files,handlers,tasks,templates,vars}
     
    2、目录结构查看
    yum -y install tree
    cd /etc/ansible/
    tree
    3、定义一个主调用文件
    vim /etc/ansible/nginx.yaml
    - hosts: laowang  (执行主机范围)
      gather_facts: True (开启系统内置变量)
      remote_user: root 
      roles:    (启用roles原型配置)
      - nginx    (执行nginx原型模组)
    4、files:存储有copy或script等模块调用的文件
    cd /etc/ansible/roles/nginx/files/
    上传nginx包到files目录下
    nginx-1.16.0.tar.gz
    5、handlers:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其他的文件需要由main.yml进行“包含”调用;
    vim /etc/ansible/roles/nginx/handlers/main.yaml
    - name: start nginx
      raw: /usr/local/nginx/sbin/nginx
    6、tasks:目录至少应该有一个名为main.yml的文件,用于定义各task;其他文件需要由main.yml进行“包含”调用【语法检测会出错 不用管,继续做就可以】
    vim /etc/ansible/roles/nginx/tasks/main.yaml
    ---
    - name: yum install
      yum: name={{ item }} state=latest  (使用item变量)
      with_items:       (变量值)     
        - openssl-devel
        - pcre-devel
        - zlib-devel
        - gcc
        - gcc-c++
        - make
    - name: user nginx
      shell: useradd -M -s /sbin/nologin nginx
    - name: package
      copy: src=nginx-1.16.0.tar.gz dest=/usr/src
    - name: install nginx
      shell: cd /usr/src ; tar xf nginx-1.16.0.tar.gz -C /usr/src ; cd /usr/src/nginx-1.16.0 ; ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module  --with-pcre && make && make install
    - name: copy conf file
      template: src=nginx.conf dest=/usr/local/nginx/conf/nginx.conf  (模板复制配置文件)
      notify:    (通知触发器)
        - start nginx  (启动服务)
    ...
    7、templates:存储由template模块调用的模板文本
    vim /etc/ansible/roles/nginx/templates/nginx.conf
    user  nginx;
    worker_processes  {{ ansible_processor_vcpus }};  (系统变量,cpu数量变量值)
    {% if ansible_processor_vcpus == 1 %}    (判断如果CPU核心等于1)
    worker_cpu_affinity 10;       (使用这个分配,依次类推)
    {% elif ansible_processor_vcpus == 2 %}
    worker_cpu_affinity 01 10;
    {% elif ansible_processor_vcpus == 4 %}
    worker_cpu_affinity 0001 0010 0100 1000;
    {% elif ansible_processor_vcpus == 8 %}
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    {% else %}          (否则使用下面的分配方式)
    worker_cpu_affinity 0001 0010 0100 1000;
    {% endif %}
    error_log  logs/error.log;
    pid        logs/nginx.pid;

    events {
        use epoll;
        worker_connections  65535;
    }

    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  logs/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
        gzip  on;
        server {
            listen       {{ nginxport }};     (自定义变量,监听端口变量)
            server_name  {{ server_name}};    (自定义变量,服务名变量)
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    8、vars:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
    vim /etc/ansible/roles/nginx/vars/main.yaml
    ---
    nginxport: "80"
    server_name: "www.laowang.com"
    ...
    测试
    ansible-playbook -C /etc/ansible/nginx.yaml
    ansible-playbook  /etc/ansible/nginx.yaml
    9、其他:
    meta:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用
    default:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量
  • 相关阅读:
    亲测——pycharm下运行第一个scrapy项目 ©seven_clear
    [转]pycharm的一些快捷键
    一个豆瓣API的使用——拒绝思维定式
    小试牛刀--利用豆瓣API爬取豆瓣电影top250
    Python GUI编程--Tkinter
    多线程详解
    K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境
    初学者浅度剖析eShopOnContainers 里面用到的MediatR .
    通过Task异步加快对数组的运算
    为什么是容器?
  • 原文地址:https://www.cnblogs.com/elin989898/p/11989077.html
Copyright © 2020-2023  润新知