Thứ năm, 25/06/2015 | 00:00 GMT+7

Cách tự động hóa cài đặt WordPress trên Ubuntu 14.04 bằng Ansible

Ansible là một cách đơn giản, không cần tác nhân để tự động hóa cơ sở hạ tầng của bạn. Nếu bạn thấy mình triển khai WordPress nhiều lần, Ansible có thể giúp bạn tiết kiệm rất nhiều thời gian.

Với một vài dòng YAML (một ngôn ngữ đánh dấu đơn giản), ta sẽ tự động hóa quá trình cài đặt WordPress thông thường tẻ nhạt trên server Ubuntu 14.04 mới. Ta sẽ cài đặt WordPress ít nhiều theo quy trình được nêu tronghướng dẫn này , nhưng tự động.

Ta sẽ sử dụng hai server : Một server xây dựng chạy Ansible và một server đích mà ta sẽ cài đặt WordPress bằng Ansible.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần phải cài đặt các bước sau:

  • Một server xây dựng chạy Ubuntu 14.04. Ta sẽ cài đặt Ansible trên server này (trong hướng dẫn này được gọi là server xây dựng ). Ta sẽ đăng nhập vào server này và tất cả các file và lệnh cho hướng dẫn này sẽ được chạy trên server này
  • Server đích đang chạy Ubuntu 14.04. Ta sẽ cài đặt WordPress (thông qua Ansible) trên server này (trong hướng dẫn này được gọi là server wordpress )
  • User không phải root Sudo được cấu hình cho cả hai server
  • Thêm SSH key của user sudo server xây dựng của bạn vào các khóa của user sudo của server wordpress-server của bạn. Bạn có thể cài đặt điều này theo hướng dẫn này . Bạn nên chạy hướng dẫn từ server xây dựng của bạn và tải khóa lên server wordpress của bạn

(Tùy chọn) Truy cập sudo không cần password

Sử dụng quyền truy cập sudo không password trên server wordpress của bạn sẽ nhanh hơn nhưng kém an toàn hơn .

Để cung cấp cho user sudo của ta trên server wordpress quyền này, ta cần chỉnh sửa file sudoers. visudo để chỉnh sửa file sudoers:

  • visudo

Thêm dòng này vào cuối:

sammy ALL=(ALL) NOPASSWD: ALL 

Đây phải là dòng cuối cùng trong file . Điều quan trọng là đây là dòng cuối cùng, nếu không nó sẽ bị overrides .

NB: Luôn luôn chỉnh sửa file sudoers bằng lệnh visudo . Thao tác này sẽ xác minh các thay đổi trước khi lưu file - điều này có thể giúp bạn tránh việc vô tình khóa mình hoàn toàn khỏi máy.

Khi bạn đã thực hiện xong việc này, bạn có thể thực thi lệnh sau trên server wordpress mà không cần cung cấp password :

  • sudo echo "Hello"

Bây giờ, trong suốt hướng dẫn này, bạn có thể chạy các ansible-playbook mà không có cờ -K , vì vậy bạn không phải nhập password sudo theo cách thủ công.

  • ansible-playbook playbook.yml -i hosts -u sammy

Bước 1 - Cài đặt Ansible

Trong phần này, ta sẽ cài đặt Ansible trên server xây dựng của bạn.

SSH vào server xây dựng của bạn và chạy lệnh này để cài đặt Ansible:

  • sudo apt-get install ansible -y

Bạn có thể đảm bảo Ansible đã được cài đặt bằng lệnh:

  • ansible --version

Bạn sẽ thấy kết quả như sau:

Output
ansible 1.5.4

Bước 2 - Cài đặt cấu trúc file

Bây giờ ta đã cài đặt Ansible, hãy chuẩn bị cấu trúc file cho sách phát Ansible của ta .

Tạo một folder cho playbook của ta .

  • cd ~
  • mkdir wordpress-ansible && cd wordpress-ansible

cd vào folder này và tạo hai file : một file có tên playbook.yml (đây là nơi ta sẽ viết các lệnh để cài đặt WordPress) và một file khác có tên là hosts (điều này cho Ansible biết server nào sẽ chạy các lệnh):

  • touch playbook.yml
  • touch hosts

Cách tốt nhất là chia các vở kịch của ta thành các role . Bạn có thể coi các role như các module có thể tái sử dụng. Đối với dự án này, ta sẽ tạo bốn role :

  • người phục vụ
  • php
  • mysql
  • wordpress

Từ folder root của dự án ( ~/wordpress-ansible ), tạo một folder có tên là rolescd vào đó:

  • mkdir roles && cd roles

Ta có thể khởi động các role của bạn bằng một công cụ ansible-galaxy được gọi là ansible-galaxy . Đối với mỗi role mà ta muốn tạo, ta sẽ chạy ansible-galaxy init :

  • ansible-galaxy init server
  • ansible-galaxy init php
  • ansible-galaxy init mysql
  • ansible-galaxy init wordpress

Bạn sẽ nhận thấy rằng điều này tạo ra toàn bộ cấu trúc file cho mỗi role của ta . Điều này phù hợp với thực tiễn tốt nhất của Ansible. Đối với hầu hết các phần, ta sẽ quan tâm đến các tasks/main.yml file tasks/main.yml của mỗi role .

Đến đây, ta sẽ có cấu trúc file sau:

[.] |_ playbook.yml |_ hosts |_ [roles]       |_ [server]             |_ ...       |_ [php]             |_ ...       |_ [mysql]             |_ ...       |_ [wordpress]             |_ ...                                     

Bước 3 - Viết Playbook

Trong phần này, ta sẽ viết các lệnh để cài đặt WordPress trên server từ xa của ta .

Khoảng không quảng cáo (tệp server )

Khoảng không quảng cáo Ansible thông báo cho Ansible về những server mà ta có mà ta muốn cài đặt WordPress. Ta có thể chạy sách phát của bạn cho các server hoặc group server được xác định trong file khoảng không quảng cáo của ta ( hosts ). Hàng tồn kho của ta rất đơn giản.

Chỉnh sửa hosts :

  • nano ~/wordpress-ansible/hosts

Thêm dòng cho [wordpress] và bên dưới dòng đó là địa chỉ IP của server wordpress của bạn:

server
[wordpress] wordpress_server_ip 

Bạn có thể đặt một số IP khác nhau trong group [wordpress] . Điều này sẽ làm cho các lệnh được chạy trên tất cả các server được liệt kê ở đây, miễn là bạn có quyền truy cập được cài đặt trên tất cả các server . Điều này sẽ cho phép bạn cài đặt WordPress trên một số server khác nhau cùng một lúc.

Playbook

Ta có thể coi playbook là định nghĩa của ứng dụng WordPress của ta . Playbook của ta sẽ kết hợp các role mà ta đã tạo để cấu hình một ứng dụng hữu ích (trong trường hợp này là trang WordPress).

Chỉnh sửa file sách vở:

  • nano ~/wordpress-ansible/playbook.yml

Thêm các nội dung này, cho Ansible biết server nào sẽ chạy các role trên (các hosts wordpress trong file hosts ) và các role nào sẽ chạy:

playbook.yml
- hosts: wordpress    roles:     - server     - php     - mysql     - wordpress 

Di chuyển đến folder sách vở của bạn:

  • cd ~/wordpress-ansible/

Hãy đảm bảo kết nối cơ bản của ta từ server xây dựng đến server wordpress hoạt động bằng cách chạy playbook. Nó sẽ không làm bất cứ điều gì được nêu ra; nó sẽ chỉ kiểm tra kết nối:

  • ansible-playbook playbook.yml -i hosts -u sammy -K

Nhập password sudo cho user sudo của bạn trên server wordpress khi được yêu cầu .

Bạn sẽ thấy kết quả như sau:

Output
ansible-playbook playbook.yml -i hosts -u sammy -K PLAY [wordpress] ************************************************************** GATHERING FACTS *************************************************************** ok: [188.166.68.134] PLAY RECAP ******************************************************************** 188.166.68.134 : ok=1 changed=0 unreachable=0 failed=0

Điều này cho thấy rằng ta đã có thể kết nối với server . Tuy nhiên, ta chưa xác định bất kỳ lượt phát nào, vì vậy không có gì được thực thi trên server wordpress của ta . Hãy khắc phục điều đó bằng cách điền vào các chi tiết trong bốn role của ta .

Nếu điều này không thành công, hãy kiểm tra kỹ xem bạn có thể SSH từ server xây dựng đến server wordpress bằng SSH key hay không.

Bước 3 - Tạo role

Người phục vụ

Những điều đầu tiên đầu tiên; hãy cài đặt server của ta . Đối với điều này, ta sẽ chỉnh sửa role server .

Role server sẽ cài đặt tất cả phần mềm ta cần trên server đích. Chỉnh sửa file này:

  • nano roles/server/tasks/main.yml`

Thêm các nội dung sau; đảm bảo chỉ có một dòng có --- (theo mặc định phải có một dòng ở đó):

role / server / task / main.yml
--- - name: Update apt cache   apt: update_cache=yes cache_valid_time=3600   sudo: yes  - name: Install required software   apt: name={{ item }} state=present   sudo: yes   with_items:     - apache2     - mysql-server     - php5-mysql     - php5     - libapache2-mod-php5     - php5-mcrypt     - python-mysqldb 

Điều này thực hiện như sau:

  • Cập nhật apt-cache ( apt-get update )
  • apt-get install Apache, MySQL, PHP và phần mềm liên quan

Nếu bạn quan tâm đến chi tiết về những gì ta đang cài đặt, bạn có thể xem hướng dẫn về cách cài đặt thủ công LAMP trên Ubuntu 14.04 .

Bây giờ ta có thể chạy playbook của bạn như sau:

  • ansible-playbook playbook.yml -i hosts -u sammy -K

Bạn sẽ thấy kết quả như sau:

Output
ansible-playbook playbook.yml -i hosts -u sammy -K PLAY [wordpress] ************************************************************** GATHERING FACTS *************************************************************** ok: [188.166.68.134] TASK: [server | Update apt cache] ********************************************* ok: [188.166.68.134] TASK: [server | Install required software] ************************************ changed: [188.166.68.134] => (item=apache2,mysql-server,php5-mysql,php5,libapache2-mod-php5,php5-mcrypt,python-mysqldb) PLAY RECAP ******************************************************************** 188.166.68.134 : ok=3 changed=1 unreachable=0 failed=0

Sau khi chạy, bạn có thể truy cập trang Apache mặc định tại http:// wordpress_server_ip / . Tuyệt vời. Apache hiện đã được cài đặt và chạy trên server wordpress .

Nếu bản dựng của bạn bị treo vô thời hạn tại thời điểm TASK: [server | Update apt cache] , điều này có thể chỉ ra sự thiếu quyền trên server đích. Đảm bảo quyền truy cập sudo được cấu hình đúng cách trên server wordpress .

PHP

Hãy sắp xếp các yêu cầu PHP của ta . Ta sẽ làm điều này trong role PHP. Chỉnh sửa file nhiệm vụ chính cho PHP:

  • nano roles/php/tasks/main.yml

Thêm phần sau ( , dòng --- đã ở đó):

role / php / task / main.yml
--- - name: Install php extensions   apt: name={{ item }} state=present   sudo: yes   with_items:     - php5-gd      - libssh2-php 

Thao tác này sẽ cài đặt các phần mở rộng PHP cần thiết.

MySQL

Ta cũng cần cài đặt database MySQL cho trang WordPress của bạn . Ta sẽ làm điều này trong role mysql .

Ta cần một vài biến cho biến này. Đối với một role , bạn có thể chỉ định các giá trị mặc định cho bất kỳ biến nào trong file defaults/main.yml .

  • nano roles/mysql/defaults/main.yml

Thêm tên database , tên user database và password database (mà bạn muốn tạo), theo thứ tự đó. Đảm bảo rằng bạn chọn một wp_db_password an toàn.

role / mysql / defaults / main.yml
--- wp_mysql_db: wordpress wp_mysql_user: wordpress wp_mysql_password: wp_db_password 

Thêm các nhiệm vụ để tạo database của ta và một user để truy cập nó.

  • nano roles/mysql/tasks/main.yml

Thêm các nội dung sau:

role / mysql / task / main.yml
--- - name: Create mysql database   mysql_db: name={{ wp_mysql_db }} state=present  - name: Create mysql user   mysql_user:      name={{ wp_mysql_user }}      password={{ wp_mysql_password }}      priv=*.*:ALL 

Role này thực hiện như sau:

  • Tạo database MySQL
  • Tạo user MySQL
  • Cấp cho user đó quyền truy cập vào database của ta

Các biến được lấy tự động từ file trước đó của ta , vì vậy bạn không phải thay đổi bất kỳ điều gì ở đây.

Bạn có thể quan tâm đến việc mã hóa password của bạn . Ansible cung cấp ansible-vault như một tiện ích cho việc này, nhưng thảo luận đầy đủ về ansible-vault nằm ngoài phạm vi của hướng dẫn này.

WordPress

Và bây giờ, khoảnh khắc mà tất cả ta đang chờ đợi… WordPress!

Với các yêu cầu server được cài đặt, ta có thể cài đặt WordPress. Ta sẽ chỉnh sửa role của wordpress .

Ta đang thêm một số tác vụ khác nhau vào file roles/wordpress/tasks/main.yml , vì vậy hãy mở nó cho phần này.

  • nano roles/wordpress/tasks/main.yml

Trước tiên, ta cần tải WordPress xuống /tmp (các bạn có ý thức bảo mật sẽ nhận thấy rằng ta đã tắt xác thực certificate , điều này sẽ làm gián đoạn quá trình download ):

role / wordpress / task / main.yml
--- - name: Download WordPress  get_url:      url=https://wordpress.org/latest.tar.gz      dest=/tmp/wordpress.tar.gz     validate_certs=no      sudo: yes 

Sau khi download , ta extract file gzip vào /var/www , vị trí mà Apache sử dụng để lưu trữ nội dung web:

role / wordpress / task / main.yml
- name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no    sudo: yes 

Với các file được extract , hãy cập nhật root tài liệu trang web mặc định của Apache để trỏ đến trang web WordPress của ta :

role / wordpress / task / main.yml
- name: Update default Apache site   sudo: yes   lineinfile:      dest=/etc/apache2/sites-enabled/000-default.conf      regexp="(.)+DocumentRoot /var/www/html"     line="DocumentRoot /var/www/wordpress"   notify:     - restart apache   sudo: yes 

Thao tác này sẽ cập nhật DocumentRoot cho trang web mặc định của Apache để trỏ đến các file WordPress mà ta đã download tại /var/www/wordpress

Bạn sẽ nhận thấy ở đây rằng ta đã thêm một khối notify . Điều này được sử dụng khi bạn cần thực hiện các việc như khởi động lại dịch vụ sau khi tác vụ đã hoàn thành . notify người xử lý sẽ chỉ được thông báo nếu nhiệm vụ của ta được thay đổi .

Ta cần thêm trình xử lý để restart apache . Lưu những gì bạn có cho đến nay và mở roles/wordpress/handlers/main.yml để chỉnh sửa:

  • nano roles/wordpress/handlers/main.yml

Thêm các nội dung này:

role / wordpress / handlers / main.yml
--- - name: restart apache   service: name=apache2 state=restarted   sudo: yes       

Trình xử lý này sẽ được gọi khi một tác vụ chỉ định notify: restart apache bị thay đổi, khiến server khởi động lại Apache.

Cấu hình WordPress

Quay lại roles/wordpress/tasks/main.yml .

Cuối cùng, ta cần thực hiện một số cấu hình cho trang WordPress của bạn :

Đầu tiên, ta sao chép file cấu hình mẫu:

role / wordpress / task / main.yml
- name: Copy sample config file   command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php   sudo: yes 

Cập nhật một số hằng số trong file này để trùng với thông tin database của ta :

role / wordpress / task / main.yml
- name: Update WordPress config file   lineinfile:     dest=/var/www/wordpress/wp-config.php     regexp="{{ item.regexp }}"     line="{{ item.line }}"   with_items:     - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}             - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}             - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}   sudo: yes    

Tác vụ này sẽ tìm các dòng chứa: DB_NAME , DB_USERDB_PASSWORD trong file cấu hình của ta và thay thế chúng bằng các biến từ playbook của ta .

Sau khi hoàn thành các bước trên, role wordpress của ta sẽ chứa hai file bạn quan tâm.

Đây là file nhiệm vụ hoàn chỉnh cho WordPress:

role / wordpress / task / main.yml
--- - name: Download WordPress  get_url:      url=https://wordpress.org/latest.tar.gz      dest=/tmp/wordpress.tar.gz     validate_certs=no  - name: Extract WordPress  unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/ copy=no   sudo: yes  - name: Update default Apache site   sudo: yes   lineinfile:      dest=/etc/apache2/sites-enabled/000-default.conf      regexp="(.)+DocumentRoot /var/www/html"     line="DocumentRoot /var/www/wordpress"   notify:     - restart apache  - name: Copy sample config file   command: mv /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php creates=/var/www/wordpress/wp-config.php   sudo: yes  - name: Update WordPress config file   lineinfile:     dest=/var/www/wordpress/wp-config.php     regexp="{{ item.regexp }}"     line="{{ item.line }}"   with_items:     - {'regexp': "define\\('DB_NAME', '(.)+'\\);", 'line': "define('DB_NAME', '{{wp_mysql_db}}');"}             - {'regexp': "define\\('DB_USER', '(.)+'\\);", 'line': "define('DB_USER', '{{wp_mysql_user}}');"}             - {'regexp': "define\\('DB_PASSWORD', '(.)+'\\);", 'line': "define('DB_PASSWORD', '{{wp_mysql_password}}');"}   sudo: yes 

Đây là file để khởi động lại Apache (lẽ ra bạn phải tạo):

role / wordpress / handlers / main.yml
--- - name: restart apache   service: name=apache2 state=restarted   sudo: yes 

Đã được thực hiện! Chạy playbook lần cuối để cài đặt và cấu hình WordPress:

  • ansible-playbook playbook.yml -i hosts -u sammy -K

Bạn có thể xem trực tuyến trang web WordPress của bạn tại: http://your_server_ip .

Mẫu  cài đặt  WordPress

Bạn có thể hoàn thành cài đặt trang web WordPress thủ công từ đây.

Kết luận

Xin chúc mừng! Như vậy, bạn có thể cài đặt một trang WordPress trên bất kỳ server Ubuntu 14.04 nào bằng một lệnh duy nhất:

  • ansible-playbook playbook.yml -i hosts -u sammy -K

Tất cả những gì bạn phải làm là thêm địa chỉ IP của server mục tiêu vào file hosts của bạn và đảm bảo các quyền của bạn được đặt chính xác.

Bước tiếp theo

Đây là phần giới thiệu rất nhanh để giúp bạn bắt đầu với Ansible và WordPress. Bạn có thể quan tâm đến những cải tiến sau:

  • Khám phá Thiên hà Ansible và tìm hiểu cách bạn có thể tổ chức các role của riêng mình trên Thiên hà
  • Tự động hóa quá trình cài đặt để không yêu cầu cấu hình thủ công trang web WordPress của bạn

Tags:

Các tin liên quan

Cách cài đặt Công cụ giám sát Munin trên Ubuntu 14.04
2015-06-20
Cách cài đặt và cấu hình mod_deflate trên Ubuntu 14.04
2015-06-17
Cách cài đặt MongoDB trên Ubuntu 14.04
2015-06-15
Cách cài đặt và sử dụng ArangoDB trên Ubuntu 14.04
2015-06-12
Cách cài đặt Lita Chat Bot cho IRC trên Ubuntu 14.04
2015-06-10
Cách cài đặt và cấu hình Ansible trên Ubuntu 14.04
2015-06-05
Triển khai ứng dụng Rails trên Ubuntu 14.04 với Capistrano, Nginx và Puma
2015-06-03
Cách xây dựng các SPA (Ứng dụng một trang) bằng NodeJS, SailsJS và DustJS trong Ubuntu 14.04
2015-05-27
Cách thiết lập môi trường puppet masterless trên Ubuntu 14.04
2015-04-29
Cách backup server Ubuntu 14.04 bằng Bacula
2015-04-17