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). 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é.
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ì?Đầu tiên thì tìm hiểu về lý thuyết trước vậy. Theo Mắt Bão thì:
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 deployCài đặt nginxsudo apt-get install nginx Cài đặt PHP & PHP-FPM & các modules cần thiếtsudo 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 MySQLsudo apt-get install mysql-server Sau đó nhập password: Đăng nhập MySQL với password ở trên: Thêm database bằng query sau: CREATE DATABASE laravel_test; Cài composerComposer 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à YarnBạ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 LaravelTiế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: 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 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 NginxDi 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é. 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ỉ: 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 GoXong 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! |