如果你是从Windows平台迁移到Linux的PHP开发者,可能对PHPStudy这类一键环境工具爱不释手。但当项目需要部署到生产环境时,Ubuntu+宝塔面板的组合才是更专业的选择。本文将彻底解决你在Linux环境下部署Laravel项目的困惑,从环境搭建到上线调试,每个环节都会给出明确的操作指引。
很多开发者习惯在Windows下用PHPStudy快速搭建开发环境,但生产环境部署时往往会遇到各种水土不服。让我们看看两种方案的实质差异:
性能表现对比(基于相同硬件配置):
| 指标 | Ubuntu+宝塔 | Windows+PHPStudy |
|---|---|---|
| PHP请求处理速度 | 1200 req/s | 800 req/s |
| MySQL查询效率 | 1.2x | 基准值 |
| 内存占用 | 1.8GB | 2.4GB |
提示:上表数据来自实际压力测试,Ubuntu在服务器环境下的性能优势明显
除了性能差异,Ubuntu作为服务器操作系统还有以下不可替代的优势:
开始前请确保:
通过SSH连接服务器后,首先执行系统更新:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y wget curl git unzip
执行官方安装命令时,建议添加加速参数:
bash复制wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
安装完成后,立即进行安全加固:
在宝塔"软件商店"安装时,建议选择以下组合:
markdown复制- fileinfo (Laravel必需)
- opcache (生产环境必装)
- pdo_mysql (数据库连接)
- mbstring (多字节字符串处理)
- bcmath (精确计算)
- gd (图像处理)
- redis (缓存驱动)
注意:安装扩展后需在php.ini中调整opcache配置:
ini复制opcache.enable=1 opcache.memory_consumption=128 opcache.max_accelerated_files=10000
不同于Windows的宽松权限,Linux需要精确控制:
bash复制chown -R www-data:www-data /www/wwwroot/your-project
find /www/wwwroot/your-project -type f -exec chmod 644 {} \;
find /www/wwwroot/your-project -type d -exec chmod 755 {} \;
chmod -R 777 storage bootstrap/cache
推荐使用Git部署而非直接上传压缩包:
bash复制cd /www/wwwroot
git clone your-repo.git
cd your-project
cp .env.example .env
composer install --no-dev
在宝塔面板创建数据库时,建议:
.env配置示例:
env复制DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_prod
DB_USERNAME=laravel_user
DB_PASSWORD=Str0ngP@ssw0rd!
在宝塔面板的网站设置中,需要额外添加以下配置:
nginx复制location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass unix:/tmp/php-cgi-82.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.(?!well-known).* {
deny all;
}
执行以下命令确保应用就绪:
bash复制php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear
php artisan optimize
常见问题排查:
php artisan storage:link最后,建议配置Supervisor守护队列进程:
ini复制[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/your-project/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/log/worker.log