Hướng dẫn cài đặt Nginx sử dụng Ansible
Trước đây, Bizfly Cloud đã 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.
- 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=2changed=0unreachable=0failed=0
node2 : ok=2changed=0unreachable=0failed=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=3changed=1unreachable=0failed=0
node2 : ok=3changed=1unreachable=0failed=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=7changed=2unreachable=0failed=0
node2 : ok=7changed=2unreachable=0failed=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!
Theo Bizfly Cloud chia sẻ
>> Tham khảo thêm: Cấu hình NIC Teaming và VLAN ID trên Window Server