Deploy project PHP lên VPS sử dụng nginx, php-fpm

Xin chào mọi người. Trước đây mình đã có một bài viết về việc deploy project Laravel lên VPS rồi. Tuy nhiên trong bài viết đó mình đang sử dụng apache2 để làm webserver (các bạn có thể xem lại bài viết ở đây Hướng dẫn deploy project Laravel lên VPS Ubuntu).
Hôm nay, nhân một ngày đẹp trời mình quyết định viết thêm 1 bài hướng dẫn cách deploy project PHP lên VPS sử dụng webserver là nginx cho nó đủ bộ. À, trong hướng dẫn này mình vẫn tiếp tục sử dụng framework Laravel nhé.

Rào trước đón sau tí là trong bài viết này có thể còn nhiều điều sai xót có gì mong các bạn góp ý mình sẽ sửa lại sau nhé.

Nginx là gì?

NGINX] Giới hạn số lượng request trong một khoảng thời gian ...

Như mình đã nói ở trên là trong hướng dẫn này mình sẽ sử dụng Nginx để làm webserver chính vì vậy trước tiên mình phải tìm hiểu Nginx là gì đã chứ nhỉ.

NGINX, đọc là “engine-ex”, phiên âm tiếng Việt ra các cụ thường đọc là “en din ích xì” hay mình có thấy một vài bạn đọc là “nghin x”. Nginx bản thân nó là một phần mềm web server mã nguồn mở nỗi tiếng và được sử dụng rộng dãi trên thế giới. Ban đầu nó dùng để phục vụ web HTTP. Tuy nhiên, ngày nay nó cũng được dùng làm reverse proxy, HTTP load balancer và email proxy như IMAP, POP3, và SMTP.

Bởi vì khả năng mạnh mẽ và nó có thể xử lý hàng ngàn kết nối cùng lúc, nhiều website có traffic lớn đã sử dụng dịch vụ NGINX. Một vài trong số những ông lớn công nghệ dùng nó là Google, Netflix, Adobe, Cloudflare, WordPress, và còn nhiều hơn nữa.

Đấy, vì mạnh mẽ và vượt trội như vậy nên là hiện tại nginx đã sắp sửa vượt qua apache về số lượng website sử dụng rồi đó nhé (15/05/2020).

php-fpm là gì?

PHP-FPM monitoring and integration with Zabbix

Đầu tiên thì tìm hiểu về lý thuyết trước vậy. Theo Mắt Bão thì:

PHP-FPM viết tắt của FastCGI Process Manager là chương trình có chức năng thông dịch PHP khi chạy trang web cho web serverPHP-FPM được hình thành dựa trên sự mở rộng của CGI và hiện đang được đông đảo người dùng lựa chọn.

Về cơ bản, PHP-FPM có chức năng tối ưu quá trình xử lý thông tin của các máy chủ web, hỗ trợ việc xử lý thông tin từ nhiều trang web trong cùng một khoảng thời gian một cách nhanh nhất. php-fpm có PHP script nhanh cùng tính năng tối ưu hoá cho những trang web có kích thước lớn, giúp tăng lượng truy cập

Nghe thì phức tạp và mình nghĩ nhiều người cũng…chưa hiểu đúng không. Thôi thì để các bạn hiểu được thì mình sẽ giải thích đơn giản như sau nhá. Bản thân thằng nginx nó là một web server thôi nên nó ko hiểu và tự chạy ược PHP. Chính vì vậy nó cần php-fpm để quản lý các tiến trình cũng như dịch và chạy PHP.

Các bước deploy

Cài đặt nginx

sudo apt-get install nginx

Cài đặt PHP & PHP-FPM & các modules cần thiết

sudo apt-get install php curl unzip php-pear php-fpm php-dev php-zip php-curl php-xmlrpc php-gd php-mysql php-mbstring php-xml

Cài MySQL

sudo apt-get install mysql-server

Sau đó nhập password:

Đăng nhập MySQL với password ở trên:

mysql -u root -p

Thêm database bằng query sau:

CREATE DATABASE laravel_test;

Cài composer

Composer

Composer là một công cụ được sử dụng rộng rãi với các website/ứng dụng sử dụng PHP. Nó là một công cụ quản lý các thư viện mà project của bạn sử dụng, bạn chỉ cần khai báo nó, composer sẽ tự động tải code của các thư viện, tạo ra các file cần thiết vào project của bạn, và update các thư viện nếu cần. Nếu bạn đã từng làm việc với Nodejs thì Composer cũng giống như là npm hay là yarn vậy.

sudo curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Cài đặt Nodejs và Yarn

Bạn đang thắc mắc kiểu: “Ủa, deploy PHP cài Nodej làm chi vại???” đúng không. Chúng ta vẫn nên cài Nodejs để có thể sử dụng được Laravel Mix của Laravel nhé.

Nodejs

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - && sudo apt-get install -y nodejs

Yarn

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn

Cài đặt project Laravel

Tiếp theo là cài đặt project Laravel nhé. Các bạn di chuyển vào thư mục /var/www/html/ bằng cách:

cd /var/www/html/

Nếu có project sẵn rồi thì các bạn có thể kéo code trên git về để chạy:

git clone <repository>

Còn nếu deploy project mới thì các bạn có thể cài đặt bằng cách:

composer create-project --prefer-dist laravel/laravel test_project

Di chuyển vào trong thư mục project rồi tiếp tục chạy các lệnh sau để cài các thư viện cho project:

Cài đặt các thư viện composer

composer install

Cài các thư viện node

yarn install
yarn run prod

Copy .env và setting cấu hình cần thiết

cp .env.example .env
php artisan key:generate

Các bạn vào .env để thay đổi các thiết lập cho dự án ví dụ như database, mail, redis,… Với database thì lúc nãy mình có cài đặt và thiết lập MySQL rồi đó. Các bạn lấy lại thông số và cho vào thôi nhé.

Config Nginx

Di chuyển vào thư mục /etc/nginx/sites-available của Nginx

cd /etc/nginx/sites-available

Tạo ra 1 file config, ở đây mình lấy tên là demo nhé.

sudo touch demo

Tiếp theo paste đoạn phía dưới vào:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/html/test_project/public;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name localhost;

    location / {
    try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
      try_files $uri /index.php =404;
      fastcgi_pass unix:/var/run/php/php-fpm.sock;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }

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

Nhớ thay đổi đường dẫn sau thành đường dẫn đến thư mục public của project của bạn nhé:

root /var/www/html/test_project/public;

Tạo 1 symlink từ file config đến thư mục /etc/nginx/sites-enabled/ bằng cách:

sudo ln -s /etc/nginx/sites-available/demo /etc/nginx/sites-enabled/

Check lại config xem đúng chưa cái nhỉ:

sudo nginx -t

Nếu hiện thị như sau là đúng

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Và cuối cùng là restart lại nginx:

sudo /etc/init.d/nginx restart 

Go

Xong xuôi tất cả các bước rồi đó, mình đã test nhiều lần nên các bước trên bạn chỉ cần thực hiện theo là thành công nhé. Nếu còn điều gì thắc mắc vui lòng comment phía dưới, mình sẽ cố gắng nhanh chóng trả lời bạn sớm nhất. Cảm ơn các bạn!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *