我正在开发一个Drupal应用程序,计划在Amazon Elastic Beanstalk环境中进行托pipe。 基本上,Elastic Beanstalk通过启动基于预定义规则的其他Web服务器实例来自动扩展应用程序。 共享数据库正在Amazon RDS实例上运行,所有实例都可以正确访问。 问题是共享文件文件夹(网站/默认/文件)。
我们使用git作为SCM,通过执行$ git aws.push ,我们可以部署新版本。 在后台Elastic Beanstalk自动删除( $ rm -rf )环境中运行的所有服务器的当前代码库,并部署新版本。
计划是在分段环境中使用S3(s3fs)作为共享文件,在生产环境中使用NFS。 我们已经成功设置了环境,以便在重新启动后正确安装共享文件文件夹。 但…
问题在于,在这种设置中,在运行实例上部署新版本失败,因为$ rm -rf无法删除挂载的目录,结果整个环境停止运行,我们需要重新启动环境,真的是一个优雅的解决scheme
问题1是在这种部署中pipe理共享文件的正确方法是什么? 你正在运行这样的环境? 你是怎么解决这个问题的?
通过查看Elastic Beanstalk Hostmanager代码(Ruby),似乎有一种方法可以将我们的function(如果在预部署中挂载并在后部署中挂载)挂接到Hostmanager(/ opt / hostmanager / srv / lib / elasticbeanstalk / hostmanager /应用程序/ phpapplication.rb),但文件中定义的脚本(即/tmp/php_post_deploy_app.sh)似乎没有工作。 这可能是因为我们的Ruby技能是不存在的。
问题2是你设法以便携的方式(例如不更改核心Hostmanager文件)在Hostmanager中挂载你的function吗?
你有没有考虑通过.ebextensions与你的共享文件存储在S3中使用sources ?
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
我已经使用sources来部署我们的应用程序服务器(并存储在S3中)构build的共享文件(站点地图)。
sources: "c:/inetpub/sitemaps": http://[S3 bucket]/sitemaps.zip container_commands: 01-copy-sitemaps-to-www: command: copy c:\\inetpub\\sitemaps\\*.* c:\\inetpub\\wwwroot\\ > copy_sitemaps_to_www.log 2>&1 waitAfterCompletion: 5