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. Đó là 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 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 Máy chủ Ubuntu 18.04. Bạn sẽ tìm hiểu cách tạo Ansible Playbook cơ bản có thể mở rộng quy mô 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 hệ điều hành Ubuntu.
- 10.5.5.20 an toàn
- điều khoản 10.5.5.26
- Kiến thức sử dụng cơ bản Ansible
- Đặc quyền gốc
Chúng tôi sẽ làm gì:
- Thiết lập dự án Playbook Ansible
- Tạo cấu trúc thư mục vai trò Ansible Playbook
- Thiết lập máy chủ và site.yml
- Thiết lập các vai trò ‘chung’ – 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ủ. Nó đại diện cho việc cung cấp ansible, trong đó tự động hóa được xác định là các nhiệm 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 máy chủ và thông tin 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 cũng như một nhóm biế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ẽ được lưu trữ tất cả các thư mục, tệp và cấu hình playbook của chúng tôi.
Tạo thư mục dự án Ansible có tên ‘project-lemp’ và vào đó.
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’.
touch hosts site.yml
mkdir -p roles/
Chi tiết về cấu hình:
máy chủ – Đó là một tệp kiểm kê chứa các mẩu thông tin về các máy chủ được quản lý bởi ansible. 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 quy mô 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 định dạng INI và YAML.
site.yml – Tệp sổ tay chính chứa nhóm máy chủ nào sẽ được quản lý bằng các vai trò có sẵn của chúng tôi.
vai trò – đó là một nhóm sách hướng dẫn 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ý, vars, 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ò ‘chung’ và vai trò ‘web’.
Trong thư mục ‘project-lemp’, hãy chuyển đến thư mục ‘roles’.
cd roles/
Tạo thư mục và tệp cấu trúc vai trò cho các vai trò ‘chung’ và ‘web’ bằng cách chạy lệnh ansible-galaxy bên dưới.
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db
Sau đó, kiểm tra tất cả các cấu trúc thư mục vai trò ansible có sẵn bằng lệnh sau.
tree .
Bạn sẽ được hiển thị kết quả như dưới đây.
Bước 3 – Thiết lập máy chủ và site.yml
Tệp ‘máy chủ’ sẽ chứa danh sách và nhóm máy chủ do Ansible quản lý. Đối với hướng dẫn này, chúng tôi sẽ tạo một nhóm có tên ‘lemp’ với thành viên có tên là ‘server01’ và địa chỉ IP 10.5.5.26.
Chỉnh sửa tệp ‘máy chủ’ bằng trình soạn thảo vim.
vim hosts
Dán cấu hình bên dưới.
[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.
vim site.yml
Dán cấu hình bên dưới.
---
- 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 nhiệm vụ mà chúng ta sẽ làm.
Bên dưới danh sách các nhiệm vụ mà chúng ta sẽ thực hiện với các vai trò ‘thông thường’.
- Thay đổi kho lưu trữ
- Cập nhật kho lưu trữ
- Nâng cấp gói lên phiên bản mới nhất
- Thiết lập múi giờ máy chủ
Bây giờ hãy vào thư mục ‘common’ và chỉnh sửa cấu hình ‘task/main.yml’.
cd common/
vim tasks/main.yml
Tạo một tác vụ để thay đổi kho lưu trữ và chúng tôi sẽ sử dụng mô-đun ‘sao chép’ để sao chép ‘nguồn.list’ cơ sở trên thư mục ‘tệp’ sang máy chủ từ xa ‘/etc/apt/’.
- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
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’.
- name: Update repository and Upgrade packages
apt:
upgrade: dist
update_cache: yes
Bây giờ hãy tạo tác vụ định cấu hình múi giờ hệ thống bằng mô-đun múi giờ ansible.
- name: Setup timezone to 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’.
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à của tôi.
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-updates 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’ đã được hoàn thành.
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à định cấu hình PHP-FPM bằng Nginx.
Dưới đây là chi tiết các nhiệm vụ mà chúng tôi sẽ thực hiện với vai trò ‘web’:
- Cài đặt Nginx
- Cài đặt PHP-FPM
- Định cấu hình php.ini
- Tạo một máy chủ ảo
- Thêm tập tin phpinfo
Vào thư mục ‘web’ và chỉnh sửa tệp ‘task/main.yml’.
cd web/
vim tasks/main.yml
Tạo tác vụ đầu tiên để cài đặt nginx bằng mô-đun apt.
- name: Install 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ố phần mở rộng cơ bản. Và để cài đặt nhiều gói, chúng ta có thể sử dụng định dạng ‘danh sách’ python như bên dưới.
- name: Instal PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latest
Tiếp theo, chúng tôi sẽ thêm dòng mới vào cấu hình php.ini bằng mô-đun ‘blockinfile’. Và ở cuối dòng, chúng tôi sẽ thông báo cho ansible khởi động lại dịch vụ php-fpm sau khi định cấu hình tệp php.ini.
- 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 mô-đun ‘mẫu’. Mô-đun mẫu sẽ sao chép cấu hình từ thư mục ‘templates’ sang máy chủ từ xa. Chúng tôi 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 tôi sẽ thông báo cho ansible khởi động lại dịch vụ nginx.
- name: Create Nginx virtual host
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 đó.
- name: Create web-root directory
file:
path: /var/www/{{ domain_name }}
state: directory
- name: Upload index.html and info.php files
template:
src: index.php.j2
dest: /var/www/{{ domain_name }}/index.php
Lưu và đóng.
Bây giờ chúng ta sẽ định 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.
trình xử lý vim/main.yml
Dán cấu hình bên dưới.
- 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 đó thể hiện thiết lập môi trường của chúng tôi cho phiên bản php và tên miền sẽ được sử dụng. Biến này giúp 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 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.
vim vars/main.yml
Dán cấu hình bên dưới.
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/’.
vim templates/index.php.j2
Dán cấu hình bên dưới.
<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>
<p>
<p>
<?php
phpinfo();
?>
</body>
</html>
Lưu và đóng.
Sau đó, tạo mẫu cho cấu hình máy chủ ảo nginx ‘vhost.j2’.
vim templates/vhost.j2
Dán cấu hình bên dưới.
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;
}
# pass PHP scripts to FastCGI server
#
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à 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ẽ định cấu hình các vai trò ‘db’ để cài đặt và cấu hình cơ sở dữ liệu MySQL.
Dưới đây là chi tiết các nhiệm vụ sẽ thực hiện với 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
Đi tới thư mục ‘db’ và chỉnh sửa cấu hình ‘tasks/main.yml’.
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 ‘danh sách’ python để cài đặt nhiều gói.
- name: Install 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 đặc quyền của người dùng cho cơ sở dữ liệu.
- name: Create database
mysql_db:
name: '{{ db_name }}'
state: present
- name: Create user for the database
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’.
vim handlers/main.yml
Dán cấu hình của tác vụ để khởi động lại dịch vụ MySQL.
- 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’.
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.
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 Playbook Ansible
Xem thư mục dự án Ansible.
cd project-lemp/
Chạy lệnh ansible-playbook bên dưới.
ansible-playbook -i hosts site.yml
Bây giờ ansible sẽ chạy tất cả các vai trò mà chúng ta gán cho máy chủ. Khi hoàn tất, bạn sẽ thấy kết quả như bên dưới.
Hãy chắc chắn rằng bạn không gặp lỗi.
Bước 7 – Kiểm tra
Mở trình duyệt web của bạn và nhập tên miền trên thanh địa chỉ http://hakase-labs.io.
Và bạn sẽ được hiển thị 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 người dùng và mật khẩu mà chúng tôi đã tạo trên biến vai trò ‘mysql’.
mysql -u hakase -p
PASSWORD: hakasepass
kiểm tra danh sách cơ sở dữ liệu thuộc sở hữu của người dùng.
show databases;
Và bạn sẽ đăng nhập vào MySQL shell 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
Đăng ký liền tay Nhận Ngay Bài Mới
Subscribe ngay
Cám ơn bạn đã đăng ký !
Lỗi đăng ký !
Add Comment