php - 亚马逊 EC2, Elastic Beanstalk : My images disappear

标签 php amazon-web-services amazon-ec2 amazon-elastic-beanstalk

我已经使用弹性 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/

相关文章:

amazon-web-services - AWS S3 : Do Lifecycle rules accept regex?

amazon-web-services - 无法在ELB中注册EC2实例

java - 在 AWS Java API 中,我如何知道我的 EBS 快照何时创建?

PHP检测是否在子目录中

php - 为什么 the_title() 过滤器也应用于菜单标题?

php - nginx fastcgi_pass 支持变量吗?

amazon-ec2 - S3 存储桶在 EC2 实例上随机卸载

php - jQuery 自动完成 Mysql PHP

apache - 在 Elastic beanstalk 上设置 https 代理

amazon-web-services - 如何终止/终止正在运行的AWS Lambda函数?