Как запустить код приложения (PHP) в разных экземплярах Amazon EC2? - PullRequest
2 голосов
/ 15 апреля 2011

Я пытался справиться с сервисами Amazons AWS для клиента.Как свидетельствует тот самый (ый) вопрос (и), который я собираюсь задать, у меня возникла небольшая проблема с тем, чтобы обернуть голову вокруг некоторых очень простых вещей:

a) Я поиграл с несколькими случаямии мне удалось заставить LAMP работать нормально, проблема в том, что код, который я помещаю в /var/www, похоже, не распространяется на эти машины.Что мне нужно сделать, чтобы достичь этого?Я думал об общем томе EBS и об изменении корня документа Apache?

b) Кроме того, каков наилучший способ загрузки кода и ресурсов на том EBS / S3?Должен ли я настроить экземпляр для обработки FTP на вышеупомянутый общий том?

c) Наконец, у меня есть базовый план для установки, которую я хотел запустить от человека, который действительно знает, о чем он говорит:

  • DNS, указывающий на балансировщик нагрузки (AWS ElasticBeanstalk)
  • Балансировщик нагрузки, управляющий несколькими экземплярами AWS EC2.
  • Код совместного использования экземпляров EC2 из одного хранилища EBS.
  • Экземпляр RDS для обработки запросов к базе данных.
  • Cloud Front для предоставления ресурсов непосредственно пользователю.

Спасибо, Рич.

Редактировать: Мое решение для тех, кто сталкивается с этим в Google.

Обратите внимание, что моя установка еще не закончена, и сценарии bash, которые я предоставляю в этом объяснении, вероятно, не очень хороши, хотя я очень хорошо разбираюсь в командной строке, и у меня нет опыта написания сценариев вБаш.Тем не менее, он должен хотя бы показать вам, как моя установка работает в теории.

Все AMI - это Ubuntu Maverick i386 от Alestic.

У меня есть два снимка AMI:

  • Master
    • Пользователи
      • git - очень ограниченный доступ, запускает git-shell, поэтому к нему нельзя получить доступ через SSH, но размещает репозиторий git, который может быть передан или извлеченfrom.
      • ubuntu - Учетная запись SSH по умолчанию, используемая для администрирования сервера и развертывания кода.
    • Службы
      • Простой хостинг репозитория git через ssh.
      • Apache и PHP, базы данных размещены на Amazon RDS
  • Slave
    • Службы
      • Apache и PHP,базы данных размещены на Amazon RDS

Прямо сейчас (это изменится) вот как код развертывания на моих серверах:

  1. Объединить изменения в основную ветвь на локальном компьютере.
  2. Остановить все ведомые экземпляры.
  3. Используйте Git, чтобы протолкнуть основную ветвьна главный сервер.
  4. Войдите в систему для пользователя ubuntu через SSH на главном сервере и запустите скрипт, который выполняет следующие действия:
    1. Экспортирует (git-archive) код из локального репозитория в папку.
    2. Сжимает папку и загружает резервную копию кода в S3 с отметкой времени, прикрепленной к имени файла.
    3. Заменяет код в / var / www / с папкой и дает соответствующие разрешения.
    4. Удаляет экспортированную папкуиз домашнего каталога, но оставляет сжатый файл без изменений с последним кодом.5 Запустите все ведомые экземпляры.При запуске они запускают скрипт:
    5. Apache не запускается, пока не будет запущен.
    6. Используйте scp (защищенное копирование), чтобы скопировать последний сжатый код из master в / tmp / www
    7. Извлеките код и замените / var / www / и предоставьте соответствующие разрешения.
    8. Запустите Apache.

Я приведу примеры кода, но они очень неполны иМне нужно больше времени.Я также хочу, чтобы все мои активы (css / js / img) автоматически отправлялись на s3, чтобы их можно было передавать клиентам через CloudFront.

1 Ответ

4 голосов
/ 19 апреля 2011

EBS - это как жесткий диск, который вы можете подключить к одному экземпляру, в основном, 1: 1. S3 - единственное общее хранилище в AWS, в противном случае вам потребуется настроить сервер NFS или аналогичный.

Что вы можете сделать, это поместить все ваши php-файлы на s3, а затем синхронизировать их с новым экземпляром при запуске.

Я бы порекомендовал связать пользовательский AMI со всем необходимым (apache, php и т. Д.) И настроить задание cron для синхронизации файлов php из s3 в корневой каталог вашего документа. Ваш рабочий процесс будет таким: загрузите файлы на s3, позвольте серверу cron синхронизировать файлы.

Остальные настройки кажутся стандартными.

...