symfony项目部署到linux服务器需完成代码传输、环境配置、权限修复、数据库连接验证和web服务接入五个关键环节,缺一不可,否则访问时会直接报500错误或空白页。

将Symfony项目部署到Linux服务器需要完成代码传输、环境配置、权限修复、数据库连接验证和Web服务接入五个关键环节,缺一不可,否则访问时会直接报500错误或空白页。
上传代码并安装依赖
用Git克隆项目到服务器的/var/www目录下:git clone https://github.com/yourname/your-symfony-app.git /var/www/myapp。
进入项目目录后执行composer install --no-dev --optimize-autoloader,这一步跳过开发依赖并生成优化后的自动加载文件,能显著提升生产环境性能;如果提示“command not found”,先运行sudo apt install composer安装全局Composer。
复制.env.local.example为.env.local,并按实际数据库地址、密钥、缓存驱动等填写完整——【.env.local必须存在且不可为空,否则Symfony启动时会因找不到环境变量而崩溃】。
修复cache和logs目录权限
方法一(推荐):使用ACL赋予Web服务器用户与当前登录用户双重写入权限。
第一步:获取Web服务运行用户(Apache通常为www-data,Nginx常为nginx或www-data):
HTTPDUSER=$(ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | awk '{print $1}')。
第二步:清空旧缓存与日志:
rm -rf var/cache/* var/logs/*。
第三步:设置ACL权限:
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:"$(whoami)":rwX var/cache var/logs。
第四步:确保父目录可执行(否则ACL不生效):
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:"$(whoami)":rwX var/cache var/logs。
方法二(备用):若setfacl不可用,改用chmod 775并确保Web用户与当前用户同属一个组,但该方式在多用户混用时易出权限冲突,不建议生产环境长期使用。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
配置数据库连接并验证
确认PHP已启用pdo_mysql扩展:php -m | grep pdo_mysql,无输出则运行sudo apt install php-mysql并重启PHP-FPM(sudo systemctl restart php*-fpm)。
检查.env.local中DATABASE_URL格式是否正确,例如mysql://app_user:pa%40ss%2Fword@db.internal:3306/myapp?serverVersion=8.0.33——【密码含@或/必须URL编码,否则连接字符串解析失败】。
执行php bin/console doctrine:database:create --if-not-exists验证能否连通数据库;若报“Connection refused”,用telnet db.internal 3306测试网络连通性,不通则需检查云服务器安全组是否放行3306端口。
配置Web服务器入口
对于Nginx,创建/etc/nginx/sites-available/myapp,内容包含root指向/var/www/myapp/public,index设为index.php,并添加fastcgi_pass unix:/var/run/php/php8.1-fpm.sock(版本号需与系统实际一致)。
启用站点:sudo ln -sf /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/,然后sudo nginx -t && sudo systemctl reload nginx。
对于Apache,启用mod_rewrite和mod_env模块:sudo a2enmod rewrite env,再在虚拟主机配置中指定DocumentRoot /var/www/myapp/public,并确保AllowOverride All开启,否则路由重写失效。
启用生产模式并清除残留缓存
确保APP_ENV=prod和APP_DEBUG=0已写入.env.local,这是强制Symfony走生产路径、禁用调试工具栏的前提。
运行php bin/console cache:clear --env=prod --no-debug,这一步会重建缓存并校验所有配置;若卡住或报错,说明前面某步配置有误,需回溯排查。
最后给public目录加执行权限:sudo chmod 755 /var/www/myapp/public,否则Nginx无法读取静态资源。










