[10 phút ] [Ansible] [Cơ bản] [Phần 5] Viết Playbook cài đặt WordPress trên CentOS 7

30/12/2020

Ở bài viết trước, chúng ta đã cùng nhau tìm hiểu về các thành phần, quy tắc cũng như cách viết một playbook.

Qua bài viết lần này tôi sẽ cùng các bạn xây dựng một playbook hoàn chỉnh hơn với mục đích cụ thể là cài đặt WordPress trên CentOS 7

I. Mô hình

Ta sử dụng 1 server và 1 node client.

Cả 2 đều cài CentOS 7.

Trên Server đã cài đặt Ansbile, đã trao đổi SSH key.

Khai báo file Inventory:

II. Các công việc cần làm và module liên quan

2.1. Các công việc cần làm

Việc nắm được các công việc, các bước cần phải làm là điều cần thiết. Sẽ vô cùng khó khăn khi muốn tự động hóa một việc gì đó trong khi chính bản thân chúng ta còn chưa nắm bắt được quy trình công việc hay thậm chí là còn chưa thực hành nó theo hướng thủ công một lần nào.

Bởi vậy, đầu tiên tôi muốn giới thiệu qua về quy trình mình sẽ làm để cài đặt WordPress trên CentOS 7:

  • Cài đặt LAMP
  • Đảm bảo các service bật và các port được thông.
  • Cài đặt WordPress
  • Tạo cơ sở dữ liệu, người dùng cho WordPress
  • Update version PHP nhằm tránh lỗi version PHP cũ không được hỗ trợ ở WordPress bản mới.

2.2. Các module liên quan

Quy trình đã nắm được, vậy tiếp theo ta cần làm gì?

Tìm các module liên quan đến những công việc nằm trong quy trình kia chính là công việc tiếp theo. Để rồi từ các module này ta xây dựng lên một playbook hoàn chỉnh.

Các module mà tôi sẽ sử dụng:

Câu hỏi đặt ra ở đây là “Làm cách nào mà tôi có thể tìm thấy chúng ?”

Cách 1: Bạn chỉ cần truy cập vào doc của ansible theo đường link: https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

Và sau đó, tìm module phù hợp với quy trình công việc.

Cách 2: Bạn chỉ cần lên Google search :
ansible module + keyword bước công việc

III. Viết Playbook

Trước khi bắt đầu phần III, hy vọng bạn sẽ dành ra chút thời gian click vào đường link mà tôi đã cung cấp để tìm hiểu xem tác dụng của các module tôi đề cập phía trên.

Và tốt nhất là bạn đứng tắt nó. Bạn sẽ còn phải ngụp lặn trong đó khá nhiều lần. Hãy nhìn vào từng task, đọc hiểu chúng đến từng parameter một và sau đó viết lại theo mẫu hay thậm chí theo ý muốn của bạn.

Giờ chúng ta đã biết quy trình, có các module liên quan. Việc còn lại duy nhất bây giờ là biến những mảnh ghép này thành một bức tranh hoàn chỉnh.

3.1. Khai báo

--- - hosts: centos7   remote_user: root 

3.2. Cài đặt LAMP

  tasks:   - name: Install LAMP     yum:       name: '{{item}}'       state: present     with_items:     - httpd     - mariadb-server     - mariadb     - php     - php-mysql     - php-fpm 

Cài đặt package cần thiết của LAMP

3.3. Đảm bảo các service cần thiết được bật và các port được thông.

  - name: Ensure service enabled and started     service:       name: '{{item}}'       state: started       enabled: True     with_items:     - mariadb     - httpd   - name: Ensure HTTP and HTTPS can pass the firewall     firewalld:       service: '{{item}}'       state: enabled       permanent: True       immediate: True     become: True     with_items:     - http     - https 

Khởi chạy các service mariadb, httpd. Đồng thời cho phép các gói tin http và https không bị chặn bởi firewall.

NOTE: Tìm hiểu module firewalld và hãy thử viết task “Ensure HTTP and HTTPS can pass the firewall” theo một cách khác nhé.

3.4. Tải, giải nén WordPress

  - name: Install php-gd,rsync     yum:       name: '{{item}}'       state: present     with_items:     - php-gd     - rsync   - name: Restart httpd     service:       name: httpd       state: restarted   - name: Down wordpress     get_url:       url: http://wordpress.org/wordpress-5.3.2.tar.gz       dest: /root   - name: extract wordpress     unarchive:       src: /root/wordpress-5.3.2.tar.gz       dest: /root       remote_src: yes   - name: rsync wordpress     shell: rsync -avP /root/wordpress/ /var/www/html/   - name: Create folder uploads     shell: mkdir /var/www/html/wp-content/uploads   - name: Set user:group     shell: chown -R apache:apache /var/www/html/* 

Tiến hành tải, giải nén WordPress và sao chép nội dung sang /var/www/html/

3.5. Tạo cơ sở dữ liệu, người dùng cho WordPress

  - name: Install MySQL-python     yum:       name: MySQL-python       state: present   - name: Create database wordpress     mysql_db:       name: wordpress       state: present   - name: Create user wordpressuser     mysql_user:       name: wordpressuser       host: localhost       password: wordpresspassword       priv: 'wordpress.*:ALL'       state: present    - name: Backup file config wp     shell: cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php   - name: Config db name     replace:       path: /var/www/html/wp-config.php       regexp: 'database_name_here'       replace: 'wordpress'   - name: Config username     replace:       path: /var/www/html/wp-config.php       regexp: 'username_here'       replace: 'wordpressuser'   - name: Config password     replace:       path: /var/www/html/wp-config.php       regexp: 'password_here'       replace: 'wordpresspassword'  

Ở đây chúng ta thực hiện tạo:

database: wordpress username: wordpressuser password: wordpresspassword 

Sau đó tiến hành sửa file config: wp-config.php của WordPress theo các thông tin vừa tạo phía trên.

NOTE: Tôi đặc biệt lưu ý bạn cần phải cài đặt MySQL-python. Nếu không có nó, các module liên quan đến các thao tác với database phía dưới sẽ không thực hiện được.

3.6. Update version PHP

  - name: Config version PHP     yum:       name: '{{item}}'       state: present     with_items:     - epel-release     - yum-utils     - http://rpms.remirepo.net/enterprise/remi-release-7.rpm   - name: Config version PHP     shell: yum-config-manager --enable remi-php72   - name: Config version PHP     yum:       name: '{{item}}'       state: present     with_items:     - php     - php-common     - php-opcache     - php-mcrypt     - php-cli     - php-gd     - php-curl     - php-mysqlnd   - name: Restart Apache     service:       name: httpd       state: restarted 

 Đây chính là lỗi khi ta không thực hiện Update version của PHP

IV. Chạy Playbook

Việc còn lại duy nhất của chúng ta là ghép các phần phía trên lại thành 1 file yml hoàn chỉnh và chạy nó.

--- - hosts: centos7   remote_user: root   tasks:   - name: Install LAMP     yum:       name: '{{item}}'       state: present     with_items:     - httpd     - mariadb-server     - mariadb     - php     - php-mysql     - php-fpm    - name: Ensure service enabled and started     service:       name: '{{item}}'       state: started       enabled: True     with_items:     - mariadb     - httpd   - name: Ensure HTTP and HTTPS can pass the firewall     firewalld:       service: '{{item}}'       state: enabled       permanent: True       immediate: True     become: True     with_items:     - http     - https    - name: Install php-gd,rsync     yum:       name: '{{item}}'       state: present     with_items:     - php-gd     - rsync   - name: Restart httpd     service:       name: httpd       state: restarted   - name: Down wordpress     get_url:       url: http://wordpress.org/wordpress-5.3.2.tar.gz       dest: /root   - name: extract wordpress     unarchive:       src: /root/wordpress-5.3.2.tar.gz       dest: /root       remote_src: yes   - name: rsync wordpress     shell: rsync -avP /root/wordpress/ /var/www/html/   - name: Create folder uploads     shell: mkdir /var/www/html/wp-content/uploads   - name: Set user:group     shell: chown -R apache:apache /var/www/html/*    - name: Install MySQL-python     yum:       name: MySQL-python       state: present   - name: Create database wordpress     mysql_db:       name: wordpress       state: present   - name: Create user wordpressuser     mysql_user:       name: wordpressuser       host: localhost       password: wordpresspassword       priv: 'wordpress.*:ALL'       state: present    - name: Backup file config wp     shell: cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php   - name: Config db name     replace:       path: /var/www/html/wp-config.php       regexp: 'database_name_here'       replace: 'wordpress'   - name: Config username     replace:       path: /var/www/html/wp-config.php       regexp: 'username_here'       replace: 'wordpressuser'   - name: Config password     replace:       path: /var/www/html/wp-config.php       regexp: 'password_here'       replace: 'wordpresspassword'    - name: Config version PHP     yum:       name: '{{item}}'       state: present     with_items:     - epel-release     - yum-utils     - http://rpms.remirepo.net/enterprise/remi-release-7.rpm   - name: Config version PHP     shell: yum-config-manager --enable remi-php72   - name: Config version PHP     yum:       name: '{{item}}'       state: present     with_items:     - php     - php-common     - php-opcache     - php-mcrypt     - php-cli     - php-gd     - php-curl     - php-mysqlnd   - name: Restart Apache     service:       name: httpd       state: restarted

Lưu file với tên: playbook-wordpress.yml

Sau đó, chạy playbook và chờ khoảng 10 phút.

ansible-playbook -i /etc/ansible/hosts playbook-wordpress.yml  

KẾT QUẢ

V. Tổng kết

Vừa rồi tôi đã cùng bạn viết một playbook nhằm mục đích tự động hóa việc cài đặt WordPress trên môi trường CentOS 7.

Bạn cũng hoàn toàn có thể dựa vào những gợi ý của tôi, viết playbook của mình theo các cách khác, sử dụng các module khác.

Chúc các bạn thành công!!!!

ONET IDC thành lập vào năm 2012, là công ty chuyên nghiệp tại Việt Nam trong lĩnh vực cung cấp dịch vụ Hosting, VPS, máy chủ vật lý, dịch vụ Firewall Anti DDoS, SSL… Với 10 năm xây dựng và phát triển, ứng dụng nhiều công nghệ hiện đại, ONET IDC đã giúp hàng ngàn khách hàng tin tưởng lựa chọn, mang lại sự ổn định tuyệt đối cho website của khách hàng để thúc đẩy việc kinh doanh đạt được hiệu quả và thành công.
Bài viết liên quan

Hướng dẫn cài đặt IP static ubuntu 20.04

Phiên bản Ubuntu 20.04 đã chính thức ra mắt. Và ở bài viết này mình sẽ hướng dẫn các bạn làm...
30/12/2020

[Netbox] [Phần 5] Hướng dẫn khai báo IPAM trên Netbox

IPAM là viết tắt của IP Address Management, được sử dụng để quản lý các vlan và địa chỉ IP....
30/12/2020

CLI #3: Giới thiệu lệnh chattr để bảo vệ sự toàn vẹn của file

Đối với Linux, thông thường chúng ta sử dụng phân quyền bằng lệnh chmod để bảo vệ tập tin....
30/12/2020
Bài Viết

Bài Viết Mới Cập Nhật

mua Proxy riêng ở đâu, và nó đem lại lợi ích gì cho người sử dụng
22/11/2022

Hướng dẫn sử dụng Proxy Helper Fakeip khi thuê proxy
21/11/2022

PROXY NUÔI TÀI KHOẢN FACEBOOK – KINH NGHIỆM FAKE IP – THUÊ PROXY GIÁ RẺ
14/11/2022

Mua Proxy Nuôi Zalo Giá Rẻ Tại Onet.com.vn
14/11/2022

BẢNG GIÁ MUA PROXY VIỆT NAM và PROXY US Onet.com.vn
14/11/2022