Hướng dẫn Ansible: Tạo Ansible Playbook cho LEMP Stack

theanh

Administrator
Nhân viên
Ansible là một công cụ tự động hóa đơn giản giúp tự động hóa việc triển khai ứng dụng phần mềm, cung cấp đám mây và quản lý cấu hình. Đây là một công cụ điều phối máy chủ giúp bạn quản lý và kiểm soát một số lượng lớn các nút máy chủ từ những nơi duy nhất được gọi là 'Máy điều khiển'. Ansible được Michael DeHaan tạo ra vào năm 2012 và được viết bằng Python và Powershell.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách tạo Ansible Playbook cơ bản để cung cấp LEMP Stack trên Ubuntu 18.04 Server. Bạn sẽ học cách tạo Ansible Playbook cơ bản có thể mở rộng cho các ứng dụng dự án PHP khác như WordPress, Nextcloud, v.v.

Điều kiện tiên quyết
  • 2 Ubuntu OS.10.5.5.20 ansible
  • 10.5.5.26 provision
[*] Kiến thức về cách sử dụng cơ bản Ansible
[*] Quyền root
Những gì chúng ta sẽ làm:
  1. Thiết lập dự án Ansible Playbook
  2. Tạo cấu trúc thư mục vai trò Ansible Playbook
  3. Thiết lập hosts và site.yml
  4. Thiết lập vai trò 'common' - Thiết lập cơ bản
  5. Thiết lập vai trò 'web' - Cấu hình Nginx và PHP-FPM
  6. Thiết lập vai trò 'db' - Cấu hình cơ sở dữ liệu MySQL
  7. Kiểm tra

Bước 1 - Thiết lập Dự án Ansible Playbook​

Ansible Playbook là một tập hợp các hướng dẫn mà bạn gửi để chạy trên một hoặc một nhóm máy chủ lưu trữ. Nó đại diện cho ansible-provisioning, trong đó tự động hóa được định nghĩa là các tác vụ và tất cả các công việc như cài đặt gói, chỉnh sửa tệp sẽ được thực hiện bởi các mô-đun ansible.

Ansible Playbook chứa một số cấu hình cơ bản, bao gồm thông tin máy chủ và người dùng của máy chủ cung cấp, danh sách tác vụ sẽ được triển khai cho máy chủ cung cấp, cấu hình mẫu và tùy chỉnh và một nhóm biến là một phần của mẫu và tác vụ.

Đầu tiên, tạo thư mục dự án chính trên máy 'ansible-control'. Thư mục dự án chính sẽ lưu trữ tất cả các thư mục playbook, tệp và cấu hình của chúng tôi.

Tạo thư mục dự án Ansible có tên là 'project-lemp' và vào đó.
Mã:
mkdir project-lemp/
cd project-lemp
Bây giờ hãy tạo tệp cấu hình mới 'hosts' và 'site.yml', sau đó tạo một thư mục mới có tên là 'roles'.
Mã:
touch hosts site.yml
mkdir -p roles/
Chi tiết về cấu hình:

hosts - Đây là tệp kiểm kê chứa các thông tin về máy chủ được ansible quản lý. Nó cho phép bạn tạo một nhóm máy chủ giúp bạn dễ dàng quản lý và mở rộng tệp kiểm kê hơn. Tệp kiểm kê có thể được tạo bằng nhiều định dạng khác nhau, bao gồm các định dạng INI và YAML.

site.yml - Tệp playbook chính chứa nhóm máy chủ nào sẽ được quản lý bằng các vai trò khả dụng của chúng ta.

roles - đây là một nhóm playbook Ansible sẽ được sử dụng để cung cấp máy chủ. Các vai trò ansible có cấu trúc thư mục riêng, mỗi vai trò sẽ chứa các thư mục như tác vụ, trình xử lý, biến, v.v.

Bước 2 - Tạo vai trò Ansible cho cấu trúc thư mục​

Trong bước này, chúng ta sẽ tạo thư mục vai trò ansible bằng lệnh ansible-galaxy. Chúng tôi sẽ tạo hai vai trò được gọi là vai trò 'common' và vai trò 'web'.

Bên trong thư mục 'project-lemp', hãy chuyển đến thư mục 'roles'.
Mã:
cd roles/
Tạo thư mục cấu trúc vai trò và các tệp cho vai trò 'common' và 'web' bằng cách chạy lệnh ansible-galaxy bên dưới.
Mã:
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db
Sau đó, hãy kiểm tra tất cả các cấu trúc thư mục vai trò ansible khả dụng bằng lệnh sau.
Mã:
tree .
Bạn sẽ thấy kết quả như bên dưới.


Bước 3 - Thiết lập hosts và site.yml​

Tệp 'hosts' sẽ chứa danh sách và nhóm máy chủ được quản lý bởi Ansible. Đối với hướng dẫn này, chúng tôi sẽ tạo một nhóm có tên là 'lemp' với thành viên có tên là 'server01' và địa chỉ IP là 10.5.5.26.

Chỉnh sửa tệp 'hosts' bằng trình soạn thảo vim.
Mã:
vim hosts
Dán cấu hình bên dưới.
Mã:
[lemp]
server01 ansible_host=10.5.5.26
Lưu và đóng.

Tiếp theo, chỉnh sửa tệp cấu hình site.yml.
Mã:
vim site.yml
Dán cấu hình bên dưới.
Mã:
---

- hosts: lemp
 remote_user: hakase
 become: yes

 roles:
 - common
 - web
 - db
Lưu và đóng.


Bước 3 - Thiết lập các vai trò chung​

Trong bước này, chúng ta sẽ thiết lập các vai trò chung. Và để làm được điều đó, chúng ta cần tạo một danh sách các tác vụ mà chúng ta sẽ thực hiện.

Dưới đây là danh sách các tác vụ mà chúng ta sẽ thực hiện trên các vai trò 'chung'.
  1. Thay đổi kho lưu trữ
  2. Cập nhật kho lưu trữ
  3. Nâng cấp các gói lên phiên bản mới nhất
  4. Thiết lập múi giờ máy chủ
Bây giờ, hãy chuyển đến thư mục 'chung' và chỉnh sửa cấu hình 'tasks/main.yml'.
Mã:
cd common/
vim tasks/main.yml
Tạo một tác vụ để thay đổi kho lưu trữ và chúng ta sẽ sử dụng mô-đun 'copy' để sao chép 'sources.list' cơ sở trên thư mục 'files' vào máy chủ từ xa '/etc/apt/'.
Mã:
- name: Thay đổi kho lưu trữ Ubuntu 18.04Bước 4 - Thiết lập vai trò 'web'
 copy:
 src: sources.list
 dest: /etc/apt/
 backup: yes
Tạo tác vụ để cập nhật kho lưu trữ và nâng cấp tất cả các gói lên phiên bản mới nhất bằng mô-đun 'apt'.
Mã:
- name: Cập nhật kho lưu trữ và nâng cấp các gói
 apt:
 upgrade: dist
 update_cache: yes
Bây giờ hãy tạo tác vụ để cấu hình múi giờ hệ thống bằng mô-đun múi giờ ansible.
Mã:
- name: Thiết lập múi giờ thành Asia/Jakarta
 timezone:
 name: Asia/Jakarta
 state: latest
Lưu và đóng.



Sau đó, tạo cấu hình kho lưu trữ mới 'sources.list' bên trong thư mục 'files'.
Mã:
vim files/sources.list
Chọn kho lưu trữ gần nhất với vị trí máy chủ của bạn, bên dưới là kho lưu trữ của tôi.
Mã:
deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic-multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse
Lưu và đóng.

Cuối cùng, cấu hình vai trò 'chung' đã hoàn tất.

Bước 4 - Thiết lập vai trò 'web'​

Trong bước này, chúng ta sẽ thiết lập vai trò 'web'. Nó sẽ thực hiện một số tác vụ bao gồm cài đặt máy chủ web Nginx, PHP-FPM với một số tiện ích mở rộng cơ bản và cấu hình PHP-FPM với Nginx.

Dưới đây là các tác vụ chi tiết mà chúng ta sẽ thực hiện trên các vai trò 'web':
  1. Cài đặt Nginx
  2. Cài đặt PHP-FPM
  3. Cấu hình php.ini
  4. Tạo máy chủ ảo
  5. Thêm tệp phpinfo
Vào thư mục 'web' và chỉnh sửa tệp 'tasks/main.yml'.
Mã:
cd web/
vim tasks/main.yml
Tạo tác vụ đầu tiên để cài đặt nginx bằng mô-đun apt.
Mã:
- name: Cài đặt Nginx
 apt:
 name: nginx
 state: latest
Bây giờ hãy tạo tác vụ để cài đặt PHP-FPM với một số tiện ích mở rộng cơ bản. Và đối với việc cài đặt nhiều gói, chúng ta có thể sử dụng định dạng 'list' của python như bên dưới.
Mã:
- name: Cài đặt PHP-FPM
 apt:
 name: ['php','php-fpm','php-common','php-cli','php-curl']
 state: latest
Tiếp theo, chúng ta sẽ thêm các dòng mới vào cấu hình php.ini bằng cách sử dụng mô-đun 'blockinfile'. Và ở cuối dòng, chúng ta sẽ thông báo cho ansible khởi động lại dịch vụ php-fpm sau khi cấu hình xong file php.ini.
Mã:
- name: Configure php.ini
 blockinfile:
 dest: /etc/php/{{ php_version }}/fpm/php.ini
 block: |
 date.time = Asia/Jakarta
 cgi-fix_pathinfo = 0
 backup: yes
 notify: restart php-fpm
Bây giờ chúng ta sẽ sao chép cấu hình máy chủ ảo nginx bằng module 'template'. Module template sẽ sao chép cấu hình từ thư mục 'templates' vào máy chủ từ xa. Chúng ta sẽ sao chép mẫu máy chủ ảo jinja2 'vhost.j2' vào thư mục '/etc/nginx/sites-enabled/' và cuối cùng chúng ta sẽ thông báo cho ansible khởi động lại dịch vụ nginx.
Mã:
- name: Tạo máy chủ ảo Nginx
 template:
 src: vhost.j2
 dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
 notify: restart nginx
Sau đó, chúng ta sẽ tạo các tác vụ mới để tạo thư mục web-root bằng mô-đun 'file' và sao chép mẫu index.php vào đó.
Mã:
- name: Tạo thư mục web-root
 file:
 path: /var/www/{{ domain_name }}
 state: directory

- name: Tải lên các tệp index.html và info.php
 template:
 src: index.php.j2
 dest: /var/www/{{ domain_name }}/index.php
Lưu và đóng.

Bây giờ chúng ta sẽ cấu hình trình xử lý để khởi động lại dịch vụ nginx và php-fpm. Chỉnh sửa cấu hình 'handlers/main.yml' bằng trình soạn thảo vim.

vim handlers/main.yml

Dán cấu hình bên dưới.
Mã:
- name: restart nginx
 service:
 name: nginx
 state: restarted
 enabled: yes

- name: restart php-fpm
 service:
 name: php{{ php_version }}-fpm
 state: restarted
 enabled: yes
Lưu và đóng.



Tiếp theo, chúng ta sẽ chỉnh sửa cấu hình 'vars/main.yml'. Ở đầu cấu hình, bạn sẽ thấy các cấu hình biến '{{ php_version }}' và '{{ domain_name }}'. Các biến đó biểu thị thiết lập môi trường của chúng ta cho phiên bản php và tên miền sẽ được sử dụng. Biến này làm cho ansible có thể tái sử dụng nhiều hơn vì chúng ta chỉ cần chỉnh sửa cấu hình biến 'vars/main.yml' và không cần chỉnh sửa cấu hình cơ sở.

Chỉnh sửa cấu hình biến 'vars/main.yml' bằng trình soạn thảo vim.
Mã:
vim vars/main.yml
Dán cấu hình bên dưới.
Mã:
php_version: 7.2
domain_name: hakase-labs.io
Lưu và đóng.

Bây giờ chúng ta sẽ tạo cấu hình mẫu jinja2 'index.php.j2' và 'vhost.j2' trên thư mục 'templates/'.
Mã:
vim templates/index.php.j2
Dán cấu hình bên dưới.
Mã:
[HEADING=1]index.html cho miền {{ domain_name }}[/HEADING]
Lưu và đóng.

Sau đó, tạo mẫu cho cấu hình máy chủ ảo nginx 'vhost.j2'.
Mã:
vim templates/vhost.j2
Dán cấu hình bên dưới.
Mã:
server {
 listen 80;
 listen [::]:80;

 root /var/www/{{ domain_name }};
 index index.php index.html index.htm index.nginx-debian.html;

 server_name {{ domain_name }};

 location / {
 try_files $uri $uri/ =404;
 }

 # truyền tập lệnh PHP tới máy chủ FastCGI
 #
 location ~ \.php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
 }

}
Lưu và đóng cấu hình, vậy là chúng ta đã hoàn tất cấu hình vai trò web.

Bước 5 - Thiết lập vai trò 'db'​

Ở bước này, chúng ta sẽ cấu hình vai trò 'db' để cài đặt và cấu hình cơ sở dữ liệu MySQL.

Dưới đây là các tác vụ chi tiết sẽ thực hiện trên vai trò 'db'.
  1. cài đặt mysql
  2. Tạo cơ sở dữ liệu MySQL
  3. Tạo người dùng MySQL
  4. khởi động lại mysql
Vào thư mục 'db' và chỉnh sửa cấu hình 'tasks/main.yml'.
Mã:
cd db/
vim tasks/main.yml
Bây giờ hãy cài đặt các gói MySQL bằng mô-đun 'apt' và định dạng 'list' của python cho nhiều gói cài đặt.
Mã:
- name: Cài đặt MySQL
 apt:
 name: ['mysql-server','mysql-client','python-mysqldb']
 state: latest
 notify: restart mysql
Sau đó tạo các tác vụ mới để tạo cơ sở dữ liệu MySQL và người dùng, sau đó cấp tất cả các quyền của người dùng cho cơ sở dữ liệu.
Mã:
- name: Tạo cơ sở dữ liệu
 mysql_db:
 name: '{{ db_name }}'
 state: present

- name: Tạo người dùng cho cơ sở dữ liệu
 mysql_user:
 name: '{{ db_user }}'
 password: '{{ db_pass }}'
 encrypted: yes
 priv: '{{ db_name }}.*:ALL'
 state: present
Lưu và đóng.



Tiếp theo, chỉnh sửa Cấu hình 'handlers/main.yml'.
Mã:
vim handlers/main.yml
Dán cấu hình của tác vụ để khởi động lại dịch vụ MySQL.
Mã:
- name: restart mysql
 service:
 name: mysql
 state: restarted
 enabled: yes
Lưu và đóng.

Sau đó, chỉnh sửa cấu hình biến vars 'vars/main.yml'.
Mã:
vim vars/main.yml
Dán các biến này cho cơ sở dữ liệu MySQL và cấu hình người dùng bên dưới.
Mã:
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'
Lưu và đóng.

Biến 'db_pass' có mật khẩu được mã hóa MySQL và bạn có thể tạo mật khẩu MySQL được mã hóa bằng các công cụ trực tuyến.

Bước 6 - Chạy Ansible Playbook​

Đi tới thư mục dự án Ansible.
Mã:
cd project-lemp/
Chạy lệnh ansible-playbook bên dưới.
Mã:
ansible-playbook -i hosts site.yml
Bây giờ ansible sẽ chạy tất cả các vai trò mà chúng ta chỉ định cho máy chủ. Khi hoàn tất, bạn sẽ thấy kết quả như bên dưới.



Đảm bảo không gặp lỗi nào.

Bước 7 - Kiểm tra​

Mở trình duyệt web và nhập tên miền vào thanh địa chỉ http://hakase-labs.io.

Bạn sẽ thấy trang chỉ mục với phpinfo như bên dưới.



PHP-FPM và Nginx đang hoạt động.

Tiếp theo, quay lại thiết bị đầu cuối máy chủ và đăng nhập vào máy chủ MySQL bằng tên người dùng và mật khẩu mà chúng ta đã tạo trên biến vai trò 'mysql'.
Mã:
mysql -u hakase -p
MẬT KHẨU: hakasepass
kiểm tra danh sách cơ sở dữ liệu do người dùng sở hữu.
Mã:
show databases;
Và bạn sẽ được đăng nhập vào shell MySQL và sẽ thấy cơ sở dữ liệu có tên 'hakase-db' trong danh sách.



Cuối cùng, Ansible Playbook để cài đặt và cấu hình LEMP Stack đã được tạo và thử nghiệm thành công.

Tham khảo​

https://docs.ansible.com/ansible/latest/index.html
 
Back
Bên trên