Cài đặt Nginx sử dụng Ansible

Trang web chính thức của Ansible đề xuất cấu trúc playbook như sau:

Cấu trúc thư mục

production     # Tệp inventory cho môi trường sản xuất
staging        # Tệp inventory cho môi trường thử nghiệm
group_vars /   # Các biến cho nhóm máy chủ
    group1
    group2
hosts_vars /   # Các biến cho từng máy chủ cụ thể
    hostname1
    hostname2
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
site.yml        # Tệp playbook chính
webservers.yml  # Playbook cho dịch vụ web
dbservers.yml   # Playbook cho dịch vụ cơ sở dữ liệu

roles/                  
    webservers/  # Vai trò cho các dịch vụ web
        tasks/
            main.yml  # Tệp chứa các tác vụ
        handlers/
            main.yml  
        vars/
            main.yml  # Biến cho vai trò
    dbservers/  # Vai trò cho các dịch vụ cơ sở dữ liệu
        ...
    common/  # Các tác vụ và biến chung
        tasks/
            main.yml
        handlers/
            main.yml
        vars/
            main.yml
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =			
    templates/  # Mẫu cấu hình
        ntp.conf.j2
    files/  # Tệp tin cần upload
        bar.txt
        fool.sh
    meta/  # Phụ thuộc của vai trò
        main.yml

Cài đặt Nginx theo cách biên dịch từ mã nguồn

  1. Phân tích kịch bản
  2. Cấu trúc kịch bản

. ├── files │ ├── index.html │ ├── nginx │ └── nginx-1.12.3.tar.gz ├── production ├── roles │ ├── apache │ ├── common │ │ ├── tasks │ │ │ └── main.yml │ │ └── vars │ │ └── main.yml │ ├── handlers │ ├── meta │ ├── nginx │ │ ├── handlers │ │ │ └── main.yml │ │ ├── tasks │ │ │ ├── base.yml │ │ │ ├── main.yml │ │ │ └── nginx.yml │ │ └── vars │ │ └── main.yml │ └── tasks ├── staging ├── templates │ └── nginx.conf ├── webserver.retry └── webserver.yml

2. Phân tích kịch bản

.
├── ansible.cfg      # Tệp cấu hình chính của Ansible
├── files            # Thư mục chứa tệp tin cần upload
├── production       # Tệp inventory cho môi trường sản xuất
├── roles            # Vai trò
├── staging          # Tệp inventory cho môi trường thử nghiệm
├── templates        # Mẫu cấu hình
└── webserver.yml    # Tệp thực thi chính cho dịch vụ web
Cấu trúc thư mục files
#tree -L 1
.
├── index.html            # Tệp HTML để kiểm tra
├── nginx                 # Tệp khởi động nginx
└── nginx-1.12.3.tar.gz   # Gói cài đặt Nginx
Cấu trúc thư mục templates
#tree -L 1
.
└── nginx.conf             # Tệp cấu hình Nginx
Cấu trúc thư mục roles
.
├── apache
├── common                 # Thư mục chung
│   ├── tasks
│   │   └── main.yml
│   └── vars
│       └── main.yml
├── handlers
├── meta
├── nginx
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   ├── base.yml
│   │   ├── main.yml
│   │   └── nginx.yml
│   └── vars
│       └── main.yml
└── tasks
Cài đặt gói cơ bản trên máy chủ từ xa
yum install gcc openssl-devel

Mô hình cấu hình
/etc/ansible/palybook/production
[nginx_hosts]
192.168.192.1 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
[nginx_hsots:vars]
filename=hostname

/etc/ansible/palybook/webserver.yml
---
- hosts: nginx_hosts
  remote_user: root
  roles:
    - common
    - {role: nginx, tags: nginx}

/etc/ansible/palybook/roles/common/vars/main.yml
download_dir: /opt/download
app_dir: /opt/app

/etc/ansible/palybook/roles/nginx/tasks/main.yml
---
- include_tasks: basic.yml
- include_tasks: nginx.yml

/etc/ansible/palybook/roles/nginx/tasks/basic.yml
---
- name: Cài đặt gói cơ bản cho Nginx
  yum: name={{ item }} state=latest
  with_items:
    - gcc-c++
    - openssl-devel
    - pcre
    - pcre-devel

/etc/ansible/palybook/roles/nginx/tasks/nginx.yml
---
- name: Giải nén gói Nginx
  unarchive: src=/nginx-1.12.2.tar.gz dest={{ download_dir }}
- name: Biên dịch và cài đặt Nginx
  shell: cd {{ download_dir }}/nginx-1.12.2/ && ./configure --prefix={{ app_dir }}/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install
- name: Sao chép tệp HTML kiểm tra
  copy: src=index.html dest={{ app_dir }}/nginx/html/
- name: Sao chép tệp cấu hình Nginx
  template: src=nginx.conf dest={{ app_dir }}/nginx/conf/nginx.conf
  notify:
    - Khởi động lại dịch vụ Nginx
- name: Đảm bảo dịch vụ Nginx đang chạy
  service: name=nginx state=started

/etc/ansible/palybook/roles/nginx/handlers/main.yml
---
- name: Khởi động lại dịch vụ Nginx
  service: name=nginx state=restarted

Thực thi quá trình cài đặt
ansible-playbook -i /etc/ansible/palybook/production /etc/ansible/palybook/webservers.yml

Kiểm tra dịch vụ Nginx
netstat -luntp | grep nginx

Thẻ: ansible nginx playbook roles templates

Đăng vào ngày 30 tháng 5 lúc 20:07