Xây dựng cho Sản xuất: Ứng dụng Web - Triển khai
Trong phần này của hướng dẫn, ta sẽ triển khai ứng dụng PHP mẫu, WordPress và DNS riêng:User của bạn sẽ truy cập ứng dụng của bạn qua HTTPS thông qua một domain , ví dụ: “ https://www.example.com ”, trỏ đến trình cân bằng tải. Bộ cân bằng tải sẽ hoạt động như một Reverse Proxy tới các server ứng dụng, server này sẽ kết nối với server database . DNS riêng sẽ cho phép ta sử dụng tên để chỉ địa chỉ mạng riêng của các server của ta , giúp dễ dàng quá trình cấu hình server của ta .
Ta sẽ cài đặt các thành phần mà ta vừa thảo luận trên sáu server , theo thứ tự sau:
- DNS riêng (ns1 và ns2)
- Server database (db1)
- Server ứng dụng (app1 và app2)
- Cân bằng tải (lb1)
Hãy bắt đầu với cài đặt DNS.
Server DNS riêng
Việc sử dụng tên cho địa chỉ giúp xác định server bạn đang làm việc và trở nên cần thiết cho việc duy trì cài đặt server lớn hơn, vì bạn có thể thay thế server bằng cách cập nhật bản ghi DNS của bạn (ở một nơi duy nhất) thay vì cập nhật vô số file cấu hình với Các địa chỉ IP. Trong quá trình cài đặt , ta sẽ cài đặt DNS của bạn để ta có thể tham chiếu các địa chỉ mạng riêng của server của bạn theo tên thay vì địa chỉ IP.
Ta sẽ tham chiếu đến địa chỉ mạng riêng của từng server theo tên server trong domain phụ “nyc3.example.com”. Ví dụ: địa chỉ mạng riêng của server database sẽ là “db1.nyc3.example.com”, phân giải thành địa chỉ IP riêng của nó. Lưu ý domain phụ mẫu gần như hoàn toàn tùy ý và thường được chọn dựa trên mục đích tổ chức hợp lý; trong trường hợp của ta , ta “nyc3” cho biết các server nằm trong trung tâm dữ liệu NYC3 và “example.com” là domain ứng dụng của ta .
Cài đặt điều này theo hướng dẫn này và thêm bản ghi DNS cho từng server trong cài đặt của bạn:
Sau khi hoàn thành hướng dẫn DNS, bạn sẽ có hai server BIND: ns1 và ns2 . Nếu bạn đã biết địa chỉ IP riêng của tất cả các server trong cài đặt của bạn , hãy thêm chúng vào DNS của bạn ngay bây giờ; nếu không, hãy thêm các bản ghi DNS thích hợp khi bạn tạo server của bạn .
Bây giờ ta đã sẵn sàng để cài đặt server database của bạn .
Cài đặt server database
Vì ta muốn cân bằng tải các server ứng dụng của bạn , tức là các server chạy Apache và PHP, ta cần tách database khỏi các server ứng dụng bằng cách cài đặt nó trên một server riêng biệt. Tách database khỏi ứng dụng là một bước cần thiết trước khi mở rộng quy mô theo chiều ngang cho nhiều loại ứng dụng, như được giải thích trong bài đăng trên blog này: Ứng dụng PHP mở rộng theo chiều ngang: Tổng quan thực tế .
Phần này bao gồm tất cả các bước cần thiết để cài đặt server database của ta , nhưng bạn có thể tìm hiểu thêm về cách cài đặt server database MySQL từ xa, tách rời cho ứng dụng PHP trong hướng dẫn này: Cách cài đặt Database MySQL Từ xa .
Cài đặt MySQL
Trên server database , db1 , cài đặt MySQL Server:
- sudo apt-get update
- sudo apt-get -y install mysql-server
Nhập password root MySQL mong muốn của bạn tại dấu nhắc .
Bây giờ chạy:
- sudo mysql_install_db
- sudo mysql_secure_installation
Bạn sẽ phải nhập password administrator MySQL mà bạn đã đặt trong các bước trên. Sau đó, nó sẽ hỏi bạn có muốn thay đổi password đó không. Gõ “N” để không nếu bạn hài lòng với password hiện tại của bạn . Trả lời phần còn lại của các câu hỏi với các giá trị mặc định.
Cấu hình MySQL để lắng nghe trên network interface riêng
Mở file cấu hình MySQL:
- sudo vi /etc/mysql/my.cnf
Tìm cài đặt bind-address
và thay đổi nó thành địa chỉ của địa chỉ mạng riêng của server database của bạn:
bind-address = db1.nyc3.example.com
Lưu và thoát.
Khởi động lại MySQL:
- sudo service mysql restart
Cài đặt database và user database
Bây giờ ta cần tạo database và user database mà các server ứng dụng sẽ sử dụng để kết nối.
Nhập console MySQL:
- mysql -u root -p
Nhập password root MySQL tại dấu nhắc .
Tại dấu nhắc MySQL, hãy tạo database cho ứng dụng của bạn:
- CREATE DATABASE app;
MySQL liên kết user của nó với các server mà họ nên kết nối. Trong trường hợp của ta , ta có hai server ứng dụng sẽ kết nối, vì vậy ta nên tạo một user cho mỗi server . Tạo user database , “ user ứng dụng” trong ví dụ của ta , có thể được kết nối với từ địa chỉ mạng riêng của từng server ứng dụng của bạn ( app1 và app2 ). Bạn nên sử dụng cùng một password cho mỗi user :
- CREATE USER 'appuser'@'app1.nyc3.example.com' IDENTIFIED BY 'password';
- CREATE USER 'appuser'@'app2.nyc3.example.com' IDENTIFIED BY 'password';
Ta sẽ cấu hình các quyền cuối cùng của user database sau, nhưng hãy cấp cho người dùng toàn quyền kiểm soát đối với database ứng dụng :
- GRANT ALL PRIVILEGES ON app.* TO 'appuser'@'app1.nyc3.example.com';
- GRANT ALL PRIVILEGES ON app.* TO 'appuser'@'app2.nyc3.example.com';
- FLUSH PRIVILEGES;
Các quyền thoải mái này đảm bảo trình cài đặt của ứng dụng sẽ có thể cài đặt ứng dụng trong database . Nếu bạn có nhiều hơn hai server ứng dụng, bạn nên tạo tất cả user database cần thiết ngay bây giờ.
Thoát khỏi dấu nhắc MySQL ngay bây giờ:
- exit
Cài đặt server database đã hoàn tất. Hãy cài đặt các server ứng dụng.
Cài đặt server ứng dụng
Server ứng dụng sẽ chạy mã của ứng dụng của ta , mã này sẽ kết nối với server database . Ứng dụng mẫu của ta là WordPress, là một ứng dụng PHP được cung cấp thông qua một web server như Apache hoặc Nginx. Bởi vì ta muốn cân bằng tải các server ứng dụng, ta sẽ cài đặt hai server giống nhau.
Phần này bao gồm tất cả các bước cần thiết để cài đặt server ứng dụng của ta , nhưng chủ đề được đề cập chi tiết trong hướng dẫn sau, bắt đầu từ phần Cài đặt Server Web : Cách Cài đặt Database Từ xa .
Cài đặt Apache và PHP
Trên cả hai server ứng dụng, app1 và app2 , hãy cài đặt Apache và PHP:
- sudo apt-get update
- sudo apt-get -y install apache2 php5-mysql php5 libapache2-mod-php5 php5-mcrypt
Cấu hình Apache
Ta sẽ sử dụng HAProxy, trên server cân bằng tải, để xử lý việc chấm dứt SSL, vì vậy ta không muốn user của bạn truy cập trực tiếp vào server ứng dụng. Như vậy, ta sẽ liên kết Apache với địa chỉ mạng riêng của mỗi server .
Trên mỗi server ứng dụng, app1 và app2 , hãy mở file cấu hình các cổng Apache của bạn. Theo mặc định, đây là file ports.conf
:
- sudo vi /etc/apache2/ports.conf
Tìm dòng có nội dung Listen 80
và thêm địa chỉ IP riêng của bạn vào đó, tương tự như vậy (thay thế bằng địa chỉ IP thực của server của bạn):
Listen private_IP:80
Lưu và thoát. Điều này cấu hình Apache để chỉ lắng nghe trên network interface riêng, nghĩa là nó không thể được truy cập bằng địa chỉ IP công cộng hoặc tên server .
Khởi động lại Apache để các thay đổi có hiệu lực:
- sudo service apache2 restart
Apache hiện chỉ có thể truy cập thông qua địa chỉ mạng riêng của các server ứng dụng của bạn. Ta sẽ cấu hình bộ cân bằng tải để gửi yêu cầu của user tại đây, trong giây lát.
Download và cấu hình ứng dụng
Trong ví dụ của ta , ta đang sử dụng WordPress làm ứng dụng của bạn . Nếu bạn đang sử dụng một ứng dụng PHP khác, hãy download và thực hiện bất kỳ cấu hình nào có liên quan (ví dụ: thông tin kết nối database ), sau đó chuyển sang phần tiếp theo.
Trên server ứng dụng đầu tiên, app1 , download repository WordPress:
- cd ~
- wget http://wordpress.org/latest.tar.gz
Extract repository WordPress:
- tar xvf latest.tar.gz
Thay đổi folder đã extract :
- cd wordpress
WordPress cần một folder được tạo để tải lên, wp-content/uploads
. Hãy làm điều đó ngay bây giờ:
- mkdir wp-content/uploads
Ta sẽ sử dụng file cấu hình WordPress mẫu làm mẫu. Sao chép nó vào vị trí thích hợp:
- cp wp-config-sample.php wp-config.php
Bây giờ hãy mở file cấu hình để chỉnh sửa:
- vi wp-config.php
Cấu hình kết nối database WordPress bằng cách thay đổi thông tin được đánh dấu trong các dòng sau:
/** The name of the database for WordPress */ define('DB_NAME', 'app'); /** MySQL database username */ define('DB_USER', 'appuser'); /** MySQL database password */ define('DB_PASSWORD', 'password'); /** MySQL hostname */ define('DB_HOST', 'db1.nyc3.example..com');
Bởi vì ta sẽ sử dụng mã hóa TLS / SSL trên server cân bằng tải, ta phải thêm các dòng sau để WordPress sẽ biết rằng nó nằm sau Reverse Proxy đang sử dụng SSL:
define('FORCE_SSL_ADMIN', true); if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';
Bạn cũng cần cập nhật các khóa và muối, vì vậy bạn có thể vô hiệu hóa cookie khi bạn muốn. Ta sẽ không đề cập đến vấn đề này ở đây nhưng đảm bảo chúng giống hệt nhau trên tất cả các server ứng dụng của bạn.
Lưu và thoát.
WordPress hiện đã được cấu hình , nhưng các file của nó phải được sao chép vào vị trí thích hợp để được phần mềm web server của ta cung cấp.
Sao chép file ứng dụng vào root tài liệu
Bây giờ ta đã cấu hình ứng dụng của bạn , ta cần sao chép nó vào folder root của Apache, nơi nó có thể được phục vụ cho khách truy cập trang web của ta .
Vị trí mặc định của DocumentRoot của Apache là /var/www/html
, vì vậy ta sẽ sử dụng vị trí đó trong ví dụ của bạn .
Đầu tiên, xóa index.html
mặc định:
- sudo rm /var/www/html/index.html
Sau đó, sử dụng rsync để sao chép các file WordPress sang /var/www/html
và đặt www-data
( user mà Apache điều hành) làm chủ sở hữu:
- sudo rsync -avP ~/wordpress/ /var/www/html
- sudo chgrp -R www-data /var/www/html/*
Server ứng dụng đầu tiên của ta , app1, đã sẵn sàng. Ta sẽ cài đặt server ứng dụng khác.
Sao chép các file ứng dụng sang các server khác
Để giữ cho các file của ứng dụng của bạn nhất quán trên các server ứng dụng khác nhau, bạn nên cài đặt bản sao file của root tài liệu của web server của bạn. Trong trường hợp của WordPress, việc sử dụng giao diện web để tải lên file và cài đặt plugin sẽ lưu trữ file trên server cụ thể xử lý yêu cầu. Nếu các file này không được sao chép sang tất cả các server ứng dụng của bạn, một số user của bạn sẽ được cung cấp các trang có hình ảnh bị thiếu và plugin bị hỏng. Nếu ứng dụng PHP của bạn không phải là WordPress và không lưu trữ bất kỳ dữ liệu nào của nó (ví dụ: file đã tải lên hoặc plugin đã download ) trên server ứng dụng, bạn chỉ có thể sao chép thủ công file ứng dụng một lần. Nếu đúng như vậy, hãy sử dụng rsync để sao chép các file ứng dụng của bạn từ app1 sang app2 .
GlusterFS được dùng để tạo một dung lượng sao chép của các file cần thiết và nó được minh họa trong phần Đồng bộ hóa file ứng dụng web của hướng dẫn này: Cách sử dụng HAProxy làm bộ cân bằng tải cho Server ứng dụng WordPress . Làm theo hướng dẫn (bỏ qua phần Chỉnh sửa file server lưu trữ , vì DNS của ta sẽ xử lý việc đó) và cài đặt bản sao giữa app1 và app2 .
Khi bản sao của bạn được cài đặt đúng cách, cả hai server ứng dụng của bạn phải được cấu hình đúng cách. Hãy cài đặt bộ cân bằng tải của ta ngay bây giờ.
Cài đặt server cân bằng tải
Server cân bằng tải của ta sẽ chạy HAProxy, sẽ đóng role là trình cân bằng tải Reverse Proxy cho các server ứng dụng của ta . User của bạn sẽ truy cập ứng dụng của bạn thông qua server cân bằng tải qua URL chẳng hạn như https://www.example.com
.
Phần này bao gồm tất cả các bước cần thiết để cài đặt server cân bằng tải của ta , nhưng chủ đề này được đề cập chi tiết trong các hướng dẫn sau:
- Cách sử dụng HAProxy làm bộ cân bằng tải lớp 7 cho WordPress và Nginx trên Ubuntu 14.04
- Cách thực hiện chấm dứt SSL với HAProxy trên Ubuntu 14.04 :
Sao chép certificate SSL
Thực hiện các bước này trên server cân bằng tải, lb1 .
Trong folder chứa certificate SSL của bạn (một trong những yêu cầu từ phần 1), hãy kết hợp certificate , bất kỳ certificate CA trung gian nào và khóa certificate của bạn thành một file .pem
duy nhất. Ví dụ: (chứng chỉ của ta nằm trong /root/certs
:
- cd /root/certs
- cat www.example.com.crt CAintermediate.ca-bundle www.example.com.key > www.example.com.pem
Sau đó sao chép file pem vào /etc/ssl/private
:
- sudo cp www.example.com.pem /etc/ssl/private/
Tệp này sẽ được HAProxy sử dụng để chấm dứt SSL.
Cài đặt HAProxy
Trên server cân bằng tải, lb1 , cài đặt HAProxy:
- sudo add-apt-repository ppa:vbernat/haproxy-1.5
- sudo apt-get update
- sudo apt-get -y install haproxy
Bây giờ hãy cấu hình HAProxy.
Cấu hình HAProxy
Ta cần cấu hình HAProxy với một số cài đặt hợp lý, kết thúc SSL, giao diện user và backend thích hợp để làm cho nó hoạt động với các server ứng dụng của ta .
Mở file cấu hình HAProxy để chỉnh sửa:
- sudo vi /etc/haproxy/haproxy.cfg
Cấu hình HAProxy: Cài đặt chung
Điều đầu tiên bạn cần làm là đặt maxconn thành một số hợp lý. Cài đặt này ảnh hưởng đến số lượng kết nối đồng thời mà HAProxy sẽ cho phép, điều này có thể ảnh hưởng đến QoS và ngăn web server của bạn gặp sự cố khi cố gắng phục vụ quá nhiều yêu cầu. Bạn cần phải thử với nó để tìm ra thứ phù hợp với môi trường của bạn. Thêm dòng sau (với giá trị bạn cho là hợp lý) vào phần chung của cấu hình:
maxconn 2048
Thêm dòng này, để cấu hình kích thước tối đa của các khóa DHE tạm thời được tạo:
tune.ssl.default-dh-param 2048
Tiếp theo, trong phần mặc định, thêm các dòng sau dưới dòng cho biết chế độ http:
option forwardfor option http-server-close
Nếu bạn muốn bật trang thống kê HAProxy, hãy thêm các dòng sau vào phần mặc định ( user thay thế và password với các giá trị an toàn):
stats enable stats uri /stats stats realm Haproxy\ Statistics stats auth user:password
Điều này sẽ cho phép bạn xem trang thống kê HAProxy bằng cách truy cập vào / stats domain của bạn (ví dụ: “ https://www.example.com/stats” ).
Chưa đóng file cấu hình! Ta sẽ thêm cấu hình proxy tiếp theo.
Cấu hình HAProxy: Proxy
Điều đầu tiên ta muốn thêm là một giao diện user để xử lý các kết nối HTTP đến. Ở cuối file , hãy thêm giao diện user có tên là www-http:
frontend www-http bind www.example.com:80 reqadd X-Forwarded-Proto:\ http default_backend app-backend
Mục đích của giao diện user này là chấp nhận các kết nối HTTP để chúng có thể được chuyển hướng đến HTTPS.
Bây giờ, hãy thêm giao diện user để xử lý các kết nối HTTPS đến. Đảm bảo chỉ định certificate pem
thích hợp:
frontend www-https bind www.example.com:443 ssl crt /etc/ssl/private/www.example.com.pem reqadd X-Forwarded-Proto:\ https default_backend app-backend
Sau khi bạn hoàn tất cấu hình các giao diện user , hãy tiếp tục thêm chương trình backend của bạn bằng cách thêm các dòng sau:
backend app-backend redirect scheme https if !{ ssl_fc } server app1 app1.nyc3.example.com:80 check server app2 app2.nyc3.example.com:80 check
Phần backend này chỉ định server ứng dụng nào sẽ gửi lưu lượng cân bằng tải đến. Ngoài ra, redirect scheme https
dòng yêu cầu nó chuyển hướng các kết nối HTTP đến HTTPS.
Bây giờ hãy lưu và thoát khỏi haproxy.cfg. HAProxy hiện đã sẵn sàng để bắt đầu, nhưng trước tiên hãy bật tính năng ghi log .
Bật tính năng ghi log HAProxy
Mở file cấu hình log rsys:
- sudo vi /etc/rsyslog.conf
Sau đó, tìm các dòng sau và bỏ ghi chú chúng để kích hoạt nhận log hệ thống UDP. Nó sẽ giống như sau khi bạn hoàn thành:
$ModLoad imudp $UDPServerRun 514 $UDPServerAddress 127.0.0.1
Bây giờ khởi động lại rsyslog để kích hoạt cấu hình mới:
sudo service rsyslog restart
Ghi log HAProxy hiện đã được bật! Tệp log sẽ được tạo tại /var/log/haproxy.log
sau khi HAProxy được khởi động.
Khởi động lại HAProxy
Khởi động lại HAProxy để các thay đổi có hiệu lực:
- sudo service haproxy restart
Cân bằng tải của ta hiện đã được cài đặt .
Bây giờ ta cần chạy lệnh cài đặt của ứng dụng.
Cài đặt WordPress
Ta phải chạy lệnh cài đặt WordPress, chuẩn bị cho database để sử dụng, trước khi ta có thể sử dụng nó.
Mở trang web trong trình duyệt web:
Open in a Web Browserhttps://www.example.com/wp-admin/install.php
Thao tác này sẽ hiển thị màn hình cài đặt WordPress. Điền vào các biểu mẫu và nhấp vào nút Cài đặt WordPress .
Sau khi cài đặt WordPress, ứng dụng đã sẵn sàng để sử dụng.
Kết luận
Các server bao gồm ứng dụng của bạn hiện đã được cài đặt và ứng dụng của bạn đã sẵn sàng để sử dụng. Bạn có thể đăng nhập với quyền là admin-user và user của bạn có thể truy cập trang web qua HTTPS thông qua domain thích hợp.
Hãy đảm bảo thử ứng dụng của bạn và đảm bảo nó hoạt động như mong đợi trước khi tiếp tục.
Tiếp tục đến hướng dẫn tiếp theo để bắt đầu làm việc với kế hoạch khôi phục cho cài đặt ứng dụng production của bạn: Xây dựng cho Sản xuất: Ứng dụng web - Lập kế hoạch khôi phục .
Các tin liên quan
Xây dựng cho Sản xuất: Ứng dụng Web - Tổng quan2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Giám sát
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - backup
2015-06-01
Xây dựng cho sản xuất: Ứng dụng web - Ghi log tập trung
2015-06-01
Xây dựng cho Sản xuất: Ứng dụng Web - Lập kế hoạch khôi phục
2015-06-01
Cách cài đặt control panel lưu trữ web Sentora trên Ubuntu 14.04
2015-04-27
Cách cài đặt web server OpenLiteSpeed trên CentOS 7
2015-04-16
Cách cài đặt web server OpenLiteSpeed trên Ubuntu 14.04
2015-04-15
Cách cài đặt Bacula-Web trên Ubuntu 14.04
2015-04-03
Khái niệm cơ bản về bộ nhớ đệm trên web: Thuật ngữ, Tiêu đề HTTP và Chiến lược lưu vào bộ đệm
2015-04-01