Bài viết dành cho các bạn đang muốn và có ý định triển khai website chạy bằng (PHP, Nodejs) lên VPS hệ điều hành Ubuntu 20.04 – 18.04.
Tại sao lại sử dụng LEMP stack?
LEMP sử dụng Nginx là một phần mềm web server có hiệu năng cao và có tính năng cân bằng tải tốt khi lượng truy cập lớn giúp website hoạt động ổn định hơn.
LEMP là viết tắt của L( Linux ), E( Engine x ), M( MySQL/Mariadb ), P( PHP ) và đây là một trong những biến thể của web server. Biến thể ở đây là bạn có thể thay đổi thêm, xóa các thành phần trên để tạo ra một môi trường lý tưởng để chạy project của bạn một cách tốt nhất ví dụ đơn giản chúng ta có XAMPP. Trên máy tính windows các bạn cài XAMPP thì đã bao gồm Apache, MySQL, PHP còn X là tổng hợp các hệ điều hành được XAMPP hỗ trợ hiện nay(Linux, Windows, MacOS) là các thành phần đã được có sẵn. Cài xong chỉ cần bấm nút “start” để bật lên, tuy nhiên khi sử dụng VPS hệ điều hành linux điển hình như Ubuntu thì sẽ không có giao diện. Bài viết này sẽ giúp các bạn tự cài đặt môi trường web server để chạy PHP hoặc Nodejs.
Lưu ý: Bài viết chỉ giúp mọi người cài đặt và chạy được code của PHP, mình sẽ không giải thích quá sâu vào từng thành phần của LEMP stack. Nếu các bạn muốn mình viết sâu hơn về chủ đề này thì hãy comments để mình tiếp tục các phần sau.
Trước khi làm theo mình, các bạn có thể đọc và tìm hiểu trước về các sử dụng command linux hoặc của Ubuntu, cách sử dụng nano editor hoặc vim.
1: Cập nhật và nâng cấp các gói có sẵn và đã cũ trong hệ thống.
Câu lệnh trên giúp các bạn cập nhật các gói (package) có sẵn trong hệ thống có đường dẫn file: /etc/apt/sources.list.d, -y cuối câu dùng để chấp nhận các package cần thiết khi update và nâng cấp được để xuất.
Lưu ý: Phải chạy câu lệnh update trước câu lệnh nâng cấp upgrade. Vì update có chức năng đồng bộ hóa lại các index file từ các nguồn có trong /etc/apt/sources.list.d.
2: Cài đặt Nginx.
Sau khi cập nhật và nâng cấp các gói trong hệ thống các bạn bắt đầu chạy các câu lệnh để cài đặt Nginx dưới đây.
Lưu ý: Nếu sau khi chạy câu lệnh trên hệ thống yêu cầu nhập khẩu, và mật khẩu khi nhập ở màn hình command thì mật khẩu sẽ không hiện ******* chỉ cần nhập xong và nhấn Enter.
Sau khi cài đặt xong chạy tiếp câu lệnh:
Sau khi chạy câu lệnh màn hình sẽ hiển thị version hiện tại của nginx bạn đã cài:
2.1: Cấu hình tường lửa.
Tại sao chúng ta cần cấu hình tường lửa? Cấu hình tường lửa để đảm bảo tính bảo mật và cho phép lưu lượng truy cập qua các cổng mặt định của webserver, thông thường các web sẽ sử dụng hai giao thức là HTTP & HTTPS tương đương với cổng mặc định 80 & 443.
Các bạn chạy hai câu lệnh sau:
Sau khi chạy hai câu lệnh trên xong màn hình của bạn sẽ hiển thị như sau:
2.2: Khởi động Nginx.
Đầu tiên các bạn cần kiểm tra trạng thái hoạt động của Nginx bằng cách chạy câu lệnh sau:
Nếu màn hình hiện ra như này thì nginx chưa hoạt động:
Để nginx hoạt động các bạn hãy chạy câu lệnh sudo systemctl start nginx:
Sau khi chạy câu lệnh trên xong các bạn hãy kiểm tra trạng thái của nginx.
Như vậy là nginx đã hoạt động.
Sau đó chạy tiếp câu lệnh: sudo systemctl enable nginx.
Câu lệnh này cho phép nginx khởi động cùng hệ thống.
Giờ các bạn mở trình duyện và gõ: hoặc .
3: Cài đặt MySQL.
MySQL một hệ thống quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất được sử dụng từ các website lớn tới nhỏ.
Để cài đặt MySQL các bạn thực hiện như theo bên dưới.
Chạy câu lệnh cài đặt MySQL:
Sau khi cài đặt xong chúng ta sẽ chạy tiện ích mysql_secure_installation để cấu hỉnh bảo mật.
Mysql_secure_installation sẽ giúp chúng ta cài đặt mật khẩu root MySQL, xóa người dùng ẩn danh, vô hiệu hóa remote mysql và xóa cơ sở dữ liệu test.
Các bạn có thể làm theo như mình hoặc tùy chọn theo ý của các bạn.
Tiếp theo đăng nhập vào MySQL bằng user root:
Như vậy các bạn đã truy cập vào MySQL. Thoát MySQL các bạn gõ exit; hoặc quit;
Lưu ý: Từ phiên bản MySQL 5.7 trở đi, user root của MySQL có thể đăng nhập mà không cần sử dụng mật khẩu như ở trên sau khi cấu hình mysql_secure_installation. Các bạn chỉ cần chạy câu lệnh sudo mysql là có thể đăng nhập vào MySQL rất là tiện lợi và nhanh chóng. Nhưng sẽ có một vấn đề là khi chúng ta cần kết nối từ bên ngoài vào, ví dụ như sử dụng các phần mềm quản lý MySQL bên thứ 3 như: Navicat, phpMyAdmin v..v, thì việc truy cập sẽ rất phức tạp, nhất là khi cấu hình trên server và cần truy cập quả lý cơ sở dữ liệu từ xa.
Để giải quyết vấn đề này các bạn sẽ tạo một user mới với chức năng dùng để Remote Access đến MySQL trên server.
Vẫn ở màn hình command trong MySQL server, nếu bạn đã thoát ra thì hãy vào lại bằng sudo mysql.
3.1: Show user MySQL
Chạy câu lệnh sau để kiểm tra các user đang có trong MySQL:
Đây là list user của mình mặc định khi cài đặt MySQL sẽ có, một số bạn sẽ hơi khác chút nhưng không có vấn đề gì cả.
3.2: Tạo user MySQL.
Câu lệnh tạo user mới trong MySQL:
Giải thích qua về ký tự % có nghĩa là chấp nhận tất cả các kết nối từ cục bộ và bên ngoài với user này.
3.3: Cấp quyền cho user.
Tiếp theo là cấp quyền cho user có thể thao tác với tất cả database, thêm , sửa, xóa, các dữ liệu trong bảng.
Chạy tiếp câu lệnh FLUSH PRIVILEGES để tải lại và chấp nhận các thay đổi mới.
Kiểu tra lại list user xem đã thêm mới user thành công hay chưa:
Mình đã thêm mới user: user_demo1, và khi kiểm tra list user thì có user_demo1. Như vậy là mình đã thêm thành công.
3.4: Remote Access MySQL.
Khi các bạn cài đặt MySQL server thì sẽ cần cấn kết nối từ bên ngoài vào để quản lý database thực hiện các công việc như thêm, sửa, xóa các bảng, các cột. Nhưng hiện tại chúng ta không thể kết nối đến MySQL được, vì mặc định MySQL khi cài đặt xong file cấu hình mysqld.cnf sẽ cấu hình MySQL kết nối cục bộ, các kết nối từ bên ngoài với user_demo1 mình vừa tạo sẽ không kết nối từ bên ngoài vào được. Vì vậy cần phải truy cập đến file mysqld.cnf để chỉnh sửa cho MySQL nhận kết nối từ bên ngoài vào.
Các bạn chạy câu lệnh sau:
Tìm đến dòng bind-address, mặc định sẽ là bind-address = 127.0.0.1 các bạn hay thay đổi địa chỉ ip 127.0.0.1 = 0.0.0.0 để nhận tất cả các kết nối từ cục bộ đến bên ngoài. Nếu trong file mysqld.cnf của bạn không có dòng bind-address thì bạn tự thêm vào. Sau đó nhấn tổ hợp phim: Ctrl + X, Y, Enter với nano để lưu thay đổi.
Sau đó restart lại MySQL để chấp nhận thay đổi mới.
Sau đó bạn hãy dùng Navicat hoặc phpMyAdmin để kết nối đến MySQL server.
Lưu ý: field host khi các bạn nhập nếu là ở desktop sẽ là localhost hoặc 127.0.0.1, nếu là VPS thì sẽ điều IP của VPS vd: 34.231.411.22.
4: Cài đặt PHP.
Trong bài viết hướng dẫn này mình sẽ cài đặt phiên bản PHP8.0.
Các bạn chạy câu lệnh sau:
Cài thêm các gói cần thiết để chạy một project PHP.
Sau khi cài đặt hoàn tất các bạn hãy khởi động php8.0-fpm.
Cho phép chạy cùng hệ thống.
Kiểm tra trạng thái của php-fpm có hoạt động không.
5: Cấu hình PHP-FPM.
Mặc định Nginx không thể đọc được các file code có đuôi .php. Vì vậy muốn Nginx đọc được các file có đuôi .php các bạn cấu hình php-fpm có thể giao tiếp với Nginx. PHP-FPM có trách nhiệm dịch các file code php sang html để Nginx có thể hiểu và hiển thị ra bên ngoài giao diện website. Và trong bài hướng dẫn này mình sẽ cấu hình PHP-FPM theo giao thức TCP.IP socket.
Mở file cấu hình theo đường dẫn: /etc/php/8.0/fpm/pool.d/www.conf .
Các bạn tìm đến dòng “listen = /run/php/php8.0-fpm-sock”.
Thêm dòng “listen = 0.0.0.0:9000” ở dưới.
Tiếp theo nhấn tổ hợp phím Ctrl + w và gõ pong. Các bạn hãy bỏ dấu ; trước dòng
;ping.responese = pong
;ping.path = /ping và lưu lại.
Khởi động lại PHP-FPM để cấu hình có hiệu lực.
Để kiểm tra xem PHP-FPM và Nginx đã kết nối được với nhau hay chưa ta sử dụng đoạn lệnh sau:
“SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping REQUEST_METHOD=GET cgi-fcgi -bind – connect 0.0.0.0:9000”
Ra pong như này là PHP-FPM và Nginx đã kết nối được với nhau.
6: Tạo Nginx Server Block.
Đầu tiên các bạn cần back-up một file cấu hình gốc của Nginx phòng khi cần thì có cái để dùng.
Do chúng ta sẽ không dùng file gốc của Nginx để cấu hình nên mình sẽ xóa nó đi.
Các bạn tạo một file mới và copy code cấu hình của mình làm sẵn ở dưới.
Các bạn tại file cấu hình Nginx của mình tại đây: .
Dàn vào như này:
Lưu ý: Phần root /var/www chính là đường dẫn đến folder chứa file code.
Lưu lại vào và chạy câu lệnh:
Kiểm tra xem cấu hình Nginx đã đúng chưa:
Như hình bên dưới là cấu hình thành công không bị lỗi.
Tiếp theo restart Nginx để nhận cấu hình mới:
Tạo file info.php để kiểm tra Nginx đã chạy được file php hay chưa.
Dán phần đoạn code này vào lưu lại:
Bây giờ trong thanh địa chỉ của trình duyệt, nhập server-ip-address/info.php, ví dụ localhost/info.php, server: 34.324.123.11/info.php
Kết quả như này là được:
Như vậy mình đã hướng dẫn các bạn cách cài đặt & cấu hình để lemp stack chạy được, các vấn đề lỗi gặp phải các bạn có thể comment bên dưới hoặc tham gia nhóm để cùng giao lưu và chia sẻ kiến thức nhé.
Chúc các bạn thành công.