2015-01-23 4 views
3

Я развернул свое приложение PHP в amazon EC2, используя экстренный экземпляр beanstalk. Структура файловой системы моего приложения выглядит так:Amazon EC2, эластичный бобовый стебель: мои изображения исчезают

MyApp 
|-css 
| |-... 
|-js 
| |-... 
|-uploads 
| |- image.png 
| |- file.pdf 
| |- ... 
|-index.php 
|-... 

Мое приложение позволяет пользователям загружать изображения. Это простое приложение для веб-управления некоторыми файлами и в настоящее время используется только моим клиентом. Поэтому, когда файлы загружаются, я размещаю их под папкой uploads, как показано выше. Проблема в том, что мои файлы недолговечны в этой папке. Через день или два, я ssh и найти папку uploads пуст. Я не уверен, что произойдет, но я подозреваю, что эластичный beanstalk создает новый экземпляр и, следовательно, перезаписывает содержимое папки uploads.

Как исправить эту ситуацию?

Спасибо.

ответ

5

Приложения, развернутые на эластичном бобовом стебле, должны быть без гражданства. То есть Они не должны сохранять состояние в экземплярах EC2, таких как файл или сеанс связи с памятью.

AWS Elastic Beanstalk использует автомасштабирование за сценой для добавления или удаления экземпляров из вашего пула в зависимости от рабочей нагрузки вашего приложения.

Когда вы меняете конфигурацию AWS Elastic Beanstalk, она также может заменить экземпляры новыми.

Лучшей практикой является сохранение состояния вашего приложения в общем хранилище, доступном для всех ваших экземпляров.

Amazon S3 - очень хороший кандидат для этого, вам просто нужно немного изменить свое приложение, чтобы браузер пользователей надежно загружал файлы на S3.

За дополнительной информацией обратитесь к этому вопросу. Amazon S3 direct file upload from client browser - private key disclosure

Вы также можете реализовать загрузку на стороне клиента без использования формы, непосредственно используя SDK Amazon Javascript в браузере.

+0

Большое спасибо за понимание. Что происходит с доступом к файлам? В настоящее время пользователь должен получить доступ через http://myapp.elasticbeanstalk.com/myapp/uploads/file.pdf. Как я могу связать файлы S3 для доступа через один и тот же URL-адрес? – nmvictor

+0

@MyApplynx Вы создаете php-контроллер для этого URL-адреса, который перенаправляет их в местоположение s3. –

+0

Ваш контроллер может создавать веб-страницы со ссылками на S3 вместо ссылок на ваше приложение. Ваш контроллер может использовать подписанные URL S3, чтобы гарантировать, что только действительные пользователи получат доступ к S3 –