介绍
Laravel是一个开源的PHP框架,提供了一套工具和资源来构建现代PHP应用程序. 随着完整的生态系统利用其内置的功能,Laravel的普及在过去的几年中迅速增长,许多开发者采用它作为他们选择的框架,以简化开发过程。
在本指南中,您将安装和配置一个新的Laravel 8应用程序在PHP 7.4的Ubuntu 18.04服务器上,使用 Composer下载和管理框架依赖。
前提条件
要完成本指南,您首先需要在 Ubuntu 18.04 服务器上执行以下任务:
- 创建一个
sudo
用户,并启用ufw
。 要设置这个,你可以遵循我们的 初始服务器设置与Ubuntu 18.04指南。 - 安装 Nginx . 如果你还没有设置这个,你可以遵循步骤 ** 1和2** 的 如何安装 Nginx在Ubuntu 18.04 。
安装MySQL 。 遵循步骤 ** 1和2** 的我们的指南在 [如何安装MySQL在Ubuntu 18.04].0](https://andsky.com/tech/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04) 设置这个设置。
*安装Composer**上。 您可以使用下面的
Composer 7.4
或更高版本。 您可以遵循我们的指
要验证您的服务器当前使用的 PHP 版本,请运行:
1php -v
1[secondary_label output]
2PHP 7.4.22 (cli) (built: Jul 30 2021 13:07:59) ( NTS )
3Copyright (c) The PHP Group
4Zend Engine v3.4.0, Copyright (c) Zend Technologies
5 with Zend OPcache v7.4.22, Copyright (c), by Zend Technologies
检查输出,以确保您的服务器安装了 PHP 7.4 或更高版本,因为这是最新的 PHP 稳定版本。
步骤 1 — 安装 PHP-FPM 和必要的 PHP 模块
在您可以安装 Laravel 之前,您需要安装一些框架所要求的 PHP 模块,您还需要安装 PHP-FPM,如果您尚未设置此功能。
Laravel 需要php-mbstring
,php-xml
和php-bcmath
的 PHP 模块,这些 PHP 扩展为处理字符编码、XML 和精密数学提供了额外的支持,您还需要php-mysql
来通过 PHP 代码连接到数据库。
如果这是第一次在本会话中使用apt
,您应该先运行更新
命令来更新包管理器缓存:
1sudo apt update
您可能被要求提供您的用户密码以验证您的sudo
权限. 更新完成后,您可以安装所需的软件包:
1sudo apt install php7.4-fpm php7.4-mysql php7.4-mbstring php7.4-xml php7.4-bcmath
您的系统现在已经准备好通过 Composer 执行 Laravel 安装,但在此之前,您需要为您的应用程序设置数据库。
步骤 2 – 创建应用程序的数据库
要练习 Laravel 的基本安装和使用,您将创建一个样本 travel list 应用程序,以显示用户想要旅行的地点列表,以及他们已经访问的地点列表。
要从 Laravel 应用程序连接到数据库,您将创建一个专门的 MySQL 用户,并授予该用户对travel_list
数据库的完整权限。
要开始,请登录 MySQL 控制台作为 root 数据库用户:
1sudo mysql
若要创建新的数据库,请从您的 MySQL 控制台执行以下命令:
1CREATE DATABASE travel_list;
现在您可以创建一个新用户,并在您刚刚创建的自定义数据库中授予他们完整的权限. 在本示例中,我们正在创建一个名为 travel_user 的用户,其密码为密码
,但您应该将其更改为您选择的安全密码:
1GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
这将给用户完全的权利,在数据库travel_list
,同时阻止该用户创建或修改您的服务器上的其他数据库。
接下来,输出 MySQL 壳:
1exit
现在,您可以通过再次登录MySQL控制台来测试新用户是否有正确的权限,这一次使用自定义用户凭证:
1mysql -u travel_user -p
请注意这个命令中的p
标志,它会提示您在创建 travel_user 用户时使用的密码。登录到MySQL控制台后,确认您可以访问travel_list
数据库:
1SHOW DATABASES;
这将为您带来以下结果:
1[secondary_label Output]
2+--------------------+
3| Database |
4+--------------------+
5| information_schema |
6| travel_list |
7+--------------------+
82 rows in set (0.01 sec)
接下来,在travel_list
数据库中创建一个名为places
的表格,从MySQL控制台运行以下陈述:
1CREATE TABLE travel_list.places (
2 id INT AUTO_INCREMENT,
3 name VARCHAR(255),
4 visited BOOLEAN,
5 PRIMARY KEY(id)
6);
现在,用一些样本数据填充位置
表:
1INSERT INTO travel_list.places (name, visited)
2VALUES ("Tokyo", false),
3("Budapest", true),
4("Nairobi", false),
5("Berlin", true),
6("Lisbon", true),
7("Denver", false),
8("Moscow", false),
9("Olso", false),
10("Rio", true),
11("Cincinnati", false),
12("Helsinki", false);
若要确认数据已成功保存到表中,请运行:
1SELECT * FROM travel_list.places;
您将看到类似于此的输出:
1[secondary_label Output]
2+----+-----------+---------+
3| id | name | visited |
4+----+-----------+---------+
5| 1 | Tokyo | 0 |
6| 2 | Budapest | 1 |
7| 3 | Nairobi | 0 |
8| 4 | Berlin | 1 |
9| 5 | Lisbon | 1 |
10| 6 | Denver | 0 |
11| 7 | Moscow | 0 |
12| 8 | Oslo | 0 |
13| 9 | Rio | 1 |
14| 10 | Cincinnati| 0 |
15| 11 | Helsinki | 0 |
16+----+-----------+---------+
1711 rows in set (0.00 sec)
在确认您在测试表中有有效数据后,您可以退出MySQL控制台:
1exit
您现在已经准备好创建应用程序并将其配置为连接到新数据库。
步骤 3 – 创建一个新的Laravel应用程序
您现在将使用composer create-project
命令创建一个新的 Laravel 应用程序. 此 Composer 命令通常用于基于现有框架和内容管理系统启动新应用程序。
在本指南中,我们将使用travel_list
作为示例应用程序,但您可以自由地将其更改为其他东西。travel_list
应用程序将显示来自本地MySQL服务器的位置列表,旨在展示Laravel的基本配置并确认您可以连接到数据库。
首先,进入用户的家庭目录:
1cd ~
以下命令将创建一个新的travel_list
目录,其中包含基于默认设置的 barebones Laravel 应用程序:
1composer create-project --prefer-dist laravel/laravel travel_list
您将看到类似于此的输出:
1[secondary_label Output]
2Creating a "laravel/laravel" project at "./travel_list"
3Installing laravel/laravel (v8.5.22)
4 - Installing laravel/laravel (v8.5.22): Extracting archive
5Created project in /home/sammy/travel_list
6> @php -r "file_exists('.env') || copy('.env.example', '.env');"
7Loading composer repositories with package information
8Updating dependencies
9Lock file operations: 109 installs, 0 updates, 0 removals
10 - Locking asm89/stack-cors (v2.0.3)
11 - Locking brick/math (0.9.2)
12 - Locking dflydev/dot-access-data (v3.0.0)
13 - Locking doctrine/inflector (2.0.3)
14 - Locking doctrine/instantiator (1.4.0)
15 - Locking doctrine/lexer (1.2.1)
16…
17Package manifest generated successfully.
1875 packages you are using are looking for funding.
19Use the `composer fund` command to find out more!
20> @php artisan key:generate --ansi
21Application key set successfully.
安装完成后,访问应用程序目录并运行Laravel的手工
命令,以验证所有组件是否成功安装:
1cd travel_list
2php artisan
你会看到类似于此的输出:
1[secondary_label Output]
2Laravel Framework 8.52.0
3
4Usage:
5 command [options] [arguments]
6
7Options:
8 -h, --help Display help for the given command. When no command is given display help for the list command
9 -q, --quiet Do not output any message
10 -V, --version Display this application version
11 --ansi|--no-ansi Force (or disable --no-ansi) ANSI output
12 -n, --no-interaction Do not ask any interactive question
13 --env[=ENV] The environment the command should run under
14 -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
15...
此输出确认应用程序文件已在位置,Laravel命令行工具正在按预期工作,但您仍然需要配置应用程序来设置数据库和其他一些细节。
步骤 4 – 配置 Laravel
Laravel 配置文件位于应用程序的 root 目录中的一个名为config
的目录中。 此外,当您与 Composer 一起安装 Laravel 时,它会创建一个 environment file。 此文件包含对应用程序正在运行的当前环境特定的设置,并将优先于位于 config
目录中的常规配置文件中设置的值。 在新的环境中,每个安装都需要一个定制的环境文件来定义数据库连接设置、调试选项、应用程序 URL 等内容,这些内容可能因应用程序正在运行的环境而有所不同。
<$>[警告] 警告 :环境配置文件包含有关您的服务器的敏感信息,包括数据库凭证和安全密钥。
我们现在将编辑.env 文件,以定制当前应用环境的配置选项。
使用您所选择的命令行编辑器打开 .env
文件. 在这里,我们将使用 nano
:
1nano .env
虽然这个文件中有许多配置变量,但您不需要现在设置所有这些变量,以下列表包含需要立即关注的变量概述:
APP_NAME
:应用名称,用于通知和消息。APP_ENV
:当前应用环境.APP_KEY
:用于生成盐和哈希,此独特的密钥在安装Laravel时自动创建,所以您不需要更改它。APP_DEBUG
:是否在客户端显示调试信息。APP_URL
:应用程序的基本URL,用于生成应用链接。
默认情况下,这些值是为使用 Homestead的本地开发环境配置的,这是由 Laravel 提供的预先包装的 Vagrant 框。
如果您在 development 或 ** testing** 环境中安装 Laravel,您可以将APP_DEBUG
选项关闭,因为在从浏览器中测试应用程序时,这将为您提供重要的调试信息。
如果您在生产环境中安装 Laravel,您应该禁用APP_DEBUG
选项,因为它会向最终用户显示有关您的应用程序的敏感信息。
下面的 .env
文件为 development 设置了我们的示例应用程序:
<$>[注] 注 :「APP_KEY」变量包含一个独特的密钥,在您通过 Composer 安装 Laravel 时自动生成,您不需要更改此值。
1[label /var/www/travel_list/.env]
2APP_NAME=TravelList
3APP_ENV=development
4APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
5APP_DEBUG=true
6APP_URL=http://domain_or_IP
7
8LOG_CHANNEL=stack
9
10DB_CONNECTION=mysql
11DB_HOST=127.0.0.1
12DB_PORT=3306
13DB_DATABASE=travel_list
14DB_USERNAME=travel_user
15DB_PASSWORD=password
16
17...
当你完成编辑时,保存并关闭文件以保留你的更改. 如果你使用nano
,你可以用CTRL+X
,然后Y
和Enter
来确认。
您的 Laravel 应用程序现在已设置,但我们仍然需要配置 Web 服务器,以便能够从浏览器中访问它。
步骤五:设置 Nginx
我们已经在您的远程用户主目录的本地文件夹上安装了Laravel,虽然这对本地开发环境非常有效,但对于向公共互联网开放的Web服务器来说,这不是一个建议的做法。
首先,使用mv
命令将应用程序文件夹及其所有内容移动到/var/www/travel_list
:
1sudo mv ~/travel_list /var/www/travel_list
现在我们需要给网页服务器用户写入存储
和缓存
文件夹,在那里Laravel存储应用程序生成的文件:
1sudo chown -R www-data.www-data /var/www/travel_list/storage
2sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache
应用程序文件现在有序,但我们仍然需要配置 Nginx 来服务内容. 为此,我们将创建一个新的虚拟主机配置文件在 /etc/nginx/sites-available
:
1sudo nano /etc/nginx/sites-available/travel_list
以下配置文件包含 Nginx 上 Laravel 应用程序的 推荐设置:
1[label /etc/nginx/sites-available/travel_list]
2server {
3 listen 80;
4 server_name server_domain_or_IP;
5 root /var/www/travel_list/public;
6
7 add_header X-Frame-Options "SAMEORIGIN";
8 add_header X-XSS-Protection "1; mode=block";
9 add_header X-Content-Type-Options "nosniff";
10
11 index index.html index.htm index.php;
12
13 charset utf-8;
14
15 location / {
16 try_files $uri $uri/ /index.php?$query_string;
17 }
18
19 location = /favicon.ico { access_log off; log_not_found off; }
20 location = /robots.txt { access_log off; log_not_found off; }
21
22 error_page 404 /index.php;
23
24 location ~ \.php$ {
25 fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
26 fastcgi_index index.php;
27 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
28 include fastcgi_params;
29 }
30
31 location ~ /\.(?!well-known).* {
32 deny all;
33 }
34}
将此内容复制到您的 /etc/nginx/sites-available/travel_list
文件,并在需要时调整突出值以匹配您的配置。
要激活新的虚拟主机配置文件,在网站启用
中创建一个符号链接到travel_list
:
1sudo ln -s /etc/nginx/sites-available/travel_list /etc/nginx/sites-enabled/
<$>[注意]
注意 :如果您有另一个虚拟主机文件,此前已配置为同一服务器名称
用于travel_list
虚拟主机,您可能需要通过在/etc/nginx/sites-enabled/
中删除相应的符号链接来禁用旧配置。
1sudo rm -f /etc/nginx/sites-enabled/default
美元
要确认配置不包含任何语法错误,您可以使用:
1sudo nginx -t
你应该看到这样的输出:
1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful
若要应用这些更改,请重新加载 Nginx:
1sudo systemctl reload nginx
现在,进入您的浏览器并使用服务器的域名或IP地址访问应用程序,如您的配置文件中的server_name
指令所定义:
1http://server_domain_or_IP
你会看到这样的页面:
这确认您的 Nginx 服务器已正确配置以服务 Laravel. 从此,您可以开始在默认安装提供的骨骼上构建您的应用程序。
在下一步中,我们将修改应用程序的主要路径以使用Laravel的DB
面貌查询数据库中的数据。
步骤 6 – 定制主页
假设您已经遵循本指南的所有步骤,您应该有一个工作Laravel应用程序和一个名为位置
的数据库表,其中包含一些样本数据。
现在我们将编辑应用程序的主要路径来查询数据库,并将内容返回应用程序的 view。
打开主路线文件,‘routes/web.php’:
1nano routes/web.php
此文件默认情况下提供以下内容:
1[label routes/web.php]
2<?php
3
4/*
5|--------------------------------------------------------------------------
6| Web Routes
7|--------------------------------------------------------------------------
8|
9| Here is where you can register web routes for your application. These
10| routes are loaded by the RouteServiceProvider within a group which
11| contains the "web" middleware group. Now create something great!
12|
13*/
14
15Route::get('/', function () {
16 return view('welcome');
17});
在此文件中,路线是使用静态方法Route::get
定义的,该路径将收到一个 path 和一个 ** callback** 函数作为参数。
以下代码取代了主要路线回调函数. 它使用访问
旗帜对数据库进行 2 个查询,以过滤结果. 它将结果返回到名为travel_list
的视图中,我们将下一步创建。
1[label routes/web.php]
2<?php
3
4use Illuminate\Support\Facades\DB;
5
6Route::get('/', function () {
7 $visited = DB::select('select * from places where visited = ?', [1]);
8 $togo = DB::select('select * from places where visited = ?', [0]);
9
10 return view('travel_list', ['visited' => $visited, 'togo' => $togo ] );
11});
当您完成编辑时,将保存并关闭文件. 我们现在将创建将数据库结果呈现给用户的视图. 在资源/视图
中创建一个新的视图文件:
1nano resources/views/travel_list.blade.php
下面的模板会根据访问
和togo
变量创建两个位置列表,将此内容复制到新视图文件中:
1[label resources/views/travel_list/blade.php]
2<html>
3<head>
4 <title>Travel List</title>
5</head>
6
7<body>
8 <h1>My Travel Bucket List</h1>
9 <h2>Places I'd Like to Visit</h2>
10 <ul>
11 @foreach ($togo as $newplace)
12 <li>{{ $newplace->name }}</li>
13 @endforeach
14 </ul>
15
16 <h2>Places I've Already Been To</h2>
17 <ul>
18 @foreach ($visited as $place)
19 <li>{{ $place->name }}</li>
20 @endforeach
21 </ul>
22</body>
23</html>
完成后保存并关闭文件. 现在进入您的浏览器并重新加载应用程序. 您将看到这样的页面:
你现在有一个功能性的Laravel应用程序从MySQL数据库中提取内容。
结论
在本教程中,您已经在LEMP堆栈(Linux, Nginx,MySQL和PHP)上设置了一个新的Laravel应用程序,在Ubuntu 18.04服务器上运行。
从这里,您可以为您的应用程序需要的任何额外页面创建新的路径和视图。 查看官方的 Laravel 文档,以获取有关 路径, 视图和 数据库支持的更多信息。
为了提高安全性,您应该考虑为您的服务器安装一个 TLS/SSL 证书,允许它通过 HTTPS 提供内容。 为此,您可以遵循我们的指南(如何在 Ubuntu 18.04 上使用 Let's Encrypt 保护您的 Nginx 安装)(https://andsky.com/tech/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04)。
查看我们的 Laravel 标签页面 有关该框架的更多学习材料,包括技术演讲和教程系列。