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
[*] Quyền root
Những gì chúng ta sẽ làm:
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 đó.
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'.
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ên trong thư mục 'project-lemp', hãy chuyển đến thư mục '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.
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.
Bạn sẽ thấy kết quả như bên dưới.
Chỉnh sửa tệp 'hosts' bằng trình soạn thảo vim.
Dán cấu hình bên dưới.
Lưu và đóng.
Tiếp theo, chỉnh sửa tệp cấu hình site.yml.
Dán cấu hình bên dưới.
Lưu và đóng.
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'.
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/'.
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'.
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.
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'.
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.
Lưu và đóng.
Cuối cùng, cấu hình vai trò 'chung' đã hoàn tất.
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':
Tạo tác vụ đầu tiên để cài đặt nginx bằng mô-đun apt.
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.
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.
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.
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 đó.
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.
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.
Dán cấu hình bên dưới.
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/'.
Dán cấu hình bên dưới.
Lưu và đóng.
Sau đó, tạo mẫu cho cấu hình máy chủ ảo nginx 'vhost.j2'.
Dán cấu hình bên dưới.
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.
Dưới đây là các tác vụ chi tiết sẽ thực hiện trên vai trò 'db'.
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.
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.
Lưu và đóng.
Tiếp theo, chỉnh sửa Cấu hình 'handlers/main.yml'.
Dán cấu hình của tác vụ để khởi động lại dịch vụ MySQL.
Lưu và đóng.
Sau đó, chỉnh sửa cấu hình biến vars '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.
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.
Chạy lệnh ansible-playbook bên dưới.
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ạ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'.
kiểm tra danh sách cơ sở dữ liệu do người dùng sở hữu.
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.
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
[*] Quyền root
Những gì chúng ta sẽ làm:
- Thiết lập dự án Ansible Playbook
- Tạo cấu trúc thư mục vai trò Ansible Playbook
- Thiết lập hosts và site.yml
- Thiết lập vai trò 'common' - Thiết lập cơ bản
- Thiết lập vai trò 'web' - Cấu hình Nginx và PHP-FPM
- Thiết lập vai trò 'db' - Cấu hình cơ sở dữ liệu MySQL
- 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
Mã:
touch hosts site.yml
mkdir -p roles/
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/
Mã:
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db
Mã:
tree .
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
Mã:
[lemp]
server01 ansible_host=10.5.5.26
Tiếp theo, chỉnh sửa tệp cấu hình site.yml.
Mã:
vim site.yml
Mã:
---
- hosts: lemp
remote_user: hakase
become: yes
roles:
- common
- web
- db
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'.
- Thay đổi kho lưu trữ
- Cập nhật kho lưu trữ
- Nâng cấp các gói lên phiên bản mới nhất
- Thiết lập múi giờ máy chủ
Mã:
cd common/
vim tasks/main.yml
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
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
Mã:
- name: Thiết lập múi giờ thành Asia/Jakarta
timezone:
name: Asia/Jakarta
state: latest
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
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
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':
- Cài đặt Nginx
- Cài đặt PHP-FPM
- Cấu hình php.ini
- Tạo máy chủ ảo
- Thêm tệp phpinfo
Mã:
cd web/
vim tasks/main.yml
Mã:
- name: Cài đặt Nginx
apt:
name: nginx
state: latest
Mã:
- name: Cài đặt PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latest
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
Mã:
- name: Tạo máy chủ ảo Nginx
template:
src: vhost.j2
dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
notify: restart nginx
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
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
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
Mã:
php_version: 7.2
domain_name: hakase-labs.io
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
Mã:
[HEADING=1]index.html cho miền {{ domain_name }}[/HEADING]
Sau đó, tạo mẫu cho cấu hình máy chủ ảo nginx 'vhost.j2'.
Mã:
vim templates/vhost.j2
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;
}
}
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'.
- cài đặt mysql
- Tạo cơ sở dữ liệu MySQL
- Tạo người dùng MySQL
- khởi động lại mysql
Mã:
cd db/
vim tasks/main.yml
Mã:
- name: Cài đặt MySQL
apt:
name: ['mysql-server','mysql-client','python-mysqldb']
state: latest
notify: restart mysql
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
Tiếp theo, chỉnh sửa Cấu hình 'handlers/main.yml'.
Mã:
vim handlers/main.yml
Mã:
- name: restart mysql
service:
name: mysql
state: restarted
enabled: yes
Sau đó, chỉnh sửa cấu hình biến vars 'vars/main.yml'.
Mã:
vim vars/main.yml
Mã:
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'
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/
Mã:
ansible-playbook -i hosts site.yml
Đả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
Mã:
show databases;
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.