Я развернул свое PHP-приложение в Amazon EC2, используя экземпляр эластичного бобового стебля. Структура файловой системы моего приложения выглядит следующим образом:
MyApp
|-css
| |-...
|-js
| |-...
|-uploads
| |- image.png
| |- file.pdf
| |- ...
|-index.php
|-...
Мое приложение позволяет пользователям загружать изображения. Это простое приложение для веб-управления некоторыми файлами и в настоящее время используется только моим клиентом. Поэтому, когда файлы загружены, я помещаю их под uploads
папка, как показано выше.
Проблема в том, что мои файлы долго не хранятся в этой папке. Через день или два я ssh
и найти папку загрузки пусто. Я не уверен, что происходит, но я подозреваю, что эластичный бобовый стебель создает новый экземпляр и, следовательно, перезаписывает uploads
содержимое папки.
Как мне исправить эту ситуацию?
Благодарю.
Приложения, развернутые на Elastic Beanstalk, не должны иметь состояния. То есть Они не должны хранить состояние на экземплярах EC2, таких как файл или сеанс http в памяти.
AWS Elastic Beanstalk использует автоматическое масштабирование за сценой для добавления или удаления экземпляров из вашего пула, в зависимости от рабочей нагрузки вашего приложения.
При изменении конфигурации AWS Elastic Beanstalk он также может заменить экземпляры на новый.
Рекомендуется хранить состояние вашего приложения в общем хранилище, доступном для всех ваших экземпляров.
Amazon S3 является очень хорошим кандидатом для этого, вам просто нужно немного изменить приложение, чтобы пользователи могли безопасно загружать файлы в S3 через браузер.
Посмотрите на ответ на этот вопрос для более подробной информации. Прямая загрузка файлов Amazon S3 из клиентского браузера — раскрытие секретного ключа
Вы также можете реализовать загрузку на стороне клиента без использования формы, напрямую используя SDK Amazon Javascript в браузере.
Других решений пока нет …