Cách cài đặt và cấu hình Laravel với Nginx trên Ubuntu 20.04
Laravel là một khung công tác PHP open-souce cung cấp một bộ công cụ và tài nguyên để xây dựng các ứng dụng PHP hiện đại. Với một hệ sinh thái hoàn chỉnh tận dụng các tính năng tích hợp của nó, sự phổ biến của Laravel đã phát triển nhanh chóng trong vài năm qua, với nhiều nhà phát triển đã sử dụng nó làm khuôn khổ lựa chọn của họ cho một quá trình phát triển hợp lý.Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình ứng dụng Laravel mới trên server Ubuntu 20.04, sử dụng Composer để download và quản lý các phụ thuộc khung và Nginx để phục vụ ứng dụng. Khi bạn hoàn tất, bạn sẽ có một ứng dụng demo Laravel chức năng kéo nội dung từ database MySQL 8.
Yêu cầu
Để hoàn thành hướng dẫn này, trước tiên bạn cần thực hiện các việc sau trên server Ubuntu 20.04 của bạn :
- Tạo user
sudo
và bậtufw
. Để cài đặt điều này, bạn có thể làm theo hướng dẫn Cài đặt Server Ban đầu với Ubuntu 20.04 của ta . - Cài đặt LEMP với MySQL 8 . Nếu bạn chưa cài đặt điều này, bạn có thể làm theo các bước từ 1 đến 3 trong hướng dẫn của ta về Cách cài đặt Nginx, MySQL và PHP trên Ubuntu 20.04 .
- Cài đặt Composer . Ta sẽ sử dụng Composer để cài đặt Laravel và các phụ thuộc của nó. Bạn có thể cài đặt Composer theo hướng dẫn của ta về Cách cài đặt Composer trên Ubuntu 20.04 .
Bước 1 - Cài đặt các module PHP bắt buộc
Trước khi có thể cài đặt Laravel, bạn cần cài đặt một vài module PHP theo yêu cầu của khuôn khổ. Ta sẽ sử dụng apt
để cài đặt các module PHP php-mbstring
, php-xml
và php-bcmath
. Các phần mở rộng PHP này cung cấp hỗ trợ thêm cho việc xử lý mã hóa ký tự, XML và toán học chính xác.
Nếu đây là lần đầu tiên sử dụng apt
trong phiên này, trước tiên bạn nên chạy các update
lệnh để cập nhật bộ nhớ cache quản lý gói:
- sudo apt update
Đến đây bạn có thể cài đặt các gói cần thiết với:
- sudo apt install php-mbstring php-xml php-bcmath
Hệ thống của bạn hiện đã sẵn sàng để thực hiện cài đặt Laravel thông qua Composer, nhưng trước khi thực hiện, bạn cần một database cho ứng dụng của bạn .
Bước 2 - Tạo database cho ứng dụng
Để chứng minh cách cài đặt và sử dụng cơ bản của Laravel, ta sẽ tạo một ứng dụng danh sách du lịch để hiển thị danh sách các địa điểm mà user muốn đến và danh sách các địa điểm mà họ đã ghé thăm. Điều này có thể được lưu trữ trong một bảng địa điểm với một trường cho các vị trí mà ta sẽ gọi tên và một trường khác để đánh dấu chúng là đã ghé thăm hoặc chưa ghé thăm , mà ta sẽ gọi là đã ghé thăm . Ngoài ra, ta sẽ bao gồm một trường id để xác định duy nhất từng mục nhập.
Để kết nối với database từ các ứng dụng Laravel, ta sẽ tạo một user MySQL chuyên dụng, và cấp thành viên này quyền hoàn toàn phần travellist
database .
Tại thời điểm viết bài này, thư viện MySQL PHP mysqlnd
không hỗ trợ caching_sha2_authentication
, phương thức xác thực mặc định cho MySQL 8. Ta cần cài đặt user database của bạn với phương thức xác thực mysql_native_password
để có thể kết nối với database MySQL từ PHP.
Để bắt đầu, hãy đăng nhập vào console MySQL với quyền là user database gốc với:
- sudo mysql
Để tạo database mới, hãy chạy lệnh sau từ console MySQL của bạn:
- CREATE DATABASE travellist;
Đến đây bạn có thể tạo một user mới và cấp cho họ các quyền đầy đủ trên database tùy chỉnh mà bạn vừa tạo. Trong ví dụ này, ta đang tạo một user có tên là travellist_user với mật password
, mặc dù bạn nên thay đổi password này thành password an toàn mà bạn chọn:
- CREATE USER 'travellist_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
Bây giờ ta cần phải cho phép user này trong travellist
database :
- GRANT ALL ON travellist.* TO 'travellist_user'@'%';
Điều này sẽ cung cấp cho người sử dụng quyền travellist_user hoàn toàn phần travellist
database , trong khi ngăn chặn thành viên này từ việc tạo, sửa chữa database khác trên server của bạn.
Sau đó, thoát khỏi MySQL shell:
- exit
Đến đây bạn có thể kiểm tra xem user mới có quyền thích hợp hay không bằng cách đăng nhập lại vào console MySQL, lần này bằng cách sử dụng thông tin đăng nhập user tùy chỉnh:
- mysql -u travellist_user -p
Lưu ý cờ -p
trong lệnh này, nó sẽ nhắc bạn nhập password được sử dụng khi tạo user travellist_user . Sau khi đăng nhập vào MySQL console, xác nhận bạn có quyền truy cập vào các travellist
database :
- SHOW DATABASES;
Điều này sẽ cung cấp cho bạn kết quả sau:
Output+--------------------+ | Database | +--------------------+ | information_schema | | travellist | +--------------------+ 2 rows in set (0.01 sec)
Tiếp theo, tạo một bảng tên places
trong travellist
database . Từ console MySQL, hãy chạy câu lệnh sau:
- CREATE TABLE travellist.places (
- id INT AUTO_INCREMENT,
- name VARCHAR(255),
- visited BOOLEAN,
- PRIMARY KEY(id)
- );
Bây giờ, điền vào bảng places
với một số dữ liệu mẫu:
- INSERT INTO travellist.places (name, visited)
- VALUES ("Tokyo", false),
- ("Budapest", true),
- ("Nairobi", false),
- ("Berlin", true),
- ("Lisbon", true),
- ("Denver", false),
- ("Moscow", false),
- ("Olso", false),
- ("Rio", true),
- ("Cincinnati", false),
- ("Helsinki", false);
Để xác nhận dữ liệu đã được lưu thành công vào bảng của bạn, hãy chạy:
- SELECT * FROM travellist.places;
Bạn sẽ thấy kết quả tương tự như sau:
Output+----+-----------+---------+ | id | name | visited | +----+-----------+---------+ | 1 | Tokyo | 0 | | 2 | Budapest | 1 | | 3 | Nairobi | 0 | | 4 | Berlin | 1 | | 5 | Lisbon | 1 | | 6 | Denver | 0 | | 7 | Moscow | 0 | | 8 | Oslo | 0 | | 9 | Rio | 1 | | 10 | Cincinnati| 0 | | 11 | Helsinki | 0 | +----+-----------+---------+ 11 rows in set (0.00 sec)
Sau khi xác nhận bạn có dữ liệu hợp lệ trong bảng kiểm tra của bạn , bạn có thể thoát khỏi console MySQL:
- exit
Đến đây bạn đã sẵn sàng để tạo ứng dụng và cấu hình nó để kết nối với database mới.
Bước 3 - Tạo một ứng dụng Laravel mới
Đến đây bạn sẽ tạo một ứng dụng Laravel mới bằng cách sử dụng lệnh composer create-project
. Lệnh Composer này thường được sử dụng để khởi động các ứng dụng mới dựa trên các hệ thống quản lý nội dung và khuôn khổ hiện có.
Toàn bộ hướng dẫn này, ta sẽ sử dụng travellist
như một ứng dụng ví dụ, nhưng bạn có thể tự do thay đổi điều này để cái gì khác. Các travellist
ứng dụng sẽ hiển thị một danh sách các địa điểm kéo từ một server MySQL local , nhằm chứng minh cấu hình và xác nhận cơ bản Laravel rằng bạn có thể kết nối với database .
Đầu tiên, hãy truy cập folder chính của user của bạn:
- cd ~
Lệnh sau sẽ tạo ra một mới travellist
folder chứa một ứng dụng barebones Laravel dựa trên các cài đặt mặc định:
- composer create-project --prefer-dist laravel/laravel travellist
Bạn sẽ thấy kết quả tương tự như sau:
OutputInstalling laravel/laravel (v5.8.17) - Installing laravel/laravel (v5.8.17): Downloading (100%) Created project in travellist > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 80 installs, 0 updates, 0 removals - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%) - Installing phpoption/phpoption (1.5.0): Downloading (100%) - Installing vlucas/phpdotenv (v3.4.0): Downloading (100%) - Installing symfony/css-selector (v4.3.2): Downloading (100%) ...
Khi quá trình cài đặt kết thúc, hãy truy cập folder của ứng dụng và chạy lệnh artisan
của Laravel để xác minh tất cả các thành phần đã được cài đặt thành công:
- cd travellist
- php artisan
Bạn sẽ thấy kết quả tương tự như sau:
OutputLaravel Framework 7.11.0 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question --env[=ENV] The environment the command should run under -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug ...
Kết quả này xác nhận các file ứng dụng đã được đặt đúng chỗ và các công cụ dòng lệnh Laravel đang hoạt động như mong đợi. Tuy nhiên, ta vẫn cần cấu hình ứng dụng để cài đặt database và một vài chi tiết khác.
Bước 4 - Cấu hình Laravel
Các file cấu hình Laravel nằm trong một folder được gọi là config
, bên trong folder root của ứng dụng. Ngoài ra, khi bạn cài đặt Laravel bằng Composer, nó sẽ tạo ra một tệp môi trường . Tệp này chứa các cài đặt dành riêng cho môi trường hiện tại mà ứng dụng đang chạy và sẽ được ưu tiên hơn các giá trị được đặt trong file cấu hình thông thường nằm tại folder config
. Mỗi cài đặt trên môi trường mới yêu cầu file môi trường được điều chỉnh để xác định những thứ như cài đặt kết nối database , tùy chọn gỡ lỗi, URL ứng dụng, trong số các mục khác có thể thay đổi tùy thuộc vào môi trường ứng dụng đang chạy.
Cảnh báo : Tệp cấu hình môi trường chứa thông tin nhạy cảm về server của bạn, bao gồm thông tin đăng nhập database và khóa bảo mật. Vì lý do đó, bạn không nên chia sẻ công khai file này.
Bây giờ ta sẽ chỉnh sửa file .env
để tùy chỉnh các tùy chọn cấu hình cho môi trường ứng dụng hiện tại.
Mở file .env
bằng editor dòng lệnh mà bạn chọn. Ở đây ta sẽ sử dụng nano
:
- nano .env
Mặc dù có nhiều biến cấu hình trong file này, bạn không cần cài đặt tất cả chúng ngay bây giờ. Danh sách sau đây chứa tổng quan về các biến cần chú ý ngay lập tức:
-
APP_NAME
: Tên ứng dụng, được sử dụng cho thông báo và tin nhắn. -
APP_ENV
: Môi trường ứng dụng hiện tại. -
APP_KEY
: Được sử dụng để tạo muối và băm, khóa duy nhất này được tạo tự động khi cài đặt Laravel qua Composer, vì vậy bạn không cần phải thay đổi nó. -
APP_DEBUG
: Có hay không hiển thị thông tin gỡ lỗi ở phía client . -
APP_URL
: URL cơ sở cho ứng dụng, được sử dụng để tạo liên kết ứng dụng. -
DB_DATABASE
: Tên database . -
DB_USERNAME
: Tên user để kết nối với database . -
DB_PASSWORD
: Mật khẩu để kết nối với database .
Theo mặc định, các giá trị này được cấu hình cho môi trường phát triển local sử dụng Homestead , một hộp Vagrant đóng gói sẵn do Laravel cung cấp. Ta sẽ thay đổi các giá trị này để phản ánh cài đặt môi trường hiện tại của ứng dụng mẫu của ta .
Trong trường hợp bạn đang cài đặt Laravel trong môi trường phát triển hoặc thử nghiệm , bạn có thể để tùy chọn APP_DEBUG
được bật vì tùy chọn này sẽ cung cấp cho bạn thông tin gỡ lỗi quan trọng trong khi kiểm tra ứng dụng từ trình duyệt. Biến APP_ENV
nên được đặt thành development
hoặc testing
trong trường hợp này.
Trong trường hợp bạn đang cài đặt Laravel trong môi trường sản xuất , bạn nên tắt tùy chọn APP_DEBUG
, vì tùy chọn này hiển thị cho user cuối cùng thông tin nhạy cảm về ứng dụng của bạn. APP_ENV
trong trường hợp này phải được đặt thành production
.
.env
sau đây cài đặt ứng dụng mẫu của ta để phát triển :
Lưu ý : Biến APP_KEY
chứa khóa duy nhất được tạo tự động khi bạn cài đặt Laravel qua Composer. Bạn không cần phải thay đổi giá trị này. Nếu bạn muốn tạo một khóa bảo mật mới, bạn có thể sử dụng lệnh php artisan key:generate
create.
APP_NAME=TravelList APP_ENV=development APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY APP_DEBUG=true APP_URL=http://domain_or_IP LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=travellist DB_USERNAME=travellist_user DB_PASSWORD=password ...
Điều chỉnh các biến của bạn cho phù hợp. Khi bạn chỉnh sửa xong, hãy lưu file để giữ các thay đổi . Nếu bạn đang sử dụng nano
, bạn có thể thực hiện điều đó bằng CTRL+X
, sau đó là Y
và Enter
để xác nhận.
Ứng dụng Laravel của bạn hiện đã được cài đặt , nhưng ta vẫn cần cấu hình web server để có thể truy cập nó từ trình duyệt. Trong bước tiếp theo, ta sẽ cấu hình Nginx để phục vụ ứng dụng Laravel của bạn.
Bước 5 - Cài đặt Nginx
Ta đã cài đặt Laravel trên một folder local trong folder chính của user từ xa của bạn và mặc dù điều này hoạt động tốt cho các môi trường phát triển local , nhưng đây không phải là phương pháp được khuyến khích cho các web server được mở với internet công cộng. Ta sẽ di chuyển folder ứng dụng đến /var/www
, đây là vị trí thông thường cho các ứng dụng web chạy trên Nginx.
Đầu tiên, sử dụng lệnh mv
để di chuyển folder ứng dụng với tất cả nội dung của nó vào /var/www/travellist
:
- sudo mv ~/travellist /var/www/travellist
Bây giờ ta cần cấp cho user web server quyền ghi vào các folder storage
và cache
, nơi Laravel lưu trữ các file do ứng dụng tạo:
- sudo chown -R www-data.www-data /var/www/travellist/storage
- sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache
Các file ứng dụng hiện đã được sắp xếp theo thứ tự, nhưng ta vẫn cần cấu hình Nginx để phân phát nội dung. Để thực hiện việc này, ta sẽ tạo một file cấu hình server ảo mới tại /etc/nginx/sites-available
:
- sudo nano /etc/nginx/sites-available/travellist
Tệp cấu hình sau chứa các cài đặt được đề xuất cho các ứng dụng Laravel trên Nginx:
server { listen 80; server_name server_domain_or_IP; root /var/www/travellist/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }
Sao chép nội dung này vào file /etc/nginx/sites-available/ travellist
và nếu cần, hãy điều chỉnh các giá trị được đánh dấu để phù hợp với cấu hình của bạn . Lưu file khi bạn chỉnh sửa xong.
Để kích hoạt các file cấu hình server ảo mới, tạo ra một softlink đến travellist
trong sites-enabled
:
- sudo ln -s /etc/nginx/sites-available/travellist /etc/nginx/sites-enabled/
Lưu ý: Nếu bạn có một file server ảo mà trước đây đã được cấu hình cho cùng server_name
sử dụng trong travellist
server ảo, bạn có thể cần phải tắt cấu hình cũ bằng cách loại bỏ tương ứng bên trong softlink /etc/nginx/sites-enabled/
.
Để xác nhận cấu hình không có bất kỳ lỗi cú pháp nào, bạn có thể sử dụng:
- sudo nginx -t
Bạn sẽ thấy kết quả như thế này:
Output- nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
- nginx: configuration file /etc/nginx/nginx.conf test is successful
Để áp dụng các thay đổi, hãy reload Nginx bằng:
- sudo systemctl reload nginx
Bây giờ, hãy truy cập trình duyệt của bạn và truy cập ứng dụng bằng domain hoặc địa chỉ IP của server , như được xác định bởi chỉ thị server_name
trong file cấu hình của bạn:
http://server_domain_or_IP
Bạn sẽ thấy một trang như thế này:
Điều đó xác nhận server Nginx của bạn được cấu hình đúng cách để phục vụ Laravel. Từ thời điểm này, bạn có thể bắt đầu xây dựng ứng dụng của bạn trên khung được cung cấp bởi cài đặt mặc định.
Trong bước tiếp theo, ta sẽ sửa đổi tuyến đường chính của ứng dụng để truy vấn dữ liệu trong database bằng cách sử dụng mặt tiền DB
của Laravel.
Bước 6 - Tùy chỉnh trang chính
Giả sử bạn đã làm theo tất cả các bước trong hướng dẫn này cho đến nay, bạn sẽ có một ứng dụng Laravel đang hoạt động và một bảng database có tên các places
chứa một số dữ liệu mẫu.
Bây giờ ta sẽ chỉnh sửa tuyến ứng dụng chính để truy vấn database và trả lại nội dung về dạng xem của ứng dụng.
Mở file tuyến đường chính, routes/web.php
:
- nano routes/web.php
Theo mặc định, file này có nội dung sau:
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); });
Các tuyến được định nghĩa trong file này bằng cách sử dụng phương thức tĩnh Route::get
, phương thức này nhận một đường dẫn và một hàm gọi lại làm đối số.
Đoạn mã sau thay thế hàm gọi lại tuyến đường chính. Nó thực hiện 2 truy vấn đến database bằng cách sử dụng cờ visited
để lọc kết quả. Nó sẽ trả về kết quả cho một cái nhìn tên travellist
, mà ta sẽ tạo ra tiếp theo. Sao chép nội dung này vào file routes/web.php
của bạn, thay thế mã đã có ở đó:
<?php use Illuminate\Support\Facades\DB; Route::get('/', function () { $visited = DB::select('select * from places where visited = ?', [1]); $togo = DB::select('select * from places where visited = ?', [0]); return view('travellist', ['visited' => $visited, 'togo' => $togo ] ); });
Lưu file khi bạn chỉnh sửa xong. Bây giờ ta sẽ tạo dạng xem sẽ hiển thị kết quả database cho user . Tạo file dạng xem mới bên trong resources/views
:
- nano resources/views/travellist.blade.php
Các mẫu sau đây tạo ra hai danh sách các địa điểm dựa trên các biến visited
và togo
. Sao chép nội dung này vào file chế độ xem mới của bạn:
<html> <head> <title>Travel List</title> </head> <body> <h1>My Travel Bucket List</h1> <h2>Places I'd Like to Visit</h2> <ul> @foreach ($togo as $newplace) <li>{{ $newplace->name }}</li> @endforeach </ul> <h2>Places I've Already Been To</h2> <ul> @foreach ($visited as $place) <li>{{ $place->name }}</li> @endforeach </ul> </body> </html>
Lưu file khi bạn hoàn tất. Bây giờ hãy truy cập trình duyệt của bạn và reload ứng dụng. Bạn sẽ thấy một trang như thế này:
Đến đây bạn có một ứng dụng Laravel chức năng kéo nội dung từ database MySQL.
Kết luận
Trong hướng dẫn này, bạn đã cài đặt một ứng dụng Laravel mới trên LEMP (Linux, Nginx, MySQL và PHP), chạy trên server Ubuntu 20.04. Bạn cũng đã tùy chỉnh tuyến đường mặc định của bạn để truy vấn nội dung database và hiển thị kết quả trong chế độ xem tùy chỉnh.
Từ đây, bạn có thể tạo các tuyến và chế độ xem mới cho bất kỳ trang bổ sung nào mà ứng dụng của bạn cần. Kiểm tra tài liệu chính thức của Laravel để biết thêm thông tin về các tuyến đường , chế độ xem và hỗ trợ database . Nếu bạn đang triển khai production , bạn cũng nên kiểm tra phần tối ưu hóa để biết một số cách khác nhau mà bạn có thể cải thiện hiệu suất ứng dụng của bạn .
Các tin liên quan
Cách cài đặt Nginx trên Ubuntu 18.042020-05-06
Cách cài đặt Nginx trên Ubuntu 20.04 [Quickstart]
2020-05-04
Cách cài đặt Nginx trên Ubuntu 20.04
2020-04-24
Cách tối ưu hóa cấu hình Nginx
2020-03-26
Cách thiết lập Laravel, Nginx và MySQL với Docker Compose
2020-03-09
Cách cài đặt Nginx trên CentOS 8
2020-03-03
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Debian 10
2019-07-25
Cách tạo chứng chỉ SSL tự ký cho Nginx trên Debian 10
2019-07-15
Cách bảo mật Nginx bằng Let's Encrypt trên Debian 10
2019-07-11
Cách cài đặt Nginx trên Debian 10
2019-07-10