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:
Outputansible 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à roles
và cd
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:
[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:
- 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:
Outputansible-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 ở đó):
--- - 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:
Outputansible-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 ---
đã ở đó):
--- - 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.
--- 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:
--- - 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 ):
--- - 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:
- 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 :
- 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:
--- - 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:
- 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 :
- 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_USER
và DB_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:
--- - 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):
--- - 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
.
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
Các tin liên quan
Cách cài đặt Công cụ giám sát Munin trên Ubuntu 14.042015-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