Мини-очерк ом, как быстро начать разработку на PHP на локальной Windows-машине с production-сервером, как это модно нынче говорить — в облаках
, с помощью Amazon Web Services.
Используемые средства и материалы: IDE, GIT, AWS DevTools, AWS Elastic Beanstalk, Amazon Route 53, Денвер.
Установка Денвера
Обычно в этом этапе нет ничего сложного или проблематичного, для быстрого старта достаточно лишь скачать дистрибутив с официального сайта (http://www.denwer.ru и http://www.denwer.ru/packages/php5.html) и следовать стандартным шагам установки.
Однако, можно столкнуться с некоторыми проблемами при запуске Apache, если порты 80 и 443 уже заняты сторонним процессом. Собственно, именно это и произошло у меня.
При запуске Apache видим следующее:
make_sock: could not bind to address 127.0.0.1:443
make_sock: could not bind to address 127.0.0.1:80
Решить эту проблему можно двумя способами:
- Изменить порты, используемые по умолчанию — в чем нам поможет httpd.conf;
- Выяснить, какие процессы занимают порты и отключить/перенастроить их.
В моем случае был необходим второй вариант, поэтому первое, что предстояло сделать — посмотреть список открытых портов. Сделать это можно либо с помощью Moo0 ConnectionWatcher, либо с помощью команды netstat -anb в консоли. Картина была следующая:
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:433 0.0.0.0:0 LISTENING 4
Гугл подсказал, что сервис, который может обитать на 80-ом порту — World Wide Web Publishing Service или Служба веб-публикаций (Windows7). Выполняем в консоли:
netstat -ano 1 | find "LISTENING" | find ":80"
для мониторинга, отключаем службу, получаем долгожданный профит. По аналогии ищем паразитирующий процесс на 443 порту, в моём случае это оказался TeamViewer. Из возможных программ, которые могут подкинуть аналогичных проблем: Skype, mTorrent, QIP.
После недолгих манипуляций Apache успешно запущен и функционирует на localhost.
Далее необходимо настроить под себя конфиг и создать новый проект, например в папке N:\home\localhost\myapp, который будет доступен по адресу myapp.localhost после запуска/рестарта сервера.
Создаём приложение в AWS Elastic Beanstalk
Для использования сервисов от Amazon нам понадобиться активированный аккаунт (https://aws-portal.amazon.com/gp/aws/developer/registration/index.html), для чего понадобится кредитная карта и мобильный телефон.
Amazon предоставляет новым пользователям бесплатное использование сервисов в течение года. Условия и перечень ограничений по количественным/качественным характеристикам можно увидеть здесь: http://aws.amazon.com/free/.
Внимание: при выходе за бесплатные лимиты происходит автоматическое выставление счета и списание средств.
Получив доступ к консоли AWS, приступаем к процессу создания приложения: https://console.aws.amazon.com/elasticbeanstalk/home.
В поле Container type указываем Amazon Linux running PHP 5.3,
в Application Source — Use the Sample Application.
На следующих этапах нам предложат указать публичный URL, по которому будет доступно приложение и другие детали, после чего, набрав в браузере адрес на подобии http://myapp-env.elasticbeanstalk.com, можно будет лицезреть тестовое приложение.
В процессе создания приложения создаются инстансы Amazon EC2, EBS Volume, Elastic Load Balancer.
Установка GIT
Скачиваем последнию версию GIT под Windows отсюда: http://code.google.com/p/msysgit/downloads/list.
Следуя шагам установки, выбираем Use GIT Bash only:
Настраиваем AWS DevTools
AWS DevTools — расширение для GIT, позволяющее выкатывать приложения в AWS Elastic Beanstalk.
Скачать его можно отсюда: https://s3.amazonaws.com/elasticbeanstalk/cli/elasticbeanstalk-cli.zip
Далее с помощью консоли GIT запускаем AWSDevTools-OneTimeSetup.bat, который находится в /AWS WebTools/Windows/. После чего, копируем AWSDevTools-RepositorySetup.bat из той же папки в папку нового проекта.
Выполняем в консоли GIT:
cd /path/to/project/
git init .
./AWSDevTools-RepositorySetup.bat
git add .
git commit -m 'init'
git aws.config
После чего будет предложено ввести ключи доступа учетной записи AWS, которые можно посмотреть здесь:
https://aws-portal.amazon.com/gp/aws/securityCredentials, а так же имя приложения и среды из AWS Elastic Beanstalk, которые можно увидеть здесь:
https://console.aws.amazon.com/elasticbeanstalk/home. Выглядеть это должно примерно так:
Далее выполняем:
git aws.push
Если всё ОК, то видим что-то вроде этого:
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects:100% (2/2), done.
Writing objects: 100% (3/3), 298 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://[some long string]@git.elasticbeanstalk.us-east-1.amazon.com/helloworld/helloworldenv
44c7066..b1f11a1 master -> master
А в консоли управления AWS Elastic Beanstalk появится надпись Successfully running version git-….
В принципе, с этого момента приложение уже будет доступно по адресу http://myapp-env.elasticbeanstalk.com, однако, сделаем косметический штрих и привяжем его к собственному домену с помощью Amazon Route 53.
Стоит отметить, что все версии, которые будут заливаться с помощью AWS Elastic Beanstalk будут доступны в Amazon S3 даже после удаления приложения.
Настройка Amazon Route 53
Для начала необходимо создать Hosted Zone в Amazon Route 53: https://console.aws.amazon.com/route53/home. Для этого нужно нажать соответствующий баттон и ввести имя зарегистрированного домена.
После этого система сгенерирует dns-сервера, которые необходимо будет прописать в панели управления доменом у регистратора.
После этого останется только добавить ALIAS для домена, указывающий на адрес балансировщика Elastic Load Balancer. Для этого необходимо нажать Create Record Set, выбрав Alias и Alias Target.
Через некоторое время тестовый проект появится на рабочем домене.
В итоге мы:
- создали новыq проект с помощью распределенной системы контроля версий GIT;
- подняли на Windows-машине Денвер с веб-сервером Apache для тестирования проекта локально;
- настроили интеграцию GIT с AWS для заливки версий нашего проекта на production-площадку;
- создали первое приложение с помощью AWS Elastic Beanstalk для организации виртуальной площадки под приложение в облаке;
- связали доменное имя с балансировщиком нагрузки Elastic Load Balancer, позволяющем вводить/убирать инстансы Amazon EC2 в зависимости от нагрузки;
- быстро развернули рабочее пространство для начала работы на проектом, который, в перспективе, может использовать все преимущества размещения
в облаке
.
Естественно, ооочень многие аспекты остались за рамками данного очерка, поскольку охватить всё в одном тексте просто невозможно. Поэтому, оставляйте ваши комментарии ниже, если было упущено что-то важное, были допущены какие-либо «ляпы» или неточности в описании.