适用于 CentOS 的 Laravel 部署流程
一 准备与安装基础环境
- 更新系统并安装 EPEL 源,随后安装 Nginx、PHP 及常用扩展、MariaDB/MySQL、Composer、以及可选的 Node.js(用于前端资源构建)。
- 建议的 PHP 扩展包含:php-fpm php-mysqlnd php-mbstring php-xml php-zip php-gd php-bcmath php-curl。
- 启动并开机自启服务:Nginx、PHP-FPM、MariaDB/MySQL。
- 示例命令(以 CentOS 7/8 的 yum/dnf 为例,具体版本可按需调整):
- 安装软件:sudo yum install -y epel-release nginx mariadb-server composer
- 安装 PHP 与扩展(示例):sudo yum install -y php php-fpm php-mysqlnd php-mbstring php-xml php-zip php-gd php-bcmath php-curl
- 可选 Node.js(示例):curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash - && sudo yum install -y nodejs
- 启动服务:sudo systemctl enable --now nginx php-fpm mariadb
二 数据库与目录准备
- 初始化数据库并创建应用专用库与用户(生产环境请使用强密码):
- mysql -u root -p
- CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘laravel_user’@‘localhost’ IDENTIFIED BY ‘StrongPassword!’;
- GRANT ALL PRIVILEGES ON laravel_db.* TO ‘laravel_user’@‘localhost’;
- FLUSH PRIVILEGES;
- 部署代码与目录权限:
- 建议将代码放在 /var/www/your-laravel(示例),并确保运行 Nginx/PHP-FPM 的用户(常见为 nginx)对项目目录拥有访问与写入权限。
- 设置权限与属主(示例):sudo chown -R nginx:nginx /var/www/your-laravel;sudo chmod -R 755 /var/www/your-laravel;sudo chmod -R 775 /var/www/your-laravel/storage /var/www/your-laravel/bootstrap/cache
三 Nginx 与 PHP-FPM 配置
- Nginx 站点配置要点(将 root 指向项目的 public 目录,启用 FastCGI 处理 PHP,隐藏敏感文件):
- server {
listen 80;
server_name your_domain.com;
root /var/www/your-laravel/public;
index index.php;
add_header X-Frame-Options “SAMEORIGIN”;
add_header X-Content-Type-Options “nosniff”;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_page 404 /index.php;
location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.(?!well-known).* {
deny all;
}
- 重载 Nginx:sudo systemctl reload nginx
- PHP-FPM 配置要点(确保与 Nginx 使用一致的 Unix Socket 路径与属主属组,示例为 nginx:nginx):
- 编辑 /etc/php-fpm.d/www.conf:listen = /var/run/php-fpm/php-fpm.sock;listen.owner = nginx;listen.group = nginx
- 重启 PHP-FPM:sudo systemctl restart php-fpm
四 部署 Laravel 应用与上线优化
- 拉取代码并安装依赖(生产环境去除 dev 依赖):
- cd /var/www/your-laravel
- git clone https://github.com/your-org/your-laravel.git . 或上传解压
- composer install --no-dev --optimize-autoloader
- 配置 .env(复制 .env.example 为 .env 并调整关键项):
- APP_ENV=production;APP_DEBUG=false;APP_KEY= 生成见下条
- DB_CONNECTION=mysql;DB_HOST=127.0.0.1;DB_PORT=3306;DB_DATABASE=laravel_db;DB_USERNAME=laravel_user;DB_PASSWORD=StrongPassword!
- 生成应用密钥并初始化数据:
- php artisan key:generate
- php artisan migrate --force
- 上线优化(仅生产):
- php artisan config:cache;php artisan route:cache;php artisan view:cache
- 可选前端资源构建(如使用了 Laravel Mix/前端依赖):
- npm install && npm run production
五 防火墙放行与常见问题排查
- 防火墙放行 HTTP/HTTPS(示例):
- 使用 firewalld:sudo firewall-cmd --permanent --add-service=http;sudo firewall-cmd --permanent --add-service=https;sudo firewall-cmd --reload
- 常见问题快速定位:
- 查看 Nginx 错误日志:sudo tail -f /var/log/nginx/error.log
- 查看 PHP-FPM 错误日志:sudo tail -f /var/log/php-fpm/error.log
- 若出现 502/504,优先核对 Nginx 与 PHP-FPM 的 socket 路径、属主属组 是否一致,以及 PHP-FPM 是否正常运行