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
- Phân tích kịch bản
- 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