转载请注明出处,如有问题请联系我们! Laravel 网站上线部署教程:从环境配置到伪静态
Laravel 网站上线部署教程:从环境配置到伪静态 这篇文章适合把 Laravel 项目从本地上传到 VPS 或云服务器的用户。Laravel 和普通 PHP 源码不同,它需要 Composer、env 配置、storage 权限、伪静态和缓存命令,如果少一步,就可能出现 500、白屏或路由 404。
一、Laravel 部署前需要准备什么
- PHP 版本符合项目 composer.json 要求。
- 安装 Nginx 或 Apache。
- 安装 MySQL 或 MariaDB。
- 安装 Composer。
- 确认项目目录里有 artisan、composer.json、public 目录。
二、安装 PHP 扩展
Laravel 常用扩展包括 mbstring、xml、curl、zip、mysql、bcmath 等。Ubuntu 下可以这样安装:
apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-mbstring php8.1-xml php8.1-zip php8.1-bcmath -y
如果项目要求 PHP7.4,就把版本换成 php7.4。
三、上传项目并安装依赖
cd /var/www/laravel-site
composer install --no-dev --optimize-autoloader
生产环境不要随便执行 composer update,因为它可能升级依赖,导致本地和线上版本不一致。上线部署优先用 composer install。
四、配置 .env 文件
Laravel 的数据库、缓存、邮件、APP_KEY 都在 .env 里配置。
cp .env.example .env
php artisan key:generate
数据库配置示例:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_site
DB_USERNAME=laravel_user
DB_PASSWORD=your_password
五、Nginx 配置重点:root 指向 public
Laravel 的网站根目录必须指向 public,而不是项目根目录。
server {
listen 80;
server_name example.com;
root /var/www/laravel-site/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
如果 root 指向项目根目录,会有安全风险,也容易路由异常。
六、设置目录权限
Laravel 需要 storage 和 bootstrap/cache 可写。
chown -R www-data:www-data /var/www/laravel-site
chmod -R 775 storage bootstrap/cache
七、清理和生成缓存
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear
php artisan config:cache
php artisan route:cache
如果你刚改了 .env,但页面还是旧配置,优先执行 config:clear。
八、数据库迁移
如果项目使用 Laravel migration:
php artisan migrate --force
如果是已有 SQL 文件,则按普通 MySQL 方式导入。
九、常见错误
- 500 错误:看 storage/logs/laravel.log。
- 路由 404:检查 Nginx root 是否指向 public。
- 数据库连接失败:检查 .env 和缓存。
- 权限错误:检查 storage 和 bootstrap/cache。
- Composer 报错:检查 PHP 版本和扩展。
十、总结
Laravel 部署的关键是 public 根目录、.env、Composer、目录权限和 artisan 缓存。普通 PHP 源码能直接访问 index.php,但 Laravel 必须按框架规则部署,否则很容易出现 404 或 500。
