Làm sao để cài đặt Nginx, MySQL, PHP trên Ubuntu (LEMP Stack)

Nội dung bài viết

LEMP là viết tắt của Hệ điều hành mã nguồn mở Linux – Máy chủ Web Nginx (phát âm Engine X) – Hệ quản trị cơ sở dữ liệu MySQL – PHP. Đây là các thành phần cần thiết để xây dựng một VPS vận hành website sử dụng ngôn ngữ lập trình PHP. How4VN sẽ hướng dẫn các bạn cài đặt LEMP Stack (Nginx, MySQL, PHP) trên VPS chạy HĐH Ubuntu.

Lý do chọn Ubuntu cho VPS

Sau khi tham khảo nhiều bài viết so sánh hiệu năng giữa CentOS và Ubuntu, How4VN thấy có nhiều ý kiến cho rằng sự kết hợp giữa Nginx và Ubuntu sẽ cho một hiệu suất tốt hơn so với CentOS. Ngoài ra, tôi cũng thích sự sắp xếp thư mục của Ubuntu hơn CentOS.

Điều kiện thực hiện

Bạn cần một VPS đang chạy hệ điều hành Ubuntu, lời khuyên là bản Ubuntu 18.04 như tôi đang sử dụng vì tính ổn định và hiệu suất làm việc tốt.

Bạn có thể sử dụng các nhà cung cấp Cloud VPS uy tín như DigitalOcean , Vultr với Server đặt tại Singapore hoặc Tokyo. Nếu có điều kiện thì 01 VPS tại VN sẽ cho tốc độ tối ưu hơn nữa. Nếu được, hãy đăng ký bằng link ở trên để ủng hộ How4VN nhé.

Sử dụng các lệnh trên tài khoản Root hoặc Superuser.

Cập nhật chỉ mục và hệ điệu hành trước khi bắt đầu:

apt update 
apt dist-upgrade

Bước 01: Cấu hình tường lửa UFW (Uncomplicated Firewall) 

Ubuntu thường được cài sẵn tường lửa UFW (Uncomplicated Firewall) nhưng chưa được kích hoạt (inactive), bạn có thể kiếm tra trạng thái của UFW bằng cách sử dụng lệnh:

sudo ufw status

Bạn nên kích lửa và cấu hình tường lửa UFW – nó sẽ giúp bạn nâng cao tính bảo mật của VPS.

Hãy bắt đầu bằng các rule mặc định của UFW bằng các lệnh:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Với 02 lệnh trên, mặc định các kết nối ra bên ngoài sẽ được chấp thuận và chặn toàn bộ các kết nối từ ngoài vào máy chủ. Với VPS là không đủ, bạn cần thiết lập UFW cho phép kết nối SSH từ ngoài vào VPS của bạn.

sudo ufw allow ssh

Hoặc: sudo ufw allow 22 hay bất cứ port nào nếu bạn đã đổi port SSH.

Kích hoạt tường lửa UFW và kiểm tra trạng thái:

sudo ufw enable
sudo ufw status

Lưu ý: Đừng thử enable UFW trước khi cấu hình rule SSH, bạn sẽ không thể truy cập vào VPS.

Bước 02. Cài đặt Nginx

Bắt đầu cài đặt Nginx bằng lệnh

sudo apt install nginx -y

Cho phép Nginx qua tường lửa UFW

sudo ufw allow 'Nginx HTTP'
sudo ufw status

Lúc này bạn truy cập vào địa chỉ IP của VPS trên trình duyệt web sẽ thấy trang Welcome to nginx!

Bước 03. Cài đặt MySQL

Sử dụng lệnh:

sudo apt install mysql-server

Cấu hình MySQL:

sudo mysql_secure_installation

Trong tất các các trường hợp được hỏi bạn có thể chọn YES nhưng cân nhắc ở lựa chọn đầu tiên VALIDATE PASSWORD PLUGIN. Nếu bật tính năng này nếu mật khẩu bạn đặt để truy cập MySQL không đủ mạnh và phù hợp với các tiêu chí đề ra, Plugin sẽ chặn truy cập này và báo lỗi.

Nếu bạn sẵn sàng kích hoạt nó, hãy lưu ý có 03 phương án lựa chọn tương ứng các yêu cầu khi đặt mật khẩu truy cập MySQL. Ở mức đọ 2 STRONG, mật khẩu của bạn sẽ không được sử dụng các từ thông dụng trong từ điể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:

Một lưu ý nhỏ là từ bản MySQL 5.7 trên nền Ubuntu, theo mặc định tài khoản root sẽ được chứng thực qua auth_socket plugin thay vì mật khẩu. Việc này sẽ mang lại 01 số lợi ích về bảo mật và tiện lợi nhưng cũng có một số rắc rối khi bạn muốn sử dụng các chương trình bên ngoài truy cập vào MySQL như phpMyAdmin…

Tôi đã giải quyết việc này bằng cách tạo một User khác có quyền truy cập cơ sở dữ liệu để dùng riêng như phpMyAdmin, bạn có thể làm giống tôi hoặc đơn giản hơn là chuyển việc chứng thực từ auth_socket plugin qua mysql_native_password theo các lệnh sau:

$ sudo mysql
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
> FLUSH PRIVILEGES;
> SELECT user,authentication_string,plugin,host FROM mysql.user;
> exit

Lưu ý: Sau khi chuyển qua mysql_native_password bạn sẽ không thể sử dụng lệnh sudo mysql để truy cập MySQL được nữa mà thay bằng lệnh mysql -u root -p và nhập mật khẩu.

Bước 04. Cài đặt PHP và cấu hình PHP hoạt động trên Nginx

Để cài đặt PHP đầu tiên chúng ta thêm các thư viện cho Ubuntu, tùy theo nhà cung cấp VPS của bạn có thể nó được cài sẵn hoặc không.

sudo add-apt-repository universe

Tiếp đó cài đặt PHP và gói hỗ trợ:

sudo apt install php-fpm php-mysql

Kiểm tra trạng thái hoạt động của php bằng lệnh systemctl status php7.2-fpm hoặc thay bằng version bạn đã cài (php7.3-fpm hoặc php5.6-fpm).

Tiếp tới bạn phải tạo 01 file cấu hình cho Nginx cho domain của bạn:

sudo nano /etc/nginx/sites-available/cloud.how4vn.com

Nếu có nhiều domain thì bạn tạo các file cầu hình tương tự cho các domain khác, một file cấu hình tiêu chuẩn sẽ có dạng như sau:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name cloud.how4vn.com;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Những phần màu đó là những phần bạn thay đổi theo cấu hình của bạn như: thư mục chứa Website (root) – domain của bạn (server-name) hoặc phiên bản php bạn đang sử dụng.

Bạn có thể sử dụng cấu hình mà tôi chia sẻ hoặc sửa lại file cấu hình mặc định của Nginx với lệnh sudo nano /etc/nginx/sites-available/default

Cuối cùng chúng ta link file config tới thư mục enabled của Nginx để kích hoạt file config vừa tạo:

sudo ln -s /etc/nginx/sites-available/cloud.how4vn.com /etc/nginx/sites-enabled/

Unlink file Config Default nếu bạn không sử dụng tới

sudo unlink /etc/nginx/sites-enabled/default

Để kiểm tra file config và khởi động lại Nginx, dùng 02 lệnh sau:

sudo nginx -t
sudo systemctl reload nginx

Cuối cùng bạn tạo 01 file php để kiểm tra PHP hoạt động trên Nginx sudo nano /var/www/html/index.php với nội dung:

<?php
phpinfo();

Và truy cập domain hoặc địa chỉ IP của VPS trên trình duyệt của bạn để xem thông tin PHP đã được hiển thị.

Vậy là chúng ta đã hoàn tất việc cài đặt một Web Server qua 4 bước đơn giản.

Hy vọng thông qua bài viết này bạn đã nắm được cách thức vận hành của một Web Server tiêu chuẩn. Sau này, How4VN sẽ có thêm 01 số bài viết khác giúp bạn tinh chỉnh, sao lưu VPS, cài đặt HTTPS để hoàn thiện hơn Web Server của bạn.

Chúc bạn thành công với ý tưởng của mình.

How4VN.com

BÀI VIẾT TƯƠNG TỰ:

 

0 0 votes
Đánh giá bài viết
Nhận thông báo
Thông báo khi
guest

0 Góp ý
Inline Feedbacks
View all comments