Debian 为 Laravel 提供最佳服务器环境
一 系统准备与基础组件
- 更新系统并安装基础工具
- sudo apt update && sudo apt full-upgrade -y
- sudo apt install -y curl wget git unzip
- 安装并优化 PHP(以 PHP 8.2 为例,按你的 Debian 版本选择可用版本)
- sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-json php8.2-xml php8.2-mbstring php8.2-curl php8.2-zip php8.2-gd php8.2-bcmath php8.2-intl
- 启用常用扩展(如 fileinfo、mbstring、openssl 等),编辑对应 php.ini 后重启 FPM:sudo systemctl restart php8.2-fpm
- 安装 Composer
- curl -sS https://getcomposer.org/installer | php
- sudo mv composer.phar /usr/local/bin/composer
- 安装数据库(二选一)
- MariaDB:sudo apt install -y mariadb-server && sudo mysql_secure_installation
- MySQL:sudo apt install -y mysql-server && sudo mysql_secure_installation
- Web 服务器(二选一)
- Nginx:sudo apt install -y nginx
- Apache:sudo apt install -y apache2 && sudo a2enmod rewrite
二 Web 服务器与 PHP-FPM 配置
- Nginx 站点示例(将 yourdomain.com 与路径替换为你的实际值)
- 建议将站点根目录指向 /var/www/yourproject/public
- 示例要点:
- root 指向 public;index 为 index.php
- try_files $uri $uri/ /index.php?$query_string;
- PHP 通过 FPM:fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- 安全头:add_header X-Frame-Options “SAMEORIGIN”; add_header X-Content-Type-Options “nosniff”;
- 隐藏敏感文件:location ~ /.(?!well-known). { deny all; }
- 启用站点:sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/ && sudo nginx -t && sudo systemctl reload nginx
- Apache 虚拟主机要点
- DocumentRoot 指向 /var/www/yourproject/public
- 中 AllowOverride All(启用 .htaccess)
- 启用站点:sudo a2ensite yourproject.conf && sudo systemctl reload apache2
- PHP-FPM 与权限
- FPM 池通常以 www-data:www-data 运行(检查 /etc/php/8.2/fpm/pool.d/www.conf)
- 项目属主:sudo chown -R www-data:www-data /var/www/yourproject
- 目录权限:sudo chmod -R 755 /var/www/yourproject;sudo chmod -R 775 /var/www/yourproject/storage /var/www/yourproject/bootstrap/cache(避免使用 777)
三 部署与数据库
- 创建项目
- 全新项目:composer create-project --prefer-dist laravel/laravel /var/www/yourproject
- 已有代码:git clone 或上传至 /var/www/yourproject
- 安装依赖与优化
- 生产环境:composer install --optimize-autoloader --no-dev
- 环境变量与密钥
- cp .env.example .env && php artisan key:generate
- 编辑 .env:设置 APP_ENV=production、APP_DEBUG=false、数据库连接等
- 数据库准备(以 MySQL/MariaDB 为例)
- 登录数据库后执行:
- 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;
- 迁移与填充:php artisan migrate --force(必要时 php artisan db:seed)
四 性能与安全优化
- PHP 运行时
- 启用并优化 OPcache(生产环境强烈建议)
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.revalidate_freq=60
- Laravel 应用层
- 生产缓存:php artisan config:cache、php artisan route:cache、php artisan view:cache(开发环境勿启用)
- 缓存驱动:优先 Redis(CACHE_DRIVER=redis;如需会话/队列也用 Redis)
- 队列与异步:配置 QUEUE_CONNECTION=redis,耗时任务入队;使用 Supervisor 守护队列进程,示例:
- sudo apt install -y supervisor
- /etc/supervisor/conf.d/laravel-worker.conf:
- [program:laravel-worker]
- command=php /var/www/yourproject/artisan queue:work --sleep=3 --tries=3 --daemon
- autostart=true;autorestart=true;user=www-data;numprocs=4
- redirect_stderr=true;stdout_logfile=/var/www/yourproject/storage/logs/worker.log
- 使配置生效:sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start laravel-worker:*
- Web 服务器与安全
- 启用 HTTPS(Let’s Encrypt):sudo apt install -y certbot python3-certbot-nginx && sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- 安全头与静态资源:配置 X-Frame-Options、X-Content-Type-Options、X-XSS-Protection;对 favicon.ico、robots.txt 等关闭访问日志
- 隐藏敏感文件与目录:location ~ /.(?!well-known). { deny all; };location ~ /.ht { deny all; }
- 系统层面(可选,按负载调优)
- 文件描述符:在 /etc/security/limits.conf 提高 nofile(如 65535)
- 内核网络参数:如 net.core.somaxconn、net.ipv4.tcp_max_syn_backlog 等(sysctl -p 生效)
- 文件权限建议
- 推荐:sudo chown -R www-data:www-data /var/www/yourproject
- 目录:sudo find /var/www/yourproject -type d -exec chmod 755 {} ;
- 可写目录:sudo chmod -R 775 /var/www/yourproject/storage /var/www/yourproject/bootstrap/cache
- 避免使用 777,优先通过用户组与 ACL 精细控制
五 上线检查清单
- 访问域名显示 Laravel 欢迎页或你的应用首页
- .env 中 APP_ENV=production、APP_DEBUG=false,数据库连接正常
- 已执行:composer install --optimize-autoloader --no-dev
- 已缓存:config:cache、route:cache、view:cache(仅生产)
- 队列由 Supervisor 正常守护(如启用队列)
- HTTPS 已启用且自动续期(certbot)
- 日志可写:storage/logs/ 与 Supervisor 日志无报错
- 定期备份:数据库与代码(考虑自动化与异地)