如何在Plesk服务器上通过SSH执行Symfony数据库迁移?
在Plesk服务器上执行Symfony Doctrine数据库迁移的解决方法
先解决「Could not open input file: bin/console」错误
这个报错核心原因是当前工作目录不对,或是Symfony版本对应的控制台文件路径不同:
- Symfony 4及以上版本:控制台文件路径为
bin/console - Symfony 3及更早版本:控制台文件路径为
app/console
在Plesk中执行迁移的两种可行方式
方式一:使用Plesk内置终端
- 登录Plesk后台,进入目标域名的「网站与域名」页面,找到「终端」入口(部分版本在「高级」分类下)
- 切换到Symfony项目根目录,比如项目部署在
httpdocs下,执行:cd /var/www/vhosts/你的域名/httpdocs - 根据Symfony版本执行迁移命令:
# Symfony 4+版本 php bin/console doctrine:migrations:migrate # Symfony 3及更早版本 php app/console doctrine:migrations:migrate - 若服务器存在多PHP版本,需指定项目使用的PHP路径,比如PHP 8.1:
/opt/plesk/php/8.1/bin/php bin/console doctrine:migrations:migrate
方式二:通过Plesk的Composer工具执行
- 进入目标域名的「网站与域名」>「PHP Composer」
- 找到「执行命令」选项,直接输入迁移命令(确保路径对应项目根目录):
若路径不生效,改用绝对路径:bin/console doctrine:migrations:migrate/var/www/vhosts/你的域名/httpdocs/bin/console doctrine:migrations:migrate
额外排查点
- 确认
doctrine/migrations组件已安装:在终端执行composer show doctrine/migrations,若未安装,执行composer require doctrine/migrations - 检查数据库配置:确认
.env或.env.prod中的数据库连接信息(主机、用户名、密码、库名)与Plesk中创建的数据库完全匹配 - 权限检查:确保
bin/console文件有可读权限,必要时执行chmod +x bin/console赋予执行权限
关于手动创建表的建议
不推荐手动创建表——Doctrine迁移会维护迁移版本记录,手动建表可能导致后续迁移出现冲突或版本不一致问题。如果必须手动操作:
- 从本地开发环境导出完整的数据库结构SQL文件
- 在Plesk的「数据库」工具中导入该SQL文件
- 执行以下命令标记所有迁移为已完成,避免后续重复执行:
php bin/console doctrine:migrations:version --add --all
内容的提问来源于stack exchange,提问作者Rumike7
相关产品推荐
相关产品推荐

