如何在主机上无需第三方应用部署Symfony REST API项目?
Symfony API 无第三方应用部署步骤
前置环境检查
主机必须满足:
- 对应Symfony版本的PHP(例如Symfony 6+需要PHP 8.1+)
- 启用必要PHP扩展:
mbstring、xml、ctype、iconv、intl、pdo_mysql(根据数据库类型调整) - 服务器开启URL重写(Apache的
mod_rewrite或Nginx的rewrite规则)
1. 本地代码预准备
- 生成生产环境依赖:
composer install --no-dev --optimize-autoloader - 清理并生成生产环境缓存:
php bin/console cache:clear --env=prod - 调整
.env配置:设置APP_ENV=prod、APP_DEBUG=0,填写正确的数据库连接信息(敏感信息建议部署后在主机直接修改,避免提交到版本库)
2. 上传代码到主机
仅上传必要文件:
bin/、config/、public/、src/、vendor/.env、composer.json、composer.lock- 无需上传:
.git/、tests/、本地生成的var/cache/(主机将重新生成)
权限配置
给项目目录设置服务器可读写权限(以Apache为例,服务器用户通常为www-data):
chown -R www-data:www-data var public chmod -R 775 var public
3. 服务器根目录配置
Apache 配置
将网站根目录指向项目的public/文件夹,虚拟主机配置示例:
<Directory /path/to/your/project/public> AllowOverride All Require all granted RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </Directory>
(若主机支持.htaccess,Symfony默认的public/.htaccess已包含重写规则,确保开启AllowOverride All)
Nginx 配置
根目录指向public/,添加路由重写规则:
server { listen 80; server_name your-domain.com; root /path/to/your/project/public; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ ^/index\.php(/|$) { fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 替换为你的PHP-FPM路径 fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; internal; } location ~ \.php$ { return 404; } }
4. 主机最终操作
- 进入项目目录,预热生产环境缓存:
php bin/console cache:warmup --env=prod - 若有数据库迁移,执行:
php bin/console doctrine:migrations:migrate --env=prod --no-interaction
常见问题排查
- 500错误:查看主机服务器日志(Apache的
error.log/Nginx的error.log)或Symfony的var/log/prod.log - 权限报错:确认
var/和public/目录服务器用户可读写 - 依赖缺失:对照Symfony官方文档检查主机PHP扩展是否齐全
内容的提问来源于stack exchange,提问作者dashadow
相关产品推荐
相关产品推荐

