我已经使用弹性 beantalk 实例在 Amazon EC2 中部署了我的 PHP 应用程序。我的应用程序的文件系统结构如下所示:
MyApp
|-css
| |-...
|-js
| |-...
|-uploads
| |- image.png
| |- file.pdf
| |- ...
|-index.php
|-...
我的应用允许用户上传图片。它是一个用于 Web 管理某些文件的简单应用程序,目前仅供我的客户使用。因此,当上传文件时,我将它们放在 uploads
文件夹下,如上所示。
问题是我的文件不会在这个文件夹中保存很长时间。一两天后,我 ssh
发现上传文件夹是空的。我不确定会发生什么,但我怀疑 elastic beanstalk 确实创建了一个新实例并因此覆盖了 uploads
文件夹内容。
我该如何解决这种情况?
谢谢。
最佳答案
部署在 Elastic Beanstalk 上的应用程序应该是无状态的。 IE。它们不应在 EC2 实例上存储状态,例如文件或内存中的 http session 。
AWS Elastic Beanstalk 在后台使用自动扩展来根据您的应用程序工作负载在您的池中添加或删除实例。
当您更改 AWS Elastic Beanstalk 配置时,它也可能会用新实例替换实例。
最佳做法是将您的应用程序状态存储在共享存储中,供所有实例使用。
Amazon S3 是一个很好的选择,您只需稍微修改您的应用程序,让用户浏览器安全地将文件上传到 S3。
查看此问题的答案以获取更多详细信息。 Amazon S3 direct file upload from client browser - private key disclosure
您也可以在浏览器中直接使用 Amazon Javascript 的 SDK,从而在不使用表单的情况下实现客户端上传。
关于php - 亚马逊 EC2, Elastic Beanstalk : My images disappear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104858/