Symfony生产部署核心是环境隔离、配置安全、缓存生效和权限可控:需设APP_ENV=prod、APP_DEBUG=0,删缓存并预热,敏感信息存.gitignore的.env.prod.local或加密的.env.local.php,用Redis缓存,禁用debug,限制Web服务器访问敏感路径。

Symfony生产部署不是简单复制代码,核心是环境隔离、配置安全、缓存生效和权限可控。关键一步做错,轻则报错白屏,重则敏感信息泄露。
环境切换与基础准备
确保项目运行在prod环境,而不是默认的dev:
- 修改
.env文件,设为APP_ENV=prod且APP_DEBUG=0 - 删除
var/cache/目录(或用命令清理),避免旧缓存干扰:php bin/console cache:clear --env=prod - 确认PHP版本≥8.2,已启用
mbstring、intl、pdo、openssl等扩展
敏感配置必须隔离
数据库密码、API密钥等绝不能写进git或.env明文提交:
- 创建
.env.prod.local(加到.gitignore),只放生产专属变量:DATABASE_URL=mysql://user:pass@127.0.0.1:3306/myappAPP_SECRET=2a9f8c1e... - 如需更高安全性,运行
php bin/console dotenv:dump prod生成.env.local.php,它会被优先加载且无需解析开销 - 设置严格权限:
chmod 600 .env.prod.local,并确保只有Web用户(如www-data)可读
缓存与性能调优
生产环境必须跳过开发模式的动态解析,启用高效缓存策略:
- 安装依赖时排除开发包:
composer install --no-dev --optimize-autoloader - 预热缓存,避免首请求卡顿:
php bin/console cache:warmup --env=prod - 推荐使用Redis作主缓存后端,在
config/packages/cache.yaml中配置:default_redis_provider: 'redis://localhost:6379' - 确保
var/cache和var/log目录对Web服务器用户可写(如chown -R www-data:www-data var/cache var/log)
Web服务器与安全加固
不要用php bin/console server:run上线,必须用Nginx/Apache反向代理到PHP-FPM:
- Nginx示例:将root指向
public/目录,禁止访问.env、var/等敏感路径 - 在
config/packages/prod/framework.yaml中明确设置:debug: falsetrusted_hosts: ['yourdomain.com'](防Host头攻击) - 禁用
http_method_override,关闭非必要功能降低攻击面


















