在 Ubuntu 上部署 Laravel 的标准流程
按 LEMP(Linux + Nginx + MySQL + PHP)部署,覆盖环境准备、代码发布、数据库与权限、Nginx 配置、优化与安全要点,适用于 Ubuntu 18.04/20.04/22.04/24.04。
一 准备环境
- 更新系统并安装基础组件
- sudo apt update && sudo apt upgrade -y
- sudo apt install -y nginx mysql-server curl git unzip
- 安装 PHP 与常用扩展(以 PHP 8.1 为例,可按需调整版本)
- sudo apt install -y php8.1-fpm php8.1-mysql php8.1-curl php8.1-json php8.1-common php8.1-zip php8.1-gd php8.1-mbstring php8.1-xml php8.1-bcmath
- 启动并开机自启服务
- sudo systemctl start nginx && sudo systemctl enable nginx
- sudo systemctl start php8.1-fpm && sudo systemctl enable php8.1-fpm
- 安全加固 MySQL(设置 root 密码、移除匿名用户等)
- sudo mysql_secure_installation
- 安装 Composer(全局)
- curl -sS https://getcomposer.org/installer -o composer-setup.php
- php composer-setup.php --install-dir=/usr/local/bin --filename=composer
- rm composer-setup.php
- composer --version
说明:上述步骤涵盖在 Ubuntu 上安装 Nginx、PHP-FPM、MySQL、Composer 的通用做法,版本号可按系统仓库实际可用版本调整。
二 部署 Laravel 代码
- 创建项目目录并拉取代码
- sudo mkdir -p /var/www/yourdomain.com
- sudo chown -R $USER:$USER /var/www/yourdomain.com
- cd /var/www/yourdomain.com
- composer create-project --prefer-dist laravel/laravel .
- 生成应用密钥
- 配置 .env(数据库等)
- cp .env.example .env
- 编辑 .env,设置:
- APP_ENV=production
- APP_DEBUG=false
- APP_URL=https://yourdomain.com
- DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
- DB_PORT=3306
- DB_DATABASE=laravel_app
- DB_USERNAME=laravel_user
- DB_PASSWORD=StrongPassword!
- 创建数据库与专用用户(进入 MySQL)
- CREATE DATABASE laravel_app DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘laravel_user’@‘localhost’ IDENTIFIED BY ‘StrongPassword!’;
- GRANT ALL ON laravel_app.* TO ‘laravel_user’@‘localhost’;
- FLUSH PRIVILEGES;
- EXIT;
- 运行迁移与(可选)填充
- php artisan migrate --force
- php artisan db:seed --force(如有需要)
说明:使用 Composer 创建项目、生成 APP_KEY、配置 .env 与数据库迁移是 Laravel 部署的关键步骤。
三 配置 Nginx 站点
- 新建服务器块配置
- sudo nano /etc/nginx/sites-available/yourdomain.com
- 示例配置(将 yourdomain.com 与 /var/www/yourdomain.com 替换为实际值;PHP 版本与 sock 路径按实际调整)
-
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
-
}
- 启用站点并测试
- sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
- sudo nginx -t && sudo systemctl reload nginx
说明:Nginx 以 /public 为根目录,使用 try_files 将所有请求导向 index.php,并通过 PHP-FPM 处理 PHP。
四 文件权限与目录所有权
- 推荐做法(最小权限)
- sudo chown -R www-data:www-data /var/www/yourdomain.com
- find /var/www/yourdomain.com -type f -exec chmod 644 {} ;
- find /var/www/yourdomain.com -type d -exec chmod 755 {} ;
- sudo chgrp -R www-data /var/www/yourdomain.com/storage /var/www/yourdomain.com/bootstrap/cache
- sudo chmod -R ug+rwx /var/www/yourdomain.com/storage /var/www/yourdomain.com/bootstrap/cache
- 兼容性写法(如遇到权限问题可临时使用,随后请改回更安全的 775/644)
- sudo chmod -R 775 /var/www/yourdomain.com/storage
- sudo chmod -R 775 /var/www/yourdomain.com/bootstrap/cache
说明:确保 storage 与 bootstrap/cache 对 www-data 可写是 Laravel 正常运行的前提。
五 生产优化与安全要点
- 优化与缓存
- php artisan config:cache
- php artisan route:cache
- php artisan view:cache
- 队列与计划任务(如用到)
- 队列常驻:php artisan queue:work --queue=default --tries=3
- 计划任务:在服务器 crontab 添加
-
-
-
-
-
- cd /var/www/yourdomain.com && php artisan schedule:run >> /dev/null 2>&1
- 安全与运维
- 关闭调试:确保 APP_ENV=production、APP_DEBUG=false
- 仅开放 80/443,使用 UFW 或云安全组限制访问
- 配置 HTTPS/TLS(如 Certbot 获取免费证书)
- 将 .env 加入版本控制忽略,敏感信息不入库
- 定期更新系统与依赖:sudo apt update && sudo apt upgrade -y && composer self-update
说明:生产环境应关闭调试、开启配置/路由/视图缓存,并使用队列与计划任务处理异步与定时任务。