如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目

die*_*g79 3 php symfony

大多数托管服务提供商只有 FTP 访问权限。

是否可以/通常在本地安装 symfony 项目(3.x 或 4.x),然后通过 FTP 上传并手动创建/更新数据库?

这个问题阻碍了我完全从 symfony 开始。

谢谢!

alb*_*ert 5

这种情况并不理想,但可以做到。

实际上,我们正在使用我们的持续集成服务器以这种方式构建所有内容,并且只有一个 zip 文件,其中包含所有准备好用于生产的所有内容以部署到 AWS Beanstalk,因此我们可以将部署过程从几分钟加快到几秒钟。

设想

以前的生产版本:/var/www/mywebsite-old

当前生产版本:/var/www/mywebsite

下一个生产版本:/var/www/mywebsite-new

准备构建

您需要离线准备应用程序:

  • 设置参数.yml
  • 环境变量 - 我认为它们在 $parameter->resolve() 期间被复制到缓存中
  • 作曲家安装
  • 作曲家转储自动加载
  • 缓存:clean --env prod
  • 删除日志
  • 资产:安装 --env prod

上传构建

完成“构建”后,您将所有内容上传到您的服务器,而不是非实时位置。在这个阶段,您的项目非常繁重,因此上传可能需要时间,或者可以部分上传,因此您不想破坏生产服务器。在 var/cache 和 var/logs var/sessions 以及上传文件夹中设置正确的文件夹权限。

示例:/var/wwww/mywebsite-new/

交换构建

Capistrano 有一个非常有趣的模型。

  1. 将 /var/www/mywebsite 重命名为 /var/www/mywebsite-old
  2. 将 /var/www/mywebsite-new 重命名为 /var/www/mywebsite

运行学说迁移

你有一个本地设置来做你的构建,如果你必须做一些数据库迁移,在那里运行它们连接到生产数据库

最终建议

这是许多可能出错的步骤,我真的建议您将所有操作都自动化以进行升级和降级(将旧版本重命名回生产),以防万一您做错了。

选项:

  • Bash 脚本/Makefile
  • 卡皮斯特拉诺
  • 部署者