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_ip
và your_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ànhlisten_addresses = '*'
- Thay đổi
# port = 5432
thànhport = 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:
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ànhyour_web_server_ip
.Thêm
index.php
vàoindex
thịindex
để nó đọcindex.php index.html index.htm
.Xóa
location / {
và}
các dòng chứaindex
thịroot
vàindex
. 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ànhunix:/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ànhSCRIPT_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ànhexpose_php = Off
. Đặt tham số này thànhOff
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ànhuser = nginx
.Tương tự, thay đổi
group = apache
thànhgroup = nginx
.Thay đổi
listen = 127.0.0.1:9000
thànhlisten = /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:
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!
Các tin liên quan
Cách cài đặt Ruby on Rails với rbenv trên CentOS 72015-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