19/09/2018, 09:47

Xây dựng cho sản xuất: Ứng dụng web - Triển khai

Giới thiệu Trong phần này của hướng dẫn, chúng tôi sẽ triển khai ứng dụng PHP ví dụ, WordPress và một DNS riêng của chúng tôi: Người dùng của bạn sẽ truy cập ứng dụng của bạn qua HTTPS thông qua tên miền, ví dụ: "https://www.example.comTrình cân bằng tải sẽ hoạt động như một proxy ngược ...

Giới thiệu

Trong phần này của hướng dẫn, chúng tôi sẽ triển khai ứng dụng PHP ví dụ, WordPress và một DNS riêng của chúng tôi:

DNS + Application Diagram

Người dùng của bạn sẽ truy cập ứng dụng của bạn qua HTTPS thông qua tên miền, ví dụ: "https://www.example.comTrình cân bằng tải sẽ hoạt động như một proxy ngược lại với các máy chủ ứng dụng, nó sẽ kết nối với máy chủ cơ sở dữ liệu DNS riêng tư sẽ cho phép chúng ta sử dụng tên để chỉ các địa chỉ mạng riêng của các máy chủ của chúng ta. giúp dễ dàng quá trình cấu hình máy chủ của chúng tôi.

Chúng tôi sẽ thiết lập các thành phần mà chúng tôi vừa thảo luận trên sáu máy chủ, theo thứ tự sau:

  • DNS riêng tư (ns1 và ns2)
  • Máy chủ cơ sở dữ liệu (db1)
  • Máy chủ ứng dụng (app1 và app2)
  • Cân bằng tải (lb1)

Hãy bắt đầu với thiết lập DNS.

Máy chủ DNS riêng

Sử dụng tên cho các địa chỉ giúp xác định các máy chủ bạn đang làm việc và trở nên cần thiết để duy trì cài đặt máy chủ lớn hơn, vì bạn có thể thay thế máy chủ bằng cách cập nhật bản ghi DNS của mình (ở một nơi) thay vì cập nhật vô số tệp cấu hình Các địa chỉ IP. Trong thiết lập của chúng tôi, chúng tôi sẽ thiết lập DNS của mình để chúng tôi có thể tham chiếu các địa chỉ mạng riêng của máy chủ của chúng tôi theo tên thay vì địa chỉ IP.

Chúng tôi sẽ đề cập đến địa chỉ mạng riêng của từng máy chủ theo tên máy chủ trong tên miền phụ "nyc3.example.com". Ví dụ: địa chỉ mạng riêng của máy chủ cơ sở dữ liệu sẽ là "db1.nyc3.example.com", giải quyết thành địa chỉ IP riêng tư của nó. Lưu ý rằng tên miền 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 chúng tôi, chúng tôi "nyc3" chỉ ra rằng các máy chủ nằm trong trung tâm dữ liệu NYC3 và "example.com" là tên miền của ứng dụng của chúng tôi.

Thiết lập điều này bằng cách làm theo hướng dẫn này và thêm bản ghi DNS cho mỗi máy chủ trong thiết lập của bạn:

  • Cách định cấu hình BIND dưới dạng DNS mạng riêng

Sau khi hoàn thành hướng dẫn DNS, bạn nên có hai máy chủ BIND: ns1ns2. Nếu bạn đã biết địa chỉ IP riêng của tất cả các máy chủ trong thiết lập của mình, 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 các máy chủ của mình.

Bây giờ chúng ta đã sẵn sàng để thiết lập máy chủ cơ sở dữ liệu của mình.

Thiết lập máy chủ cơ sở dữ liệu

Bởi vì chúng tôi muốn cân bằng tải các máy chủ ứng dụng của chúng tôi, tức là các máy chủ chạy Apache và PHP, chúng tôi cần tách riêng cơ sở dữ liệu khỏi các máy chủ ứng dụng bằng cách thiết lập nó trên một máy chủ riêng biệt. Việc tách cơ sở dữ liệu khỏi ứng dụng là một bước cần thiết trước khi mở rộng theo chiều ngang nhiều loại ứng dụng, như được giải thích trong bài đăng trên blog này: Các ứ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 để thiết lập máy chủ cơ sở dữ liệu của chúng tôi, nhưng bạn có thể tìm hiểu thêm về việc thiết lập máy chủ cơ sở dữ liệu MySQL từ xa, được tách riêng cho một ứng dụng PHP trong hướng dẫn này: Cách thiết lập cơ sở dữ liệu MySQL từ xa.

Cài đặt MySQL

Trên máy chủ cơ sở dữ liệu, db1, cài đặt MySQL Server:

sudo apt-get update

sudo apt-get -y install mysql-server

Nhập mật khẩu gốc 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 mật khẩu của quản trị viên MySQL mà bạn đã đặt trong các bước ở trên. Sau đó, nó sẽ hỏi bạn có muốn thay đổi mật khẩu đó không. Nhập "N" nếu bạn không hài lòng với mật khẩu hiện tại của mình. Trả lời các câu hỏi còn lại với các giá trị mặc định.

Cấu hình MySQL để nghe trên giao diện mạng riêng

Mở tệp cấu hình MySQL:

sudo vi /etc/mysql/my.cnf

Tìm bind-address và thay đổi nó thành địa chỉ của địa chỉ mạng riêng của máy chủ cơ sở dữ liệu của bạn:

/etc/mysql/my.cnf

bind-address            = db1.nyc3.example.com

Lưu và thoát.

Khởi động lại MySQL:

sudo service mysql restart

Thiết lập cơ sở dữ liệu và người dùng cơ sở dữ liệu

Bây giờ chúng ta cần tạo cơ sở dữ liệu và người dùng cơ sở dữ liệu mà các máy chủ ứng dụng sẽ sử dụng để kết nối.

Nhập bảng điều khiển MySQL:

mysql -u root -p

Nhập mật khẩu gốc MySQL tại dấu nhắc.

Tại dấu nhắc MySQL, tạo cơ sở dữ liệu cho ứng dụng của bạn:

CREATE DATABASE app;

MySQL liên kết người dùng với các máy chủ mà họ nên kết nối từ đó. Trong trường hợp của chúng ta, chúng ta có hai máy chủ ứng dụng sẽ kết nối, vì vậy chúng ta nên tạo một người dùng cho mỗi máy chủ. Tạo một người dùng cơ sở dữ liệu, "appuser" trong ví dụ của chúng ta, có thể được kết nối từ địa chỉ mạng riêng của mỗi máy chủ ứng dụng của bạn (app1app2). Bạn nên sử dụng cùng một mật khẩu cho mỗi người dùng:

CREATE USER 'appuser'@'app1.nyc3.example.com' IDENTIFIED BY 'password';

CREATE USER 'appuser'@'app2.nyc3.example.com' IDENTIFIED BY 'password';

Chúng tôi sẽ cấu hình các đặc quyền người dùng cơ sở dữ liệu cuối cùng sau, nhưng chúng ta hãy cung cấp appuser toàn quyền kiểm soát ứng dụng cơ sở dữ liệu:

GRANT ALL PRIVILEGES ON app.* TO 'appuser'@'app1.nyc3.example.com';

GRANT ALL PRIVILEGES ON app.* TO 'appuser'@'app2.nyc3.example.com';

FLUSH PRIVILEGES;

Những đặc quyền thoải mái này đảm bảo rằng trình cài đặt của ứng dụng sẽ có thể cài đặt ứng dụng trong cơ sở dữ liệu. Nếu bạn có nhiều hơn hai máy chủ ứng dụng, bạn nên tạo tất cả người dùng cơ sở dữ liệu cần thiết ngay bây giờ.

Thoát dấu nhắc MySQL ngay bây giờ:

exit

Thiết lập máy chủ cơ sở dữ liệu đã hoàn tất. Hãy thiết lập các máy chủ ứng dụng.

Thiết lập máy chủ ứng dụng

Các máy chủ ứng dụng sẽ chạy mã của ứng dụng của chúng ta, nó sẽ kết nối với máy chủ cơ sở dữ liệu. Ứng dụng ví dụ của chúng tôi là WordPress, là một ứng dụng PHP được phục vụ thông qua một máy chủ web như Apache hoặc Nginx. Bởi vì chúng tôi muốn cân bằng tải các máy chủ ứng dụng, chúng tôi sẽ thiết lập hai máy chủ giống hệt nhau.

Phần này bao gồm tất cả các bước cần thiết để thiết lập máy chủ ứng dụng của chúng tôi, nhưng chủ đề được đề cập chi tiết trong hướng dẫn sau, bắt đầu từ Thiết lập máy chủ web phần: Cách thiết lập cơ sở dữ liệu từ xa.

Cài đặt Apache và PHP

Trên cả hai máy chủ ứng dụng, app1app2, cài đặt Apache và PHP:

sudo apt-get update

sudo apt-get -y install apache2 php5-mysql php5 libapache2-mod-php5 php5-mcrypt

Định cấu hình Apache

Chúng tôi sẽ sử dụng HAProxy, trên máy chủ cân bằng tải, để xử lý chấm dứt SSL, vì vậy chúng tôi không muốn người dùng của chúng tôi truy cập trực tiếp vào máy chủ ứng dụng. Như vậy, chúng ta sẽ ràng buộc Apache với địa chỉ mạng riêng của mỗi máy chủ.

Trên mỗi máy chủ ứng dụng, app1app2, mở tệp cấu hình cổng Apache của bạn. Theo mặc định, đây là ports.conf tập tin:

sudo vi /etc/apache2/ports.conf

Tìm dòng có nội dung Listen 80và thêm địa chỉ IP riêng của bạn vào nó, giống như vậy (thay thế địa chỉ IP thực của máy chủ của bạn):

Apache ports.conf — Listen on private interface

Listen private_IP:80

Lưu và thoát. Điều này cấu hình Apache chỉ nghe trên giao diện mạng riêng, có nghĩa là nó không thể được truy cập bởi địa chỉ IP công cộng hoặc tên máy chủ.

Khởi động lại Apache để đặt các thay đổi có hiệu lực:

sudo service apache2 restart

Apache hiện chỉ có thể truy cập qua địa chỉ mạng riêng của máy chủ ứng dụng của bạn. Chúng tôi sẽ cấu hình cân bằng tải để gửi yêu cầu người dùng tại đây, trong giây lát.

Tải xuống và định cấu hình ứng dụng

Trong ví dụ của chúng tôi, chúng tôi đang sử dụng WordPress làm ứng dụng của mình. Nếu bạn đang sử dụng một ứng dụng PHP khác, hãy tải xuống và thực hiện bất kỳ cấu hình có liên quan nào (ví dụ: thông tin kết nối cơ sở dữ liệu), sau đó chuyển sang phần tiếp theo.

Trên máy chủ ứng dụng đầu tiên, app1, tải xuống kho lưu trữ WordPress:

cd ~

wget http://wordpress.org/latest.tar.gz

Giải nén kho lưu trữ WordPress:

tar xvf latest.tar.gz

Thay đổi thư mục được trích xuất:

cd wordpress

WordPress cần một thư mục được tạo để tải lên, wp-content/uploads. Hãy làm điều đó ngay bây giờ:

mkdir wp-content/uploads

Chúng tôi sẽ sử dụng tệp 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ở tệp cấu hình để chỉnh sửa:

vi wp-config.php

Cấu hình kết nối cơ sở dữ liệu WordPress bằng cách thay đổi thông tin được tô sáng trong các dòng sau:

wp-config.php

/** 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ì chúng ta sẽ sử dụng mã hóa TLS / SSL trên máy chủ cân bằng tải, chúng ta phải thêm các dòng sau để WordPress sẽ biết rằng nó nằm phía sau proxy ngược đang sử dụng SSL:

define('FORCE_SSL_ADMIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
       $_SERVER['HTTPS']='on';

Bạn cũng sẽ muố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. Chúng tôi sẽ không đề cập đến điều này ở đây nhưng hãy đảm bảo rằng chúng giống nhau trên tất cả các máy chủ ứng dụng của bạn.

Lưu và thoát.

WordPress hiện đã được định cấu hình, nhưng các tệp của nó phải được sao chép vào vị trí thích hợp để được phần mềm máy chủ web của chúng tôi phân phối.

Sao chép tệp ứng dụng vào tài liệu gốc

Bây giờ chúng ta đã cấu hình ứng dụng của mình, chúng ta cần sao chép nó vào thư mục gốc của tài liệu Apache, nơi nó có thể được phục vụ cho khách truy cập trang web của chúng tôi.

Vị trí mặc định của DocumentRoot của Apache là /var/www/html, vì vậy chúng tôi sẽ sử dụng điều đó trong ví dụ của mình.

Đầu tiên, xóa mặc định index.html tập tin:

sudo rm /var/www/html/index.html

Sau đó, sử dụng rsync để sao chép các tệp WordPress vào /var/www/html, và làm www-data (người dùng mà Apache chạy như) chủ sở hữu:

sudo rsync -avP ~/wordpress/ /var/www/html

sudo chgrp -R www-data /var/www/html/*

Máy chủ ứng dụng đầu tiên của chúng tôi, app1, đã sẵn sàng. Chúng tôi sẽ thiết lập máy chủ ứng dụng khác.

Nhân rộng các tệp ứng dụng cho các máy chủ khác

Để giữ cho các tệp của ứng dụng của bạn nhất quán trên các máy chủ ứng dụng khác nhau của bạn, bạn nên thiết lập sao chép tệp gốc của tài liệu máy chủ web 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 tệp và cài đặt plugin sẽ lưu trữ các tệp trên máy chủ cụ thể xử lý yêu cầu. Nếu những tệp này không được sao chép vào tất cả các máy chủ ứng dụng của bạn, một số người dùng của bạn sẽ được phân phát các trang có hình ảnh bị thiếu và các 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ụ như các tệp tải lên hoặc các plugin được tải xuống) trên máy chủ ứng dụng, bạn có thể chỉ cần sao chép các tệp ứng dụng theo cách thủ công, một lần. Nếu trường hợp này xảy ra, hãy sử dụng rsync để sao chép các tệp ứng dụng của bạn từ app1 đến app2.

GlusterFS có thể được sử dụng để tạo ra một khối lượng nhân rộng của các tệp cần thiết và được thể hiện trong Đồng bộ hóa tệp ứng dụng web phần của hướng dẫn này: Làm thế nào để sử dụng HAProxy như một cân bằng tải cho máy chủ ứng dụng WordPress. Làm theo hướng dẫn (bỏ qua Chỉnh sửa tệp máy chủ lưu trữ , vì DNS của chúng tôi sẽ xử lý điều đó) và thiết lập sao chép giữa app1app2.

Sau khi sao chép của bạn được thiết lập đúng, cả hai máy chủ ứng dụng của bạn nên được cấu hình đúng cách. Hãy thiết lập cân bằng tải của chúng tôi ngay bây giờ.

Thiết lập máy chủ cân bằng tải

Máy chủ cân bằng tải của chúng tôi sẽ chạy HAProxy, sẽ phục vụ như là một cân bằng tải proxy ngược cho các máy chủ ứng dụng của chúng tôi. Người dùng của bạn sẽ truy cập ứng dụng của bạn thông qua máy chủ cân bằng tải thông qua một 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 để thiết lập máy chủ cân bằng tải của chúng tôi, nhưng chủ đề được đề cập chi tiết trong các hướng dẫn sau đây:

  • Làm thế nào để sử dụng HAProxy như một lớp 7 Load Balancer cho WordPress và Nginx trên Ubuntu 14.04
  • Làm thế nào để thực hiện SSL chấm dứt với HAProxy trên Ubuntu 14.04:

Sao chép chứng chỉ SSL

Thực hiện các bước trên máy chủ cân bằng tải, lb1.

Trong thư mục chứa chứng chỉ SSL của bạn (một trong các điều kiện tiên quyết từ phần 1), kết hợp chứng chỉ của bạn, bất kỳ chứng chỉ CA trung gian nào và khóa chứng chỉ của bạn vào một đĩa đơn .pem tập tin. Ví dụ (certs của chúng tôi đang ở /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 tệp 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 máy chủ 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

Chúng ta cần phải cấu hình HAProxy với một số thiết lập hợp lý, chấm dứt SSL, và các frontend và backend thích hợp để làm cho nó hoạt động với các máy chủ ứng dụng của chúng ta.

Mở tệp 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 sẽ muố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 máy chủ web của bạn gặp sự cố khi cố gắng phân phối quá nhiều yêu cầu. Bạn sẽ cần phải chơi xung quanh với nó để tìm những gì làm việc cho môi trường của bạn. Thêm dòng sau (với giá trị bạn nghĩ là hợp lý) vào phần toàn cục của cấu hình:

haproxy.cfg — maxconn

   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 ra:

haproxy.cfg — tune.ssl.default-dh-param

   tune.ssl.default-dh-param 2048

Tiếp theo, trong phần mặc định, thêm các dòng sau theo dòng có chế độ http:

haproxy.cfg

   option forwardfor
   option http-server-close

Nếu bạn muốn kích hoạt trang thống kê HAProxy, hãy thêm các dòng sau vào phần mặc định (thay thế người dùng và mật khẩu bằng các giá trị an toàn):

haproxy.cfg

   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 tên miền của bạn trên / số liệu thống kê (ví dụ: "https://www.example.com/stats ").

Không đóng tập tin cấu hình! Chúng tôi sẽ thêm cấu hình proxy tiếp theo.

Cấu hình HAProxy: Proxy

Điều đầu tiên chúng tôi muốn thêm là giao diện người dùng để xử lý các kết nối HTTP đến. Ở cuối tệp, hãy thêm giao diện người dùng có tên 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 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ờ thêm một lối vào để xử lý các kết nối HTTPS đến. Đảm bảo chỉ định thích hợp pem chứng chỉ:

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 việc định cấu hình giao diện người dùng, hãy tiếp tục thêm chương trình phụ trợ của mình 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 cuối này xác định các máy chủ ứng dụng nào gửi lưu lượng cân bằng tải tới. Ngoài ra, redirect scheme https cho phép chuyển hướng kết nối HTTP sang HTTPS.

Bây giờ hãy lưu và thoát haproxy.cfg. HAProxy đã sẵn sàng để bắt đầu, nhưng hãy bật ghi nhật ký trước.

Bật ghi nhật ký HAProxy

Mở tệp cấu hình rsyslog:

sudo vi /etc/rsyslog.conf

Sau đó, tìm các dòng sau và bỏ ghi chú chúng để kích hoạt tính năng tiếp nhận nhật ký hệ thống UDP. Nó sẽ giống như sau khi bạn hoàn thành:

/etc/rsyslog.conf

$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 nhật ký HAProxy hiện đã được bật! Tệp nhật ký sẽ được tạo tại /var/log/haproxy.log một khi HAProxy được bắt đầu.

Khởi động lại HAProxy

Khởi động lại HAProxy để đưa các thay đổi có hiệu lực:

sudo service haproxy restart

Cân bằng tải của chúng tôi hiện đã được thiết lập.

Bây giờ chúng ta cần chạy kịch bản cài đặt của ứng dụng.

Cài đặt WordPress

Chúng ta phải chạy kịch bản cài đặt WordPress, chuẩn bị cơ sở dữ liệu để sử dụng nó, trước khi chúng ta có thể sử dụng nó.

Mở trang web của bạn trong trình duyệt web:

Open in a Web Browserhttps://www.example.com/wp-admin/install.php

Điều này sẽ hiển thị màn hình cài đặt WordPress. Điền vào biểu mẫu và nhấp vào Cài đặt WordPress nút.

Sau khi cài đặt WordPress, ứng dụng đã sẵn sàng để sử dụng.

Phần kết luận

Các máy chủ bao gồm ứng dụng của bạn hiện đã được thiết lập và ứng dụng của bạn đã sẵn sàng để sử dụng. Bạn có thể đăng nhập với tư cách là người dùng quản trị và người dùng của bạn có thể truy cập trang web qua HTTPS thông qua tên miền thích hợp.

Hãy chắc chắn để kiểm tra ứng dụng của bạn và chắc chắn rằng nó hoạt động như mong đợi trước khi tiếp tục.

Tiếp tục với hướng dẫn tiếp theo để bắt đầu thực hiện kế hoạch khôi phục cho thiết lập ứng dụng sản xuất 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.

0