Thứ năm, 19/03/2015 | 00:00 GMT+7

Cách thiết lập LEPP hai node trên CentOS 7

Các ứng dụng web có lưu lượng truy cập cao ngày nay được cung cấp bởi các web server mượt mà và phản hồi nhanh, database cấp doanh nghiệp có thể mở rộng và nội dung động được cung cấp bởi các ngôn ngữ kịch bản giàu tính năng. ứng dụng web Linux điển hình tuân theo kiến trúc LAMP (Linux, Apache, MySQL và PHP / Python). Các hướng dẫn có sẵn rộng rãi cho ta thấy cách các thành phần này có thể được cài đặt và cấu hình trong một server duy nhất.

Điều đó hiếm khi xảy ra trong cuộc sống thực. Trong một cài đặt ba tầng chuyên nghiệp, back-end database sẽ được tách biệt trong server của chính nó; web server sẽ gửi các yêu cầu của nó đến một tầng ứng dụng hoạt động như một phần mềm trung gian giữa database và trang web.

Mặc dù cho đến nay Apache vẫn là web server được sử dụng rộng rãi nhất nhưng Nginx đã nhanh chóng trở nên phổ biến nhờ diện tích nhỏ và thời gian phản hồi nhanh. Phiên bản cộng đồng của MySQL vẫn là một lựa chọn phổ biến cho database , nhưng nhiều trang cũng sử dụng một nền tảng database open-souce khác được gọi là PostgreSQL.

Bàn thắng

Trong hướng dẫn này, ta sẽ tạo một ứng dụng web đơn giản theo kiến trúc hai tầng. Hệ điều hành cơ bản của ta cho cả hai nút sẽ là CentOS 7. Trang web sẽ được cung cấp bởi một web server Nginx chạy mã PHP nói chuyện với database PostgreSQL.

Thay vì áp dụng cách tiếp cận “từ trên xuống” được thấy trong các hướng dẫn LAMP hoặc LEMP khác, ta sẽ sử dụng cách tiếp cận “nền tảng”: trước tiên ta sẽ tạo một tầng database , sau đó là web server và sau đó xem cách web server có thể kết nối vào database .

Ta sẽ gọi cấu hình này là một ngăn xếp LEPP (Linux, Nginx, PHP, PostgreSQL).

Yêu cầu

Để làm theo hướng dẫn này, bạn cần những thứ sau:

  • Hai CentOS 7 Server với ít nhất 2GB RAM và 2 lõi CPU, mỗi lõi một cho server database và web server .

Ta sẽ gọi địa chỉ IP của những máy này là your_db_server_ipyour_web_server_ip tương ứng; bạn có thể tìm thấy địa chỉ IP thực của các máy này trên console DigitalOcean.

  • Sudo user không phải root trên cả hai Server. Để cài đặt , hãy làm theo hướng dẫn này .

Bước một - Cài đặt PostgreSQL

Trong bước này, ta sẽ cài đặt PostgreSQL trên server database .

Kết nối với hộp CentOS 7 trống, mới được cài đặt nơi bạn muốn cài đặt PostgreSQL. Kho lưu trữ của nó không đi kèm với CentOS 7 theo mặc định, vì vậy trước tiên ta cần download RPM của repository yum.

sudo wget http://yum.postgresql.org/9.4/redhat/rhel-7Server-x86_64/pgdg-centos94-9.4-1.noarch.rpm 

Sau khi RPM đã được lưu, hãy cài đặt repository .

sudo yum install pgdg-centos94-9.4-1.noarch.rpm -y 

Cuối cùng, cài đặt server PostgreSQL 9.4 và các module đóng góp của nó.

sudo yum install postgresql94-server postgresql94-contrib -y 

Bước hai - Cấu hình PostgreSQL

Trong bước này, ta sẽ tùy chỉnh một số cấu hình sau cài đặt cho PostgreSQL.

Trong CentOS 7, vị trí mặc định cho các file cấu hình và dữ liệu PostgreSQL 9.4 là /var/lib/pgsql/9.4/data/ và vị trí cho các file binary chương trình là /usr/pgsql-9.4/bin/ . Thư mục dữ liệu trống ở đầu. Ta cần chạy chương trình initdb để khởi tạo cụm database và tạo các file cần thiết trong đó:

sudo /usr/pgsql-9.4/bin/postgresql94-setup initdb 

Khi cụm database đã được khởi tạo, sẽ có một file có tên là postgresql.conf trong folder dữ liệu, đây là file cấu hình chính cho PostgreSQL. Ta sẽ thay đổi hai tham số trong file này. Sử dụng vi hoặc editor yêu thích của bạn, mở file để chỉnh sửa.

sudo vi /var/lib/pgsql/9.4/data/postgresql.conf 

Và thay đổi các dòng sau:

  • Thay đổi # listen_addresses = ' localhost ' thành listen_addresses = '*'
  • Thay đổi # port = 5432 thành port = 5432

Tham số đầu tiên chỉ định địa chỉ IP nào mà server database sẽ lắng nghe. Như một biện pháp bảo mật, cài đặt Postgres ngoài hộp chỉ cho phép kết nối server local . Thay đổi điều này thành '*' nghĩa là Postgres sẽ lắng nghe lưu lượng truy cập từ bất kỳ nguồn nào. Tham số thứ hai đã được kích hoạt bằng cách xóa dấu chú thích (#); nó chỉ định cổng mặc định cho Postgres.

Lưu và thoát khỏi file .

Tiếp theo, ta sẽ chỉnh sửa pg_hba.conf , là file cấu hình Truy cập dựa trên Server (HBA) của PostgreSQL. Nó chỉ định server và dải IP nào có thể kết nối với server database . Mỗi mục nhập chỉ định liệu kết nối có thể được thực hiện local hay từ xa ( server ), database mà nó có thể kết nối, user mà nó có thể kết nối, khối IP nào mà yêu cầu có thể đến và chế độ xác thực nào nên được sử dụng. Mọi yêu cầu kết nối không trùng với bất kỳ mục nào trong số này sẽ bị từ chối.

Mở pg_hba.conf để chỉnh sửa.

sudo vi /var/lib/pgsql/9.4/data/pg_hba.conf 

Cuộn xuống cuối file và thêm dòng này:

host        all             all             your_web_server_ip/32          md5 

Dòng này cho PostgreSQL biết chỉ chấp nhận các kết nối database đến từ địa chỉ IP your_web_server_ip bằng cách sử dụng tổng kiểm tra md5 tiêu chuẩn để xác thực password . Kết nối có thể được thực hiện dựa trên bất kỳ database nào với quyền là mọi user .

Lưu và thoát khỏi file .

Tiếp theo, khởi động dịch vụ Postgres:

sudo systemctl start postgresql-9.4.service 

Và sau đó kích hoạt nó:

sudo systemctl enable postgresql-9.4.service 

Để kiểm tra xem server database có chấp nhận kết nối hay không, ta có thể xem vài dòng cuối cùng của file log Postgres mới nhất. Nhật ký lỗi database được lưu trong folder /var/lib/pgsql/9.4/data/pg_log . Chạy lệnh sau để xem các file trong folder này.

sudo ls -l /var/lib/pgsql/9.4/data/pg_log 

Tên file log có mẫu postgresql- day_of_week .log (ví dụ: postgresql-Wed.log ). Tìm file log tương ứng với ngày hiện tại và xem vài dòng cuối cùng của file log mới nhất.

sudo tail -f -n 20 /var/lib/pgsql/9.4/data/pg_log/postgresql-day_of_week.log 

Đầu ra sẽ hiển thị một cái gì đó tương tự như sau:

...  < 2015-02-26 21:32:24.159 EST >LOG:  database system is ready to accept connections < 2015-02-26 21:32:24.159 EST >LOG:  autovacuum launcher started 

Nhấn CTRL + C để dừng kết quả từ lệnh tail .

Bước 3 - Cập nhật firewall server database

Ta cũng cần cho phép lưu lượng database Postgres vượt qua firewall . CentOS 7 thực hiện firewall động thông qua daemon firewalld ; dịch vụ không cần phải khởi động lại để các thay đổi có hiệu lực. Dịch vụ firewalld sẽ tự động bắt đầu tại thời điểm khởi động hệ thống, nhưng luôn tốt khi kiểm tra.

sudo firewall-cmd --state 

Trạng thái mặc định sẽ running , nhưng nếu nó not running hãy bắt đầu với:

sudo systemctl start firewalld 

Tiếp theo, thêm các luật cho cổng 5432. Đây là cổng cho lưu lượng database PostgreSQL.

sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp 

Sau đó cập nhật firewall .

sudo firewall-cmd --reload 

Bước 4 - Tạo và phổ biến database

Trong bước này, ta sẽ tạo một database và thêm một số dữ liệu vào đó. Đây là dữ liệu mà ứng dụng web của ta sẽ tự động tìm nạp và hiển thị.

Bước đầu tiên là thay đổi password của siêu user Postgres, được gọi là postgres , được tạo khi PostgreSQL được cài đặt lần đầu. Tốt nhất là password của user được thay đổi từ bên trong Postgres thay vì dấu nhắc của hệ điều hành. Để làm điều này, hãy chuyển sang user postgres :

sudo su - postgres 

Thao tác này sẽ thay đổi dấu nhắc lệnh thành -bash-4.2$ . Tiếp theo, khởi động công cụ khách được tích hợp sẵn.

psql 

Theo mặc định, điều này sẽ ghi user postgres vào database Postgres. Dấu nhắc của bạn sẽ thay đổi thành postgres=# , dấu nhắc psql, không phải dấu nhắc hệ điều hành. Ban hành lệnh \password bây giờ sẽ dẫn đến dấu nhắc yêu cầu thay đổi password .

\password 

Cung cấp password an toàn cho user Postgres.

Tiếp theo, tạo một database có tên là product :

CREATE DATABASE product; 

Sau đó kết nối với database sản phẩm :

\connect product; 

Tiếp theo, tạo một bảng trong database có tên product_list :

CREATE TABLE product_list (id int, product_name varchar(50)); 

Chạy lần lượt từng lệnh sau. Mỗi lệnh sẽ thêm một bản ghi vào bảng product_list .

INSERT INTO product_list VALUES (1, 'Book'); INSERT INTO product_list VALUES (2, 'Computer'); INSERT INTO product_list VALUES (3, 'Desk'); 

Cuối cùng, kiểm tra dữ liệu đã được thêm vào chính xác.

SELECT * FROM product_list; 

Đầu ra sẽ như thế này:

 id | product_name ----+--------------   1 | Book   2 | Computer   3 | Desk (3 rows) 

Đây là tất cả những gì ta cần làm trên server database ; bây giờ bạn có thể ngắt kết nối khỏi nó.

Bước 5 - Cài đặt Nginx

Tiếp theo, ta sẽ cài đặt và cấu hình web server Nginx trong Server khác. Kết nối với hộp CentOS 7 trống, mới cài đặt khác.

Giống như PosgreSQL, repository Nginx không đi kèm với CentOS 7 theo mặc định. Trước tiên, ta cần download RPM của repository yum.

sudo wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm 

Sau khi RPM đã được lưu, hãy cài đặt repository .

sudo yum install nginx-release-centos-7-0.el7.ngx.noarch.rpm -y 

Cuối cùng, cài đặt web server Nginx.

sudo yum install nginx -y 

Bước 6 - Cập nhật Tường lửa Server Web

Trong bước này, ta sẽ cấu hình firewall để cho phép lưu lượng truy cập Nginx và tùy chỉnh một số cấu hình Nginx.

Ta cần cho phép truy cập HTTP / HTTPS vượt qua firewall . Giống như trước đây, hãy kiểm tra xem dịch vụ firewalld có đang chạy hay không.

sudo firewall-cmd --state 

Trạng thái mặc định sẽ running , nhưng nếu nó not running , hãy khởi động nó:

sudo systemctl start firewalld 

Bây giờ thêm luật firewall cho cổng 80 (HTTP):

sudo firewall-cmd --permanent --zone=public --add-port=80/tcp 

Thêm một cổng khác cho cổng 443 (HTTPS):

sudo firewall-cmd --permanent --zone=public --add-port=443/tcp 

Sau đó, cập nhật firewall .

sudo firewall-cmd --reload 

Tiếp theo, khởi động Nginx.

sudo systemctl start nginx.service 

Và kích hoạt nó.

sudo systemctl enable nginx.service 

Trỏ trình duyệt của ta đến địa chỉ IP của server sẽ hiển thị cho ta trang web mặc định:

Trang web mặc định do Nginx cung cấp

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

Có hai file cấu hình Nginx có liên quan trong bước này. Cái đầu tiên là file cấu hình chính và cái thứ hai là file dành riêng cho trang web.

Tệp cấu hình chung kiểm soát các đặc điểm tổng thể của server . Nginx có thể phục vụ nhiều trang web và mỗi trang web được gọi là một khối server (Apache gọi chúng là server ảo hoặc vhosts). Mỗi cấu hình của trang web được kiểm soát bởi một file cấu hình khối server .

Hãy chỉnh sửa file cấu hình server chính.

sudo vi /etc/nginx/nginx.conf 

Trên dòng thứ hai của file , thay đổi tham số worker_processes từ 1 thành 2. Điều này cho biết các stream công nhân của Nginx sử dụng tất cả các lõi CPU có sẵn. Lưu và thoát khỏi file .

Ta sẽ không tạo -block giao bóng ở đây. Thay vào đó, ta sẽ tạo ứng dụng web của bạn trong khối server mặc định, vì vậy hãy chỉnh sửa file cấu hình khối server mặc định.

sudo vi /etc/nginx/conf.d/default.conf 

Nội dung trông như thế này. Các phần bạn sẽ chỉnh sửa được đánh dấu.

server {     listen       80;     server_name  localhost;      ...      location / {         root   /usr/share/nginx/html;         index  index.html index.htm;     }      #error_page  404              /404.html;      ...      # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000     #     #location ~ \.php$ {     #    root            html;     #    fastcgi_pass     127.0.0.1:9000;     #    fastcgi_index        index.php;     #    fastcgi_param        SCRIPT_FILENAME /scripts$fastcgi_script_name;     #    include              fastcgi_params;     #}   ... } 

Thực hiện các chỉnh sửa sau:

  • Đặt server_name từ localhost thành your_web_server_ip .

  • Thêm index.php vào index thị index để nó đọc index.php index.html index.htm .

  • Xóa location / {} các dòng chứa index thị rootindex . Nếu không có thay đổi này, bạn có thể thấy trang web của bạn không hiển thị trong trình duyệt và log lỗi Nginx ghi lại các thông báo như "Unable to open primary script: /etc/nginx/html/index.php (No such file or directory)"

  • Bỏ ghi chú location ~ \.php$ block (bao gồm cả dấu ngoặc nhọn cuối cùng) bên dưới chuyển các tập lệnh PHP tới comment server FastCGI .

  • Xóa chỉ thị root trong cùng một location ~ \.php$ block.

  • Thay đổi giá trị chỉ thị fastcgi_pass từ 127.0.0.1:9000 thành unix:/var/run/php-fpm/php5-fpm.sock . Điều này là đảm bảo Trình quản lý tiến trình PHP FastCGI (mà ta sẽ cài đặt trong bước tiếp theo) sẽ lắng nghe socket Unix.

  • Thay đổi giá trị chỉ thị te fastcgi_param thành SCRIPT_FILENAME $document_root$fastcgi_script_name . Điều này cho web server biết rằng các file kịch bản PHP sẽ được lưu trong folder root của tài liệu.

Sau khi bạn hoàn tất chỉnh sửa, file sẽ trông như thế này:

server {     listen       80;     server_name  your_web_server_ip;      ...      root   /usr/share/nginx/html;     index  index.php index.html index.htm;      ...      # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000     #     location ~ \.php$ {         fastcgi_pass   unix:/var/run/php-fpm/php5-fpm.sock;         fastcgi_index  index.php;         fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;         include        fastcgi_params;     }      ... 

Lưu và thoát khỏi file , sau đó khởi động web server .

sudo systemctl restart nginx.service 

Bước 8 - Cài đặt PHP

Bây giờ ta sẽ cài đặt ba thành phần của PHP trong web server : chính công cụ PHP, Trình quản lý tiến trình FastCGI (FPM) và module PHP cho PostgreSQL.

Đầu tiên, hãy cài đặt PHP.

sudo yum install php -y 

Tiếp theo, ta sẽ cài đặt FastCGI Process Manager (FPM), đây là cách triển khai FastCGI của riêng PHP. FastCGI giống như một tiện ích bổ sung trên web server của bạn. Nó chạy độc lập và giúp tăng tốc các yêu cầu của user bằng cách hợp nhất chúng trong một quy trình duy nhất, do đó tăng tốc thời gian phản hồi.

sudo yum install php-fpm -y 

Cuối cùng, cài đặt module PHP Postgres:

sudo yum install php-pgsql -y 

Bước 9 - Cấu hình PHP

Trong bước này, ta sẽ cấu hình PHP.

Mở file cấu hình PHP.

sudo vi /etc/php.ini 

áp dụng các thay đổi sau:

  • Thay đổi expose_php = On thành expose_php = Off . Đặt tham số này thành Off chỉ nghĩa là PHP không thêm chữ ký của nó vào tiêu đề của web server và không tiết lộ sự thật rằng server đang chạy PHP.

  • Thay đổi ;cgi.fix_pathinfo=0 thành ;cgi.fix_pathinfo=1 .

Lưu và thoát khỏi file . Tiếp theo, chỉnh sửa file cấu hình FPM.

sudo vi /etc/php-fpm.d/www.conf 

áp dụng các thay đổi sau:

  • Thay đổi user = apache thành user = nginx .

  • Tương tự, thay đổi group = apache thành group = nginx .

  • Thay đổi listen = 127.0.0.1:9000 thành listen = /var/run/php-fpm/php5-fpm.sock . Ta đặt giá trị tương tự này trong file cấu hình của khối server mặc định Nginx.

Lưu và thoát khỏi vi. Tiếp theo bắt đầu PHP-FPM.

sudo systemctl start php-fpm.service 

Sau đó, kích hoạt nó.

sudo systemctl enable php-fpm.service 

Bước 10 - Tạo ứng dụng web

Ta đã sẵn sàng tất cả các thành phần server của bạn ở cả hai nút. Bây giờ là lúc ta tạo ứng dụng PHP của bạn . Tạo một file có tên là index.php trong /usr/share/nginx/html .

sudo vi /usr/share/nginx/html/index.php 

Dán nội dung sau. Đảm bảo bạn thay thế các biến được đánh dấu bằng địa chỉ IP server database và password Postgres tương ứng.

<html>  <head>     <title>LEPP Stack Example</title> </head>  <body>  <h4>LEPP (Linux, Nginx, PHP, PostgreSQL) Sample Page</h4> <hr/> <p>Hello and welcome. This web page is dynamically showing a product list from a PostgreSQL database</p>  <?php      $host = "your_db_server_ip";     $user = "postgres";     $password = "your_postgres_password";     $dbname = "product";      $con = pg_connect("host=$host dbname=$dbname user=$user password=$password")             or die ("Could not connect to server\n");      $query = "SELECT * FROM product_list";     $resultset = pg_query($con, $query) or die("Cannot execute query: $query\n");     $rowcount = pg_numrows($resultset);      for($index = 0; $index < $rowcount; $index++) {             $row = pg_fetch_array($resultset, $index);             echo $row["id"], "-", $row["product_name"];             echo "<br>";     } ?>  </body> </html> 

Đây là một trang web đơn giản với mã PHP được nhúng. Đầu tiên, nó xác định một số tham số cho chuỗi kết nối database . Tiếp theo, một kết nối (được chỉ định bởi $con ) được thực hiện với server database . Một truy vấn được chỉ định và sau đó nó được thực thi dựa trên bảng product_list . Nó lặp lại các kết quả trả về và in nội dung của mỗi hàng trong một dòng mới.

Sau khi file được ghi và lưu, hãy mở cửa sổ trình duyệt và trỏ file đó đến your_web_server_ip . Nội dung sẽ như thế này:

Trang web động PHP hiển thị dữ liệu PostgreSQL

Kết luận

Ta đã xây dựng hai hộp từ đầu, cài đặt và cấu hình tất cả các phần mềm cần thiết, sau đó triển khai ứng dụng web của ta trong đó. Một ngăn xếp production sẽ có thêm độ phức tạp, như thêm firewall bên ngoài và bộ cân bằng tải, nhưng đây là một cấu hình cơ bản vững chắc mà bạn có thể sử dụng để bắt đầu. Thưởng thức!


Tags:

Các tin liên quan

Cách cài đặt Ruby on Rails với rbenv trên CentOS 7
2015-03-16
Cách cài đặt MediaWiki trên CentOS 7
2015-03-12
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7
2015-03-10
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7
2015-03-10
Cách chạy một mạng xã hội phân tán nguồn mở với Diaspora trên CentOS 7
2015-03-04
Cách lưu giữ log lịch sử hiệu quả với Graphite, carbon và sưu tập trên CentOS 7
2015-02-23
Cách cài đặt và cấu hình truy cập từ xa VNC cho GNOME Desktop trên CentOS 7
2014-11-25
Cách ghi lại mạng của bạn bằng Netdot trên CentOS 7
2014-11-24
Cách cài đặt và cập nhật WordPress với Kiểm soát phiên bản trên CentOS 7
2014-11-10
Cách thêm swap trên CentOS 7
2014-10-31