[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 Pritunl VPN

Pritunl là phần mềm mã nguồn mở được sử dụng để ảo hóa VPN server trên hạ tầng các trung...
30/12/2020

Hướng dẫn cài đặt và sử dụng cơ bản BigBlueButton

BigBlueButton thường được viết tắt là BBB một mã nguồn mở chạy trên web phục vụ cho hội nghị...
30/12/2020

CentOS Delete Users

Linux is, by default, designed in such a manner that it allows more than one user in a single system in a very secure manner....
29/12/2020