PHP和Laravel:Laravel部署与环境配置
环境准备
1. 安装必要的软件
在部署Laravel应用之前,确保你的服务器或本地开发环境安装了以下软件:
- PHP: Laravel推荐使用PHP 8.0或更高版本。
- Composer: 用于管理PHP依赖。
- Web服务器: 如Apache或Nginx。
- 数据库: 如MySQL, PostgreSQL, 或SQLite。
- Node.js和npm: 用于前端资源的编译和优化。
1.1 安装PHP
在Ubuntu系统中,可以通过以下命令安装PHP 8.0:
sudo apt update
sudo apt install php8.0
1.2 安装Composer
Composer可以通过以下命令在Linux系统上安装:
sudo curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
1.3 配置Web服务器
Apache
在Apache中,确保mod_rewrite
模块被启用,以支持Laravel的URL重写:
sudo a2enmod rewrite
sudo systemctl restart apache2
Nginx
在Nginx中,配置一个站点来运行Laravel应用:
server {
listen 80;
server_name example.com;
root /var/www/html/laravel/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
1.4 安装数据库
以MySQL为例,安装过程如下:
sudo apt install mysql-server
sudo mysql_secure_installation
1.5 安装Node.js和npm
在Ubuntu上,可以通过以下命令安装Node.js和npm:
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
2. 配置服务器环境
2.1 创建Laravel项目
使用Composer在服务器上创建一个新的Laravel项目:
cd /var/www/html
sudo composer create-project --prefer-dist laravel/laravel myproject
2.2 配置环境变量
编辑.env
文件,设置数据库连接信息:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=your_password
2.3 生成密钥
在部署Laravel应用时,需要生成一个应用密钥:
cd /var/www/html/myproject
php artisan key:generate
2.4 安装前端依赖
Laravel项目通常包含前端资源,需要通过npm安装依赖:
cd /var/www/html/myproject
npm install
2.5 编译前端资源
使用Laravel Mix或Vite编译前端资源:
npm run dev
2.6 设置文件权限
确保Laravel应用的storage
和bootstrap/cache
目录具有正确的权限:
sudo chown -R www-data:www-data /var/www/html/myproject
sudo chmod -R 775 /var/www/html/myproject/storage /var/www/html/myproject/bootstrap/cache
2.7 配置缓存
Laravel支持多种缓存驱动,如file
, redis
, memcached
等。在.env
文件中设置缓存驱动:
CACHE_DRIVER=redis
2.8 配置队列
如果应用使用队列处理任务,需要在.env
文件中设置队列驱动:
QUEUE_CONNECTION=redis
2.9 运行数据库迁移
确保数据库结构与应用匹配:
php artisan migrate
2.10 清除缓存
在部署新版本应用时,清除缓存以确保应用使用最新的配置:
php artisan config:clear
php artisan cache:clear
2.11 设置环境
在部署时,根据服务器环境设置Laravel的环境:
APP_ENV=production
2.12 优化应用
在生产环境中,使用optimize
命令优化应用:
php artisan optimize
通过以上步骤,你可以为Laravel应用的部署和运行准备好一个稳定的环境。
Laravel项目构建
3. 创建Laravel项目
在开始构建Laravel项目之前,确保你的开发环境中已经安装了以下软件:
- PHP (版本7.4或更高)
- Composer
- Laravel安装器(可选,但推荐)
3.1 使用Composer创建项目
# 在命令行中运行以下命令来创建一个新的Laravel项目
composer create-project --prefer-dist laravel/laravel <项目名称>
3.2 使用Laravel安装器创建项目
首先,通过Composer全局安装Laravel安装器:
composer global require laravel/installer
然后,使用Laravel安装器创建项目:
laravel new <项目名称>
3.3 创建项目后的目录结构
创建项目后,Laravel会生成以下主要目录结构:
app/
: 包含所有核心的Laravel类。bootstrap/
: 包含加载框架和服务提供者的文件。config/
: 包含配置文件。database/
: 包含数据库迁移、模型工厂、种子数据和数据库配置。public/
: 包含应用程序的入口文件和前端资源。resources/
: 包含视图、语言文件、静态资源等。routes/
: 包含路由定义。tests/
: 包含单元测试和功能测试。
4. 项目结构介绍
4.1 app/
目录
- Http: 包含控制器、中间件、请求类和视图模型。
- Models: 包含Eloquent模型。
- Providers: 包含服务提供者,用于注册和绑定类到服务容器。
4.2 bootstrap/
目录
- app.php: 应用程序的引导文件。
- autoload.php: Composer的自动加载文件。
- **cache/`: 缓存编译后的类和配置文件。
- **routes.php`: 路由文件的加载入口。
4.3 config/
目录
- app.php: 应用程序的基本配置。
- **database.php`: 数据库配置。
- **services.php`: 第三方服务的API密钥和端点。
4.4 database/
目录
- factories: 包含模型工厂定义。
- **migrations`: 包含数据库迁移文件。
- **seeds`: 包含数据库种子文件。
4.5 public/
目录
- **index.php`: 应用程序的入口文件。
- **css
,
js,
img`: 包含前端资源。
4.6 resources/
目录
- **views`: 包含Blade视图文件。
- **lang`: 包含语言文件。
- **assets`: 包含应用程序的原始前端资源。
4.7 routes/
目录
- **web.php`: 包含Web应用程序的路由。
- **api.php`: 包含API的路由。
4.8 tests/
目录
- **Feature`: 包含功能测试。
- **Unit`: 包含单元测试。
4.9 示例:创建一个简单的控制器
在app/Http/Controllers/
目录下创建一个名为HelloController.php
的控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
/**
* 显示欢迎页面。
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('welcome');
}
}
然后,在routes/web.php
文件中定义一个路由来指向这个控制器:
<?php
use App\Http\Controllers\HelloController;
Route::get('/', [HelloController::class, 'index']);
4.10 注册服务提供者
在app/Providers/
目录下,你可以创建自定义的服务提供者。例如,创建一个名为CustomServiceProvider.php
的服务提供者:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class CustomServiceProvider extends ServiceProvider
{
/**
* 注册任何应用服务。
*
* @return void
*/
public function register()
{
//
}
}
要注册这个服务提供者,需要在config/app.php
文件的providers
数组中添加它的类名:
'providers' => [
// ...
App\Providers\CustomServiceProvider::class,
],
4.11 结论
通过以上步骤,你已经了解了如何创建一个Laravel项目以及项目的基本目录结构。这将帮助你更好地组织代码和资源,以及理解Laravel框架的工作原理。接下来,你可以开始添加功能、配置数据库、编写路由和控制器,以及创建视图和模型。
环境变量配置
5. 理解 .env 文件
在Laravel项目中,.env
文件是一个非常重要的配置文件,它用于存储应用程序的环境变量。这些变量可以包括数据库连接信息、应用程序密钥、缓存配置等,它们在不同的部署环境中(如开发、测试、生产)可能会有所不同。.env
文件通常位于项目根目录下,被.gitignore
文件排除,以防止敏感信息泄露到版本控制系统中。
5.1 .env 文件的结构
.env
文件的结构非常简单,每一行都是一个键值对,格式如下:
KEY_NAME=VALUE
例如,数据库连接的配置可能如下所示:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
5.2 如何读取 .env 文件中的变量
在Laravel中,你可以使用env()
函数来读取.env
文件中的环境变量。如果变量在.env
文件中未设置,你可以提供一个默认值。
// 读取 DB_CONNECTION 环境变量,如果没有设置,则使用 'sqlite' 作为默认值
$connection = env('DB_CONNECTION',