Thứ hai, 13/04/2015 | 00:00 GMT+7

Tự động hóa việc triển khai một trang web WordPress có thể mở rộng

Trong hướng dẫn này, ta sẽ tạo và triển khai version WordPress có thể mở rộng bao gồm server database MySQL, hệ thống file phân tán GlusterFS, web server Nginx và bộ cân bằng tải Nginx. Bằng cách sử dụng dữ liệu user siêu dữ liệu Server , ta sẽ tự động hóa việc triển khai trang web của bạn . Cuối cùng, ta sẽ cung cấp một tập lệnh Ruby sẽ tự động hóa toàn bộ quá trình này và dễ dàng tạo các trang Wordpress có thể mở rộng. Thông qua hướng dẫn này, bạn sẽ tìm hiểu về sức mạnh và tính linh hoạt của dữ liệu user và metadata Server trong việc triển khai dịch vụ trên DigitalOcean.

Bước một - Lập kế hoạch triển khai của ta

Việc triển khai mà ta tạo trong hướng dẫn này sẽ bao gồm một server database MySQL duy nhất, nhiều server GlusterFS trong một cụm, nhiều web server Nginx và một bộ cân bằng tải Nginx.

Triển khai WordPress

Trước khi bắt đầu, ta nên biết:

  • Ta sẽ sử dụng Server kích thước nào cho server MySQL của bạn
  • Ta sẽ tạo bao nhiêu nút GlusterFS
  • Kích thước các node GlusterFS của ta sẽ là bao nhiêu
  • Ta cần bao nhiêu nút web server
  • Kích thước server ta sẽ sử dụng cho web server của ta
  • Ta sẽ sử dụng Server kích thước nào cho bộ cân bằng tải của bạn
  • Tên domain ta sẽ sử dụng cho trang web mới của bạn

Ta có thể thêm các node bổ sung hoặc mở rộng quy mô các node mà ta đã tạo nếu sau này ta cần. Khi ta đã quyết định các chi tiết này, ta có thể bắt đầu triển khai trang web của bạn .

Bước hai - Triển khai MySQL

Ta sẽ bắt đầu bằng cách triển khai server MySQL của ta . Để thực hiện việc này, ta sẽ tạo một server Ubuntu 14.04 x64 mặc định bằng cách sử dụng dữ liệu user sau.

#!/bin/bash export DEBIAN_FRONTEND=noninteractive; export PUBLIC_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address) export PRIVATE_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address) apt-get update; apt-get -y install mysql-server; mysqladmin -u root create wordpress; mysqladmin -u root password "mysql_password"; sed -i.bak "s/127.0.0.1/$PRIVATE_IP/g" /etc/mysql/my.cnf; service mysql restart; mysql -uroot -pmysql_password -e "CREATE USER 'wordpress'@'%' IDENTIFIED BY 'mysql_password'"; mysql -uroot -pmysql_password -e "GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%'"; 

Tập lệnh dữ liệu user này sẽ thực hiện các chức năng sau trên Server mới của ta :

Đầu tiên, ta xuất một biến cho apt-get biết rằng ta đang chạy ở chế độ không tương tác để ngăn nó nhắc nhập bất kỳ đầu vào nào khi cài đặt các gói.

export DEBIAN_FRONTEND=noninteractive; 

Tiếp theo, ta sử dụng metadata Server để lấy địa chỉ IP công khai và riêng tư của Server và gán chúng cho các biến:

export PUBLIC_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/public/0/ipv4/address) export PRIVATE_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address) 
Note: Server Meta-Data is not available in NYC1, NYC2, and AMS1 at this time. 

Sau đó, ta sử dụng apt để cài đặt server MySQL.

apt-get update; apt-get -y install mysql-server; 

Bây giờ ta cần tạo một database mới có tên là wordpress .

mysqladmin -u root create wordpress; 

Sau đó, ta đặt password cho user root MySQL của ta .

mysqladmin -u root password "mysql_password"; 

Bởi vì server MySQL của ta sẽ chấp nhận các truy vấn từ web server của ta , ta cần phải để nó lắng nghe trên địa chỉ IP riêng thay vì chỉ trên localhost . Để thực hiện việc này, ta sẽ sử dụng sed để cập nhật file cấu hình MySQL bằng cách thực hiện tìm và thay thế, sau đó khởi động lại dịch vụ.

sed -i.bak "s/127.0.0.1/$PRIVATE_IP/g" /etc/mysql/my.cnf; service mysql restart; 

Cuối cùng, ta sẽ tạo một user MySQL mới có tên là wordpress và cấp cho nó quyền truy cập vào database wordpress .

mysql -uroot -pmysql_password -e "CREATE USER 'wordpress'@'%' IDENTIFIED BY 'mysql_password'"; mysql -uroot -pmysql_password -e "GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'%'"; 

Bằng cách triển khai Server mới của ta với tập lệnh dữ liệu user này, ta sẽ có một server MySQL được cấu hình nghe trên địa chỉ IP riêng của nó và với database và user đã cấu hình của ta mà không cần đăng nhập qua SSH hoặc console .

Bước 3 - Triển khai GlusterFS

Trước khi triển khai cụm GlusterFS của bạn , ta cần quyết định số lượng nút ta sẽ triển khai. Có hai biến số sẽ đi vào quyết định này. Trước tiên, ta cần quyết định xem ta cần bao nhiêu không gian và sau đó ta cần quyết định một cài đặt bản sao để sử dụng. Cài đặt bản sao cho GlusterFS biết cần lưu trữ bao nhiêu bản sao của các file nào. Ví dụ: cài đặt bản sao là 2 sẽ nghĩa là mọi file đều được sao chép trên ít nhất 2 server . Điều này sẽ cắt giảm một nửa dung lượng có sẵn của ta vì ta đang giữ hai bản sao của mỗi file nhưng sẽ cung cấp khả năng dự phòng được cải thiện. Số lượng nút GlusterFS mà ta tạo phải là bội số của cài đặt bản sao của ta . Đối với một cụm có cài đặt bản sao là 2, ta cần tạo các node của bạn theo bội số của 2 (do đó, 2, 4, 6 hoặc 8 nút sẽ được chấp nhận).

Đối với ví dụ này, ta sẽ triển khai một cụm GlusterFS 4 nút bằng cách sử dụng cài đặt bản sao của 2.

Đối với 3 nút đầu tiên của ta , ta sẽ sử dụng tập lệnh dữ liệu user sau:

#!/bin/bash export DEBIAN_FRONTEND=noninteractive; apt-get update; apt-get install -y python-software-properties; add-apt-repository -y ppa:gluster/glusterfs-3.5; apt-get update; apt-get install -y glusterfs-server; 

, trước tiên ta đặt biến DEBIAN_FRONTEND để apt biết rằng ta đang chạy ở chế độ không tương tác:

export DEBIAN_FRONTEND=noninteractive; 

Sau đó, ta cập nhật database apt và cài đặt python-software-properties , cần thiết để thêm PPA cho GlusterFS.

apt-get update; apt-get install -y python-software-properties; 

Tiếp theo, ta sẽ thêm PPA GlusterFS để ta có thể lấy các gói gỡ lỗi của bạn .

add-apt-repository -y ppa:gluster/glusterfs-3.5; 

Sau đó, ta sẽ cập nhật lại database apt và cài đặt glusterfs-server.

apt-get install -y glusterfs-server; 

Đối với ba nút đầu tiên của ta , đây là tất cả những gì ta cần làm. Ghi lại các địa chỉ IP riêng được gán cho mỗi Server mới này vì ta cần chúng khi tạo nút GlusterFS cuối cùng và tạo dung lượng của ta .

Đối với nút cuối cùng của ta , ta sẽ sử dụng tập lệnh dữ liệu user sau:

#!/bin/bash export DEBIAN_FRONTEND=noninteractive; export PRIVATE_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address) apt-get update; apt-get install -y python-software-properties; add-apt-repository -y ppa:gluster/glusterfs-3.5; apt-get update; apt-get install -y glusterfs-server; sleep 30; gluster peer probe node1_private_ip; gluster peer probe node2_private_ip; gluster peer probe node3_private_ip; gluster volume create file_store replica 2 transport tcp node1_private_ip:/gluster node2_private_ip:/gluster node3_private_ip:/gluster $PRIVATE_IP:/gluster force; gluster volume start file_store; 
Note: If you do not want to enable replication you should not include the "replica" setting in your "volume create" command. 

Phần đầu tiên của tập lệnh dữ liệu user này khá giống với phần mà ta đã sử dụng trên các node GlusterFS khác, mặc dù ta đang chỉ định IP riêng của Server mới của bạn cho biến $ PRIVATE_IP. Tuy nhiên, sau khi glusterfs-server được cài đặt, ta thực hiện một số công việc bổ sung.

Đầu tiên, tập lệnh của ta sẽ đợi 30 giây để server glusterfs mới khởi động và có sẵn.

sleep 30 

Sau đó, ta thăm dò ba server GlusterFS mà ta đã tạo trước đó để thêm cả bốn vào một cụm.

gluster peer probe node1_private_ip; gluster peer probe node2_private_ip; gluster peer probe node3_private_ip; 

Tiếp theo, ta sẽ tạo ổ đĩa GlusterFS có tên là “tệp lưu trữ” với cài đặt bản sao là 2 và bao gồm tất cả bốn nút của ta . Vì ta sẽ không biết địa chỉ IP của nút mới nhất nên ta sẽ sử dụng biến $ PRIVATE IP cho nó.

gluster volume create file_store replica 2 transport tcp node1_private_ip:/gluster node2_private_ip:/gluster node3_private_ip:/gluster $PRIVATE_IP:/gluster force; 

Cuối cùng, ta sẽ bắt đầu tập mới để khách hàng có thể truy cập được:

gluster volume start file_store; 

Bây giờ ta có một hệ thống file phân tán, nơi ta có thể giữ các file WordPress của bạn có thể truy cập được vào tất cả các node web server của ta .

Bước 4 - Triển khai web server Nginx

Bây giờ ta đã có một server database và một hệ thống file phân tán, ta có thể triển khai các web server của bạn . Ta sẽ sử dụng tập lệnh dữ liệu user sau để triển khai nút web server Nginx đầu tiên của ta và cấu hình cài đặt WordPress của ta bên trong ổ đĩa GlusterFS của ta .

#!/bin/bash export DEBIAN_FRONTEND=noninteractive; export PRIVATE_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address) apt-get update; apt-get -y install nginx glusterfs-client php5-fpm php5-mysql; sed -i s/\;cgi\.fix_pathinfo\=1/cgi\.fix_pathinfo\=0/g /etc/php5/fpm/php.ini; mkdir /gluster; mount -t glusterfs gluter_node_private_ip:/file_store /gluster; echo "gluster_node_private_ip:/file_store /gluster glusterfs defaults,_netdev 0 0" >> /etc/fstab; mkdir /gluster/www; wget https://raw.githubusercontent.com/ryanpq/do-wpc/master/default -O /etc/nginx/sites-enabled/default; service nginx restart; # Get Wordpress Files wget https://wordpress.org/latest.tar.gz -O /root/wp.tar.gz; tar -zxf /root/wp.tar.gz -C /root/; cp -Rf /root/wordpress/* /gluster/www/.; cp /gluster/www/wp-config-sample.php /gluster/www/wp-config.php; sed -i "s/'DB_NAME', 'database_name_here'/'DB_NAME', 'wordpress'/g" /gluster/www/wp-config.php; sed -i "s/'DB_USER', 'username_here'/'DB_USER', 'wordpress'/g" /gluster/www/wp-config.php; sed -i "s/'DB_PASSWORD', 'password_here'/'DB_PASSWORD', 'mysql_password'/g" /gluster/www/wp-config.php; sed -i "s/'DB_HOST', 'localhost'/'DB_HOST', 'mysql_private_ip'/g" /gluster/www/wp-config.php; chown -Rf www-data:www-data /gluster/www; 

Tập lệnh này phức tạp hơn một chút so với những tập lệnh trước của ta , vì vậy hãy chia nhỏ nó từng bước.

Đầu tiên, ta sẽ đặt lại biến DEBIAN_FRONTEND như ta có trong các tập lệnh trước đó và điền biến $PRIVATE_IP của ta .

export DEBIAN_FRONTEND=noninteractive; export PRIVATE_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address) 

Tiếp theo, ta sẽ cập nhật database apt và cài đặt Nginx, ứng dụng client glusterfs và các thư viện php mà ta cần .

apt-get update; apt-get -y install nginx glusterfs-client php5-fpm php5-mysql; 

Sau đó, ta sẽ sử dụng chức năng tìm và thay thế của sed để cập nhật file php.ini của ta và đặt biến cgi.fixpathinfo thành 0.

sed -i s/\;cgi\.fix_pathinfo\=1/cgi\.fix_pathinfo\=0/g /etc/php5/fpm/php.ini; 

Bây giờ ta sẽ tạo một folder có tên /gluster trong folder root của ảnh đĩa và gắn dung lượng GlusterFS của ta vào đó. Sau đó, ta sẽ tạo một mục nhập fstab để ổ đĩa GlusterFS của ta được tự động mount khi Server khởi động.

mkdir /gluster; mount -t glusterfs gluter_node_private_ip:/file_store /gluster; echo "gluster_node_private_ip:/file_store /gluster glusterfs defaults,_netdev 0 0" >> /etc/fstab; 

Sau đó, ta sẽ tạo một folder có tên www trong file GlusterFS của ta . Thư mục này sẽ hoạt động như folder root của ta .

mkdir /gluster/www; 

Tiếp theo, ta sẽ kéo một file cấu hình Nginx mới từ một server từ xa. Tệp này sẽ đặt root web của ta thành /gluster/www và đảm bảo Nginx được cấu hình để sử dụng PHP. Bạn có thể xem file cấu hình này tại đây . Khi ta đã thay thế file cấu hình Nginx của bạn , ta sẽ khởi động lại dịch vụ để thay đổi này có hiệu lực.

wget https://raw.githubusercontent.com/ryanpq/do-wpc/master/default -O /etc/nginx/sites-enabled/default; service nginx restart; 

Bây giờ ta sẽ lấy một bản sao của version mới nhất của WordPress, extract nó và sao chép nội dung của nó vào web root mới của ta .

wget https://wordpress.org/latest.tar.gz -O /root/wp.tar.gz; tar -zxf /root/wp.tar.gz -C /root/; cp -Rf /root/wordpress/* /gluster/www/.; 

Tiếp theo, ta sẽ sao chép file cấu hình WordPress mẫu vào wp-config.php .

cp /gluster/www/wp-config-sample.php /gluster/www/wp-config.php; 

Và cập nhật các biến của nó để phù hợp với môi trường mới của ta , sử dụng hàm tìm và thay thế của sed .

sed -i "s/'DB_NAME', 'database_name_here'/'DB_NAME', 'wordpress'/g" /gluster/www/wp-config.php; sed -i "s/'DB_USER', 'username_here'/'DB_USER', 'wordpress'/g" /gluster/www/wp-config.php; sed -i "s/'DB_PASSWORD', 'password_here'/'DB_PASSWORD', 'mysql_password'/g" /gluster/www/wp-config.php; sed -i "s/'DB_HOST', 'localhost'/'DB_HOST', 'mysql_private_ip'/g" /gluster/www/wp-config.php; 

Và cuối cùng, ta sẽ đảm bảo các file trong root web của ta thuộc sở hữu của user www-data mà tiến trình Nginx của ta sẽ chạy.

chown -Rf www-data:www-data /gluster/www; 

Bây giờ ta đã cài đặt xong nút web server đầu tiên và sẵn sàng nhận yêu cầu.

Vì mỗi nút web server của ta chia sẻ cùng một dung lượng GlusterFS để lưu trữ, nên có ít bước hơn cho mỗi nút bổ sung mà ta tạo. Đối với các node bổ sung, ta sẽ sử dụng tập lệnh dữ liệu user sau:

#!/bin/bash export DEBIAN_FRONTEND=noninteractive; export PRIVATE_IP=$(curl -s http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address) apt-get update; apt-get -y install nginx glusterfs-client php5-fpm php5-mysql; sed -i s/\;cgi\.fix_pathinfo\=1/cgi\.fix_pathinfo\=0/g /etc/php5/fpm/php.ini; mkdir /gluster; mount -t glusterfs gluster_node_private_ip:/file_store /gluster; echo "gluster_node_private_ip:/file_store /gluster glusterfs defaults,_netdev 0 0" >> /etc/fstab; mkdir /gluster/www; wget https://raw.githubusercontent.com/ryanpq/do-wpc/master/default -O /etc/nginx/sites-enabled/default; service nginx restart; 

Đối với các node web bổ sung của ta , ta sẽ vẫn cài đặt các gói tương tự, gắn dung lượng GlusterFS và thay thế file cấu hình Nginx của ta nhưng ta sẽ không cần thực hiện bất kỳ cài đặt nào đối với version WordPress của bạn vì ta đã thực hiện điều này khi tạo nút đầu tiên.

Bước 5 - Triển khai bộ cân bằng tải của ta

Bước cuối cùng trong quá trình triển khai này là tạo bộ cân bằng tải của ta . Ta sẽ sử dụng một server Nginx khác cho mục đích này. Để cài đặt nút này, ta sẽ sử dụng tập lệnh dữ liệu user sau:

#!/bin/bash export DEBIAN_FRONTEND=noninteractive; apt-get update; apt-get -y install nginx; lbconf=" server {     listen 80 default_server;     listen [::]:80 default_server ipv6only=on;      root /usr/share/nginx/html;     index index.php index.html index.htm;      location / {       proxy_pass  http://backend;       include proxy_params;     }  }  upstream backend  {     ip_hash;     server web_node_1_private_ip     server web_node_2_private_ip } " echo $lbconf > /etc/nginx/sites-enabled/default; service nginx restart; 

Đối với tập lệnh dữ liệu user của trình cân bằng tải của ta , ta sẽ xây dựng cấu hình Nginx của bạn trực tiếp trong tập lệnh. Ta bắt đầu nhiều như ta đã làm với các Server khác của bạn bằng cách đảm bảo apt biết ta đang chạy ở chế độ không tương tác.

export DEBIAN_FRONTEND=noninteractive; 

Sau đó, ta sẽ cài đặt Nginx:

apt-get update; apt-get -y install nginx; 

Tiếp theo, ta sẽ tạo cấu hình Nginx mới của ta trong một biến có tên lbconf . Thêm mục nhập cho từng web server của ta trong phần backend ngược dòng .

lbconf=" server {     listen 80 default_server;     listen [::]:80 default_server ipv6only=on;      root /usr/share/nginx/html;     index index.php index.html index.htm;      location / {       proxy_pass  http://backend;       include proxy_params;     }  }  upstream backend  {     ip_hash;     server web_node_1_private_ip     server web_node_2_private_ip } " 

Sau đó, ta sẽ ghi biến lbconf vào file cấu hình Nginx của ta , thay thế nội dung hiện tại của nó.

echo $lbconf > /etc/nginx/sites-enabled/default; 

Và cuối cùng, ta sẽ khởi động lại Nginx để cấu hình này có hiệu lực.

service nginx restart; 

Bước 6 - Cài đặt DNS

Bây giờ, trước khi truy cập trang WordPress mới của bạn thông qua trình duyệt, ta nên cài đặt mục nhập DNS cho nó. Ta sẽ thực hiện việc này thông qua console .

Trong console DigitalOcean, nhấp vào DNS . Trong biểu mẫu Thêm domain , nhập domain của bạn và chọn Server cân bằng tải của bạn từ trình đơn thả xuống, sau đó nhấp vào Tạo domain .

Để sử dụng domain phụ www cho trang web của bạn , bạn cần tạo một bản ghi khác trong domain mới này.

Bấm Thêm Bản ghi và chọn loại bản ghi CNAME . Trong trường tên, hãy nhập www và trong trường tên server , hãy nhập @ . Điều này sẽ hướng các yêu cầu cho domain phụ www đến cùng một vị trí với domain chính của bạn ( server cân bằng tải của bạn).

Bước 7 - Cấu hình WordPress

Bây giờ ta đã chạy tất cả các Server và cấu hình domain của bạn , ta có thể truy cập trang web WordPress mới của bạn bằng cách truy cập domain mới được cấu hình của ta trong trình duyệt web.

 Cấu hình  Wordpress

Ta sẽ được yêu cầu ở đây để tạo account user và đặt tên cho trang web mới của ta . Khi ta đã hoàn tất việc triển khai của ta hoàn tất và ta có thể bắt đầu sử dụng trang web mới.

Bước 8 - Tự động hóa quy trình

Bây giờ ta có thể tạo triển khai WordPress của bạn mà không cần phải chuyển sang một server , ta có thể tiến thêm một bước nữa và tự động hóa quy trình này bằng cách sử dụng API DigitalOcean .

Một tập lệnh Ruby mẫu đã được tạo dựa trên hướng dẫn này sẽ nhắc user cung cấp các chi tiết liên quan và sau đó tự động triển khai một version WordPress có thể quét mới. Bạn có thể tìm thấy tập lệnh này trên GitHub .

Kết luận

Hiện ta đã triển khai WordPress có thể mở rộng nhưng ta có thể thực hiện các bước bổ sung đảm bảo trang web mới của ta an toàn và ổn định.


Tags:

Các tin liên quan