Cách cài đặt Linux, Nginx, MySQL, PHP( LEMP Stack) trên Ubuntu 16.04
Cách cài đặt Linux, Nginx, MySQL, PHP( LEMP Stack) trên Ubuntu 16.04
LEMP stack là một nhóm các phần mềm được sử dụng để tạo nên một web server phục vụ Web động và các ứng dụng web. Nhóm phần mềm này gồm hệ điều hành Linux, phần mềm chạy dịch vụ web server là Nginx. Cơ sở dữ liệu được lưu trữ trên MySQL và các thành phần " động" được xử lí bởi PHP.
Bài viết này hướng dẫn bạn cách cài đặt LEMP Stack trên server Ubuntu 16.04. Bạn có thể cài Ubuntu trên máy ảo hoặc sử dụng Ubuntu Server của ViCloud
Yêu cầu tiên quyết
- Tạo cho mình một server tại ViCloud.
Môt non-root user với quyền
sudo
trên server (Tham khảo bài viết: Hướng dẫn tạo người dùng Sudo trên CentOS).- Nếu chưa có, bạn có thể tham khảo cách tạo một non-root user với quyền sudo tại bài viết Thiết lập ban đầu cho server chạy Ubuntu 16.04
Sau khi đã có tài khoản, đăng nhập rồi tiến đến Bước 1.
Bước 1: Cài đặt Nginx web server
Để hiển thị website tới người dùng, ta sẽ cài đặt Nginx, một web server hiện đại với nhiều tính năng hiệu quả.
Vì mọi gói ta sẽ cài đều nằm trong kho ứng dụng của Ubuntu, ta sẽ dùng trình quản lí gói apt
để cài đặt.
Update local package index để cập nhật phiên bản mới nhất của ứng dụng, sau đó cài Nginx:
sudo apt-get update sudo apt-get install nginx
Trên Ubuntu 16.04, Nginx được cấu hình sắn để tự động khởi động cùng hệ thống, nên ta không cần làm gì thêm.
Nếu ufw
firewall đang bật, bạn sẽ cần cấu hình lại nó để cho phép những kết nối đến Nginx. Trong quá trình cài đặt, Nginx tự đăng kí profile của mình với ufw
. Bình thường chỉ cần chọn chế độ kết nối sao cho firewall chỉ cho phép một lượng tối thiểu truy cập đến server. Ở đây, do chưa cấu hình SSH cho server, ta chỉ cho phép cổng 80( cổng mặc định cho các thông điệp HTTP)
Dùng lệnh:
sudo ufw allow 'Nginx HTTP'
Kiểm tra trang thái của ufw
sudo ufw status
Ouput:
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Với thiết lập firewall mới, bạn có thể kiểm tra lại xem server có hoạt động đúng yêu cầu hay chưa bằng cách truy cập vào tên miền( domain name) hoặc public IP address của server của bạn trong trình duyệt.
Nếu server chưa có tên miền và bạn cũng không biết piblic IP adress của nó. bạn có gõ lệnh sau trên terminal:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Chọn trong số các địa chỉ IP được hiển thị để kiểm tra kết nối.
Một cách khác là dùng lệnh:
curl -4 icanhazip.com
Nhập địa chỉ IP hoặc tên miền của server vào trình duyệt:
http://server_domain_or_IP
Nếu thấy trang web trên được hiển thị, bạn đã thành công.
Bước 2: Cài đặt MySQL
Giờ hãy tiến hành cài đặt MySQL, hệ quản trị cơ sở dữ liệ để lưu trữ các trang web với lệnh:
sudo apt-get install mysql-server
Nhập vào mật khẩu root của bạn để tiếp tục.
Đến đây MySQL đã được cài đặt, nhưng vẫn chưa được cấu hình để sử dung. Để cấu hình MySQL, trước hết hãy cài đặt những gói bảo mật của nó với lệnh:
mysql_secure_installation
Nhập vào root password của bạn một lần nữa.Tiếp theo bạn sẽ được hỏi có muốn cấu hình VALIDATE PASSWORD PLUGIN
hay không.
Warning: Kích hoạt tính năng này đôi khi lại gây những bất tiện. Khi nó được kích hoạt, những mật khẩu không thỏa mãn về bảo mật sẽ không được chấp nhận. Vấn đề sẽ xảy ra nếu bạn dùng một mật khẩu yếu để kết hợp với những phần mềm tự động thay đổi cấu hình user của MySQL, chẳng hạn như một số gói của Ubuntu dành cho phpMyAdmin. Bạn có thể bỏ qua bước này, nhưng hãy dùng những mật khẩu đủ mạnh để đảm bảo bảo mật cho hệ thống.
Nhập y để đồng ý, hoặc bất cứ kí tự khác để bỏ qua.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Nếu chọn y, bạn sẽ cần chọn mức độ bảo mật. Nếu chọn 2 cho mức bảo mật cao nhất, mật khẩu của bạn phải chứa số, chữ in hoa và in thường cũng như các kí tự đặc biệt, và những từ có trong từ điển (tiếng Anh) cũng sẽ không được chấp nhận.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Sau đó bạn sẽ nhận được một thông báo về độ bảo mật của root pasword, và yêu cầu có muốn đổi mật khẩu hay không. Chọn n để giữ nguyên.
Using existing password for root.
Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Với phần còn lại , bấm Y rồi Enter. Bạn đã tăng tính bảo mật bằng cách xóa bỏ các tài khoản vô danh, các test database, khóa chức năng đăng nhập từ xa cho tài khoản root và tải một số quy định mới.
Đến đây hãy chuyển đến Bước 3.
Bước 3: Cài đặt PHP
Chúng ta đã cài đặt Nginx để làm web server và MySQL để lưu trữ dữ liệu. Tuy nhiên ta vẫn chưa có khả năng xử lí và hiển thị những web động, và PHP sẽ giúp ta giải quyết vấn đề này.
Do Nginx không hỗ trợ xử lý PHP thuần như những web server khác, ta cần cài php-fpm
(fastCGI process manager) và chuyển những yêu cầu xử lí động đến để nó xử lí.
Chúng ta có thể vừa cài module này và một vài helper package (gói trợ giúp) giúp PHP có thể giao tiếp với cơ sở dữ liệu. Gõ lệnh:
sudo apt-get install php-fpm php-mysql
Cấu hình PHP Processor (Bộ xử lí PHP)
Sau khi cài đật những thành phần của PHP, ta cần bảo mật chúng bằng cách edit file cấu hình chính của php-fpm bằng nano:
sudo nano /etc/php/7.0/fpm/php.ini
Tìm đến thuộc tính cgi.fix_pathinfo
. được đánh dấu bằng dấu chấm phẩy (;) và có giá trị mặc định là "1".
Đây là một cài đặt cực kì kếm bảo mật, vì nó yêu cầu PHP chạy file gần nhất nếu không thể phản hồi chính xác file PHP cần tìm. Điều này cho phép user truy cập vào những file PHP không được phép. Ta sẽ sửa file này bằng cách xóa dấu ";" và set giá trị của nó về 1 như sau:
cgi.fix_pathinfo=0
Lưu và đóng file, song đó khởi động lại PHP processor với lệnh:
sudo systemctl restart php7.0-fpm
Bước 4: Cấu hình Nginx để sử dụng PHP Processor
Như đã đề cập ở bước 3, những thành phần động không thể được bằng Nginx thuần túy mà phải thông qua PHP Processor. Ta sẽ điều hướng những yêu cầu PHP đến PHP processor để xử lí chúng.
Ta sẽ thực hiện nó tở mức server block (server block gần giống với Virtual Host của Apache). Mở file cấu hình mặc định cho Server Block của Nginx:
sudo nano /etc/nginx/sites-available/default
Nó sẽ trông gần giống thế này:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}}
Ta sẽ chỉnh sửa một số mục như sau:
- Thêm
index.php
thành giá trị đàu tiên của dòngindex
để những file tênindex.php
có thể được gọi khi có thể. - Đổi
server_name
thành domain name hoặc public IP address của server của bạn. - Bỏ dấu (#) ở đầu mỗi dòng trong khối địa chỉ
location ~\.php$
bao gồm snippetfastcgi-php.conf
, và socket kết nối vớiphp-fpm
để cho phép xử lí những file .php trong khối địa chỉ đó(xem phần chữ đỏ) - Làm tương tự với những file trong khối địa chỉ
.htaccess
để chặn tất cả các yêu cầu đến những file trong này.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/run/php/php7.0-fpm.sock;}location ~ /\.ht {deny all;}}
Lưu rồi đóng file.
Kiểm tra lỗi cú pháp:
sudo nginx -t
Nếu phát hiện lỗi, mở lại file rồi sửa chúng.
Reload Nginx để lưu những thay đổi.
sudo systemctl reload nginx
Bước 5: Tạo File PHP để test
LEMP stack của bạn đến đây đã được cài xong. Ta sẽ kiểm tra lại xem Nginx đã chuyển việc xử lí các file .php
đến PHP processor chưa.
Tạo một file PHP trong thư mục root tên info.php
bằng nano:
sudo nano /var/www/html/info.php
Paste đoạn code sau vào:
Lưu rồi đóng.
Gõ lệnh sau để yêu cầu file
/info.php
từ server:
http://server_domain_or_IP/info.php
Trang mặc định của PHP:
Xóa file .php vùa tạo, vì nó sẽ để lộ thông tin về server cho người khác bằng lệnh:
sudo rm /var/www/html/info.php