Trang chủ Sys-Ops

Hướng dẫn cài đặt Nginx sử dụng Ansible

Trước đây, TechBlog đã giới thiệu tới bạn một Serial lý thuyết về Ansible, trong bài này, chúng ta sẽ cùng thực hiện một ví dụ cơ bản nhất - sử dụng Ansible cài đặt Nginx trên Server.

  1. Setup mô hình

45.124.94.98 - node1 -  webserver

45.124.94.125 - node2 - webserver

45.124.94.96 - ansiblemaster -  ansible master

Toàn bộ 3 node đang chạy hệ điều hành Ubuntu 16.04

- Cấu hình trên cả 3 Server:

$ vi /etc/hosts

- Thêm các dòng sau vào file host

45.124.94.96 ansiblemaster

45.124.94.98 node1

45.124.94.125 node2

- Cấu hình key SSH

Trên ansiblemasterserver tạo key để ssh

root@ansiblemaster:~# ssh-keygen -t rsa

Copy Public Key tới Node1 và Node2

root@ansiblemaster:~# ssh-copy-id -i root@node1

root@ansiblemaster:~# ssh-copy-id -i root@node2

- Cài Ansible trên Ansiblemaster Server

root@ansiblemaster:~# apt-get install ansible

- Kiểm tra quá trình cài đặt

root@ansiblemaster:~# ansible –version

root@ansiblemaster:~# ansible --version

ansible 2.0.0.2

config file = /etc/ansible/ansible.cfg

configured module search path = Default w/o overrides

Vậy là chúng ta đã xong việc cấu hình chuẩn bị

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

- Tạo các Group Server trên Ansible Ansiblemaster:

root@ansiblemaster:~# vi /etc/ansible/hosts

[web-server]

node1

node2

- Check kết nối giữa các Server:

root@ansiblemaster:~# ansible -m ping all

node2 | SUCCESS => {

“changed”: false,

“ping”: “pong”

}

node1 | SUCCESS => {

“changed”: false,

“ping”: “pong”

}

- Bây giờ ta sẽ viết Playbook cài đặt Nginx, Task đầu tiên là kiểm tra xem nhóm Web-server đã cài đặt nginx hay chưa

root@ansiblemaster:~# vim install-nginx.yml

---

- hosts: web-server

 name: check nginx installed or not  

 tasks:

 - name: check nginx via dpkg

shell: dpkg -s nginx | grep 'install ok installed'

ignore_errors: True

register: checknginx

failed_when: no

changed_when: no

- Kiểm tra xem File đã đúng Syntax hay chưa

root@ansiblemaster:~# ansible-playbook install-nginx.yml --syntax-check

Kết quả:

playbook: install-nginx.yml

- Chạy Playbook

root@ansiblemaster:~# ansible-playbook install-nginx.yml -vv

Kết quả:

root@ansiblemaster:~# ansible-playbook install-nginx.yml -vv

Using /etc/ansible/ansible.cfg as config file

1 plays in install-nginx.yml

PLAY [check nginx installed or not] ********************************************

TASK [setup] *******************************************************************

ok: [node1]

ok: [node2]

TASK [check nginx via dpkg] ****************************************************

ok: [node1] => {"changed": false, "cmd": "dpkg -s nginx | grep 'install ok installed'", "delta": "0:00:00.012349", "end": "2017-10-16 09:53:12.180783", "failed": false, "failed_when_result": false, "rc": 1, "start": "2017-10-16 09:53:12.168434", "stderr": "dpkg-query: package 'nginx' is not installed and no information is available\nUse dpkg --info (= dpkg-deb --info) to examine archive files,\nand dpkg --contents (= dpkg-deb --contents) to list their contents.", "stdout": "", "stdout_lines": [], "warnings": []}

ok: [node2] => {"changed": false, "cmd": "dpkg -s nginx | grep 'install ok installed'", "delta": "0:00:00.012129", "end": "2017-10-16 09:53:12.192502", "failed": false, "failed_when_result": false, "rc": 1, "start": "2017-10-16 09:53:12.180373", "stderr": "dpkg-query: package 'nginx' is not installed and no information is available\nUse dpkg --info (= dpkg-deb --info) to examine archive files,\nand dpkg --contents (= dpkg-deb --contents) to list their contents.", "stdout": "", "stdout_lines": [], "warnings": []}

PLAY RECAP *********************************************************************

node1                   : ok=2 changed=0 unreachable=0 failed=0    

node2                   : ok=2 changed=0 unreachable=0 failed=0    

Ở đây ta thấy mã trả về ở cả 2 node:"rc": 1 tức là nginx chưa được cài đặt

- Viết tiếp task cài đặt vào file install-nginx.yml

root@ansiblemaster:~# vim install-nginx.yml

---

- hosts: web-server

name: check nginx installed or not  

tasks

- name: check nginx via dpkg

shell: dpkg -s nginx | grep 'install ok installed'

ignore_errors: True

register: checknginx

failed_when: no

changed_when: no

- name: install nginx if not installed

command: apt-get install nginx –y

when: checknginx.rc == 1

- Kiểm tra xem file viết đã đúng chưa

root@ansiblemaster:~# ansible-playbook install-nginx.yml --syntax-check

- Chạy file

root@ansiblemaster:~# ansible-playbook install-nginx.yml -vvvv

- Kết quả chạy file:

PLAY RECAP *********************************************************************

node1                   : ok=3 changed=1 unreachable=0 failed=0    

node2                   : ok=3 changed=1 unreachable=0 failed=0   

- Playbook đã chạy thành công, bây giờ ta kiểm tra nginx thủ công trên node1 và node2

root@node1:~# dpkg -s nginx | grep 'install ok installed'

Status: install ok installed

root@node2:~# dpkg -s nginx | grep 'install ok installed'

Status: install ok installed

Như vậy nginx đã được cài đặt trên node1 và node2 thông qua ansible. Bây giờ ta thử thêm một file index.html tùy chỉnh vào nginx webserver. Viết tiếp vào file install-nginx.yml

root@ansiblemaster:~# vim install-nginx.yml

---

- hosts: web-server

name: check nginx installed or not

tasks:

- name: check nginx via dpkg

shell: dpkg -s nginx | grep 'install ok installed'

ignore_errors: True

register: checknginx

failed_when: no

changed_when: no

- name: install nginx if not installed

command: apt-get install nginx -y

when: checknginx.rc == 1

 - name: Set file path

set_fact: file_path=/var/www/html/index.nginx-debian.html

- name: add index.html

file: path="{file_path}" state=touch

- stat: path="{file_path}"

register: filepath

- set_fact: file_content="Hello world from{{inventory_hostname}}"

- copy: content="{{file_content}}" dest="{{file_path}}"

when: filepath.stat.exists == true

- Lưu lại, thoát ra, kiểm tra syntax

root@ansiblemaster:~# ansible-playbook install-nginx.yml -vvvv

Kết quả:

PLAY RECAP *********************************************************************

node1                   : ok=7 changed=2 unreachable=0 failed=0    

node2                   : ok=7 changed=2 unreachable=0 failed=0    

- Kiểm tra lại trên node 1 và node 2                                                         

root@ansiblemaster:~# curl node1

Hello world fromnode1

root@ansiblemaster:~# curl node2

Hello world fromnode2

Như vậy là chúng ta đã cài đặt và viết thử những Playbook đầu tiên thành công về Nginx Webserver!

>> Tham khảo thêm: Cấu hình NIC Teaming và VLAN ID trên Window Server