Данная инструкция не претендует на абсолютную точность, какую-либо новизну и предназначена для делающих самые первые шаги. Поэтому не судите особо строго.
Предположим нам хочется захостить небольшой проектик где-нибудь в надежном и не особо тормозящем месте. А поскольку сайт небольшой, то не будем заморачиваться и захотим от хостинга что-нибудь самое простое. Для наших целей вполне хватит PHP, MySQL и доступа по FTP.
Для решения этой задачи идеально подходит Веб сервис от Амазона в котором удивительным образом сочетается способность выдерживать большие нагрузки с бесплатным пакетом ресурсов на первый год после регистрации. В бесплатный пакет входит много чего, но в данный момент нас будут интересовать:
Причем все это при желании можно зарегистрировать и подготовить к работе за полчаса, но понадобится кредитная карта, которую примет Amazon (и снимет 2 доллара) и сотовый телефон под рукой (домашний не подойдет).
Процедура регистрации обычно не вызывает вопросов. Единственный совет — вводить реальные или близкие к реальным данные. Семенов Горбунковых с улицы Горького давно не регистрируют, а если неправильно указать индекс города, то система даст скрытый отлуп на этапе проверки кода по телефону.
Перед тем как вбивать данные кредитной карты, нужно убедиться что по ней доступно для снятия минимум 85р для Mastercard и 75р для Visa. В зависимости от региона и типа кредитной карты в конце процесса регистрации нас могут попросить подтвердить свой сотовый телефон. Тут правил 3 — вписывать номер нужно без восьмерки и кода страны (10 цифр), не забывать правильно выбирать страну и начинать вводить код с клавиатуры только после того как синтезированная телефонная барышня перестанет говорить и затаится в ожидании. Если подтвердить не попросят, значит Амазону очень понравилась ваша кредитка и у них еще еще не было проблем с пользователями из вашего диапазона адресов. Но поскольку нас больше всего интересует сервис EC2 (для которого верификация обязательна), то подтверждать 4 цифры по телефону придется в любом случае. После регистрации с карты снимут 1 доллар (и потом его не вернут) и сразу предоставят доступ к сервису хранения файлов S3 и к шикарной консоли управления
К слову сказать, с самого начала все картинки из этого сообщения лежали именно на сервисе S3 и 5Гб места на нем тоже входят в бесплатный годовой пакет (но бесплатный лимит кончился меньше чем за сутки). На S3 можно создать корзину (Create Bucket), включить галку Enabled на вкладке Website и легко организовать хранилище файлов. Например, если назвать корзину словом test86 и положить в нее файл tеst85.7z, то из браузера он будет виден по адресам test86.s3.amazonaws.com/tеst85.7z и s3.amazonaws.com/test86/tеst85.7z. Обратите внимание, что без изменения дополнительных опций при загрузке, файлы сможет увидеть только владелец этой корзины. Чтобы открыть доступ к просмотру одного или нескольких файлов нужно выделить их и выбрать в меню Actions/Make Public. Кроме S3 у Амазона есть еще масса интересных сервисов, но речь сегодня пойдет только о EC2.
Прямо со страницы управления S3 можно щелкнуть по верхней закладке EC2 и согласиться на добавление этого сервиса к вашему аккаунту. Если на этапе проверки кредитки не перекинуло в процедуру проверки телефонного номера, то перекинет отсюда и нужно будет подтвердить. После подтверждения откроется примерно такая картина
а с карты спишется еще один доллар.
Не теряя времени даром, щелкаем на ссылку Security Groups слева. Создаваемую по умолчанию группу лучше не трогать, но она нас никак не устраивает с точки зрения прав доступа (все порты любые действия). Поэтому создадим свою группу с более ограниченными правами
и назовем ее, например, web.
После создания добавим несколько правил в закладке Inbound
По аналогии добавим для общего доступа (Source: 0.0.0.0/0), к портам 20-21, TCP порты 1024-1048, HTTP и HTTPS. Разрешать доступ по SSH с любого адреса я бы поостерегся, поэтому лучше вписать в строку Source: или свой статический IP или подсеть своего провайдера (что-нибудь типа 211.207.171.0/24). В результате должно получится что-то похожее на
Щелкаем на Apply Rule Changes и переходим к следующему этапу.
Ключи нужны для доступа на сервер по SSH и они могут быть созданы и в процессе развертывания образа выбранной ОС, но в IE и Chrome наблюдаются периодические глюки с отдачей файла ключей на скачивание. Поэтому лучше сделать это заранее и если заглючит, то повторить.
Для генерации ключей выбираем Key Pairs в меню и давим пару кнопок.
Сервер немного подумает и отдаст нам ключевой .pem файл, который нужно бережно спрятать в надежном месте и никому не показывать.
Итак, у нас есть ключ и дополнительная пользовательская группа. Теперь можно смело нажимать Launch Instance из меню EC2 Dashboard.
Согласимся на Classic Wizard.
Наш выбор это 32-x или 64-х битный Amazon Linux AMI.
Оставляем все установки по умолчанию.
Включаем защиту от удаления.
Теги вбивать не обязательно.
Будем использовать уже сгенерированные ключи.
В конфигурации фаервола оставляем только Security Group индекс-web.
Проверяем установки и запускаем.
После запуска в списке Instances появится наш микро-сервер.
В меню Elastic IPs сначала резервируем себе IP адрес.
И тут же присваиваем его нашему запущенному серверу.
Обратите внимание что резервирование незакрепленного за работающим сервером IP адреса не входит в бесплатный пакет. За это придется платить по центу в час. Как только IP присваивается запущенному северу, он тут же становится бесплатным.
В нашем примере Амазон выдал серверу адрес 107.21.246.159 и в дальнейшем мы его будем часто использовать, но в вашем случае во всех действиях и командах его нужно будет заменять на адрес, который выдали лично вам.
Для этой цели можно использовать массу разнообразных программ, но вся дальнейшая инструкция написана для виндового и бесплатного PuTTY (прямая ссылка на загрузку).
Из архива нам в первую очередь понадобится puttygen.exe. Запускаем, выбираем Conversions/Import key.
и пересохраняем приватный кей как SSH2 RSA .ppk файл. На этом этапе не помешает как следует запаролить ключ.
После этого запускаем putty.exe, вбиваем наш IP в поле Host Name.
в разделе SSH-Auth указываем путь к .ppk ключу.
и нажимаем кнопку Open. В окошке терминала не должно быть никаких сообщений об ошибках, а в предложение:
нужно ввести ec2-user.
Теперь будем настраивать по SSH.
По ходу настройки иногда придется нажимать кнопку y чтобы соглашаться с предложениями установить все вместе с зависимостями. После ввода каждой команды нужно дождаться окончания работы и только потом вводить следующую.
Сразу после входа хорошо бы обновиться. Для этого говорим:
В системе нам не помешает Миднайт Командер (там более привычный для мышевозов редактор):
Создадим пользовательскую группу virtwww:
Добавим пользователей:
и зададим пароли посложнее:
На всякий случай еще раз установим права на каталог:
Теперь наш сервер полностью готов к установке сервисов.
Установим MySQL:
Добавим его в автозапуск:
и запустим:
После этого зададим пароль пользователю root:
не забудьте вписать что-то свое вместо s10ZniYpar00L
Запретим подключение к базе без пароля:
и обновим привилегии:
Удалим тестовую базу:
и выйдем из консоли управления MySQL сервером:
Установим vSFTPd:
Добавляем его в автозапуск и пробуем запустить:
Редактируем конфигурацию:
Изменяем значения параметров:
Добавляем в конец файла:
Не забудьте вписать тут свой IP
Кнопкой F2 сохраняем изменения, выходим из редактора через F10 и перезапускаем FTP сервер:
Теперь можно пробовать подключиться к нашему серверу по FTP любым клиентом с поддержкой PASV режима.
В качестве имени хоста используем наш IP, пользователь www, пароль из шага номер 8. Режим PASV включен принудительно. Подключаемся и пробуем залить в папку /var/www любой файл. Если не получается, говорим:
и пробуем еще раз.
Примерно вот так это выглядит во FlashFXP:
Если залилось с самого начала, то не нужно менять права с 750 на 755 (это дополнительная дырка в безопасности)
и проверяем права доступа к файлу. Он должен создаться с правами 0644. Если все совпадает, то переходим к 11-му шагу.
Сначала ставим Апач:
После него PHP:
Отдельной строчкой регэкспы:
и общей кучей модули и зависимости для PHP:
Добавляем Apache в автозапуск и пробуем его запустить:
Если все запустилось, корректируем конфигурацию под амазоновский сервер и пользователя webserver:
Ищем и корректируем в тексте следующие строчки
Строку TraceEnable Off возможно придется добавить.
Кнопкой F2 сохраняем изменения, выходим из редактора через F10 и перезапускаем Apache:
Разрешаем изменение файлов через ftp:
Убираем основную вредительскую дырку в конфиге PHP:
Ищем строку magic_quotes_gpc и ставим ее в положение On:
Для совместимости не помешает включить короткие теги:
Кнопкой F2 сохраняем изменения, выходим из редактора через F10 и перезапускаем Apache:
Если на каком-либо этапе апач перестанет запускаться, откатываем изменения и смотрим что произошло в логах:
и
После того как все запустилось закрываем терминал:
и возвращаемся в консоль управления в барузере.
Этот шаг в принципе можно пропустить, но это делать нежелательно. Балансировка входит в бесплатный пакет и я не вижу зачем отказываться от такой полезной вещи, которую можно использовать и для поддержки живости сайта. В этом режиме система Load Balancers периодически просто обращается к какому либо URL на сервере и делает выводы из времени отклика. Отсюда логически вытекает самая распространенная ошибка в настройке. По умолчанию предлагается пинговать индексную страницу сайта, а кто знает сколько она может весить в произвольном случае? В результате при каждой проверке тратится вроде бы немножко трафика, но за месяц может накапать целое ведро. Поэтому создадим для этой системы специальную страничку ping.html и впишем туда одинокую единичку без юникодов, пробелов и переводов строк. В результате на проверку всегда будет тратиться ровно 1 байт трафика. Этот файл нужно загрузить через ftp в корень сайта перед созданием балансера.
Имя может быть произвольным, но уникальным если балансеров несколько.
Целью проверки выбираем ping.html
Проверять будем наш уже запущенный сервер
Ура и все! Можно открывать в браузере наш IP адрес, заливать PHP скрипты через FTP и общаться из них с MySQL. Пример:
Не забывайте периодически контролировать расходы ресурсов в разделе управления аккаунтом и постарайтесь не пропустить момент, когда ваш бесплатный хостинг вдруг станет платным. При превышении лимитов любого из бесплатных сервисов, он не останавливается, а становится платным.
Расценки за превышение бесплатных норм для S3 и EC2
Вместо заключения: Не стоит думать, что все описанные манипуляции являются оптимальными и обеспечивают хоть какой-то уровень безопасности. Сервер в таком виде годится только для тестирования и хостинга домашних страничек с десятком посетителей в месяц. Довести все это до ума можно и это даже не сложно для грамотного человека. Засада в том, что грамотными становятся не день и не за год и вообще в одном человеке редко совмещается писатель на простонародном php и специалист в настройке серверов. Поэтому прежде чем отпускать это все безобразие в свободное плавание, попросите, за пару бутылок коньяка, какого-нибудь знакомого бородатого юниксоида законнектиться к вашему серверу по SSH. Он поматерится, поковыряется минут 10, несколько раз обзовет писателя этой стены текста бараном (и будет прав), но после этого все заработает не в пример лучше и стабильнее.
Upd Еще почитать про Amazon AWS можно вот тут:
habrahabr.ru/blogs/infosecurity/107631
habrahabr.ru/blogs/hosting/62362
habrahabr.ru/blogs/hosting/55058
И про Ubuntu на английском
alestic.com
И тоже наверное перенесу тему в хостинг.
Боевая задача.
Предположим нам хочется захостить небольшой проектик где-нибудь в надежном и не особо тормозящем месте. А поскольку сайт небольшой, то не будем заморачиваться и захотим от хостинга что-нибудь самое простое. Для наших целей вполне хватит PHP, MySQL и доступа по FTP.
Для решения этой задачи идеально подходит Веб сервис от Амазона в котором удивительным образом сочетается способность выдерживать большие нагрузки с бесплатным пакетом ресурсов на первый год после регистрации. В бесплатный пакет входит много чего, но в данный момент нас будут интересовать:
- Виртуальный сервер в формате micro на основе Linux с доступом по SSH.
- 30Гб места в Elastic Block Storage плюс 1Гб под бэкапы.
- 15 Гб трафика в месяц.
- Выделенный внешний IP адрес.
Причем все это при желании можно зарегистрировать и подготовить к работе за полчаса, но понадобится кредитная карта, которую примет Amazon (и снимет 2 доллара) и сотовый телефон под рукой (домашний не подойдет).
Шаг 1: Регистрируемся на Amazon.
Процедура регистрации обычно не вызывает вопросов. Единственный совет — вводить реальные или близкие к реальным данные. Семенов Горбунковых с улицы Горького давно не регистрируют, а если неправильно указать индекс города, то система даст скрытый отлуп на этапе проверки кода по телефону.
Перед тем как вбивать данные кредитной карты, нужно убедиться что по ней доступно для снятия минимум 85р для Mastercard и 75р для Visa. В зависимости от региона и типа кредитной карты в конце процесса регистрации нас могут попросить подтвердить свой сотовый телефон. Тут правил 3 — вписывать номер нужно без восьмерки и кода страны (10 цифр), не забывать правильно выбирать страну и начинать вводить код с клавиатуры только после того как синтезированная телефонная барышня перестанет говорить и затаится в ожидании. Если подтвердить не попросят, значит Амазону очень понравилась ваша кредитка и у них еще еще не было проблем с пользователями из вашего диапазона адресов. Но поскольку нас больше всего интересует сервис EC2 (для которого верификация обязательна), то подтверждать 4 цифры по телефону придется в любом случае. После регистрации с карты снимут 1 доллар (и потом его не вернут) и сразу предоставят доступ к сервису хранения файлов S3 и к шикарной консоли управления
К слову сказать, с самого начала все картинки из этого сообщения лежали именно на сервисе S3 и 5Гб места на нем тоже входят в бесплатный годовой пакет (но бесплатный лимит кончился меньше чем за сутки). На S3 можно создать корзину (Create Bucket), включить галку Enabled на вкладке Website и легко организовать хранилище файлов. Например, если назвать корзину словом test86 и положить в нее файл tеst85.7z, то из браузера он будет виден по адресам test86.s3.amazonaws.com/tеst85.7z и s3.amazonaws.com/test86/tеst85.7z. Обратите внимание, что без изменения дополнительных опций при загрузке, файлы сможет увидеть только владелец этой корзины. Чтобы открыть доступ к просмотру одного или нескольких файлов нужно выделить их и выбрать в меню Actions/Make Public. Кроме S3 у Амазона есть еще масса интересных сервисов, но речь сегодня пойдет только о EC2.
Шаг 2: Подготовка к созданию EC2 сервера.
Прямо со страницы управления S3 можно щелкнуть по верхней закладке EC2 и согласиться на добавление этого сервиса к вашему аккаунту. Если на этапе проверки кредитки не перекинуло в процедуру проверки телефонного номера, то перекинет отсюда и нужно будет подтвердить. После подтверждения откроется примерно такая картина
а с карты спишется еще один доллар.
Шаг 3: Добавление пользовательской группы.
Не теряя времени даром, щелкаем на ссылку Security Groups слева. Создаваемую по умолчанию группу лучше не трогать, но она нас никак не устраивает с точки зрения прав доступа (все порты любые действия). Поэтому создадим свою группу с более ограниченными правами
и назовем ее, например, web.
После создания добавим несколько правил в закладке Inbound
По аналогии добавим для общего доступа (Source: 0.0.0.0/0), к портам 20-21, TCP порты 1024-1048, HTTP и HTTPS. Разрешать доступ по SSH с любого адреса я бы поостерегся, поэтому лучше вписать в строку Source: или свой статический IP или подсеть своего провайдера (что-нибудь типа 211.207.171.0/24). В результате должно получится что-то похожее на
Щелкаем на Apply Rule Changes и переходим к следующему этапу.
Шаг 4: Создание SSH ключей.
Ключи нужны для доступа на сервер по SSH и они могут быть созданы и в процессе развертывания образа выбранной ОС, но в IE и Chrome наблюдаются периодические глюки с отдачей файла ключей на скачивание. Поэтому лучше сделать это заранее и если заглючит, то повторить.
Для генерации ключей выбираем Key Pairs в меню и давим пару кнопок.
Сервер немного подумает и отдаст нам ключевой .pem файл, который нужно бережно спрятать в надежном месте и никому не показывать.
Шаг 5: Развертывание образа Операционной Системы.
Итак, у нас есть ключ и дополнительная пользовательская группа. Теперь можно смело нажимать Launch Instance из меню EC2 Dashboard.
Согласимся на Classic Wizard.
Наш выбор это 32-x или 64-х битный Amazon Linux AMI.
Оставляем все установки по умолчанию.
Включаем защиту от удаления.
Теги вбивать не обязательно.
Будем использовать уже сгенерированные ключи.
В конфигурации фаервола оставляем только Security Group индекс-web.
Проверяем установки и запускаем.
После запуска в списке Instances появится наш микро-сервер.
Шаг 6: Регистрируем IP адрес для сервера.
В меню Elastic IPs сначала резервируем себе IP адрес.
И тут же присваиваем его нашему запущенному серверу.
Обратите внимание что резервирование незакрепленного за работающим сервером IP адреса не входит в бесплатный пакет. За это придется платить по центу в час. Как только IP присваивается запущенному северу, он тут же становится бесплатным.
В нашем примере Амазон выдал серверу адрес 107.21.246.159 и в дальнейшем мы его будем часто использовать, но в вашем случае во всех действиях и командах его нужно будет заменять на адрес, который выдали лично вам.
Шаг 7: Подключаемся к серверу по SSH.
Для этой цели можно использовать массу разнообразных программ, но вся дальнейшая инструкция написана для виндового и бесплатного PuTTY (прямая ссылка на загрузку).
Из архива нам в первую очередь понадобится puttygen.exe. Запускаем, выбираем Conversions/Import key.
и пересохраняем приватный кей как SSH2 RSA .ppk файл. На этом этапе не помешает как следует запаролить ключ.
После этого запускаем putty.exe, вбиваем наш IP в поле Host Name.
в разделе SSH-Auth указываем путь к .ppk ключу.
и нажимаем кнопку Open. В окошке терминала не должно быть никаких сообщений об ошибках, а в предложение:
login as:
нужно ввести ec2-user.
Теперь будем настраивать по SSH.
По ходу настройки иногда придется нажимать кнопку y чтобы соглашаться с предложениями установить все вместе с зависимостями. После ввода каждой команды нужно дождаться окончания работы и только потом вводить следующую.
Шаг 8: Обновление и подготовка к настройке сервера.
Сразу после входа хорошо бы обновиться. Для этого говорим:
sudo yum -y update
В системе нам не помешает Миднайт Командер (там более привычный для мышевозов редактор):
sudo yum install mc
Создадим пользовательскую группу virtwww:
sudo groupadd virtwww
Добавим пользователей:
sudo useradd www -g virtwww -d /var/www
sudo useradd webserver -g virtwww
и зададим пароли посложнее:
sudo passwd www
sudo passwd webserver
На всякий случай еще раз установим права на каталог:
sudo chown www:virtwww /var/www
sudo chmod 0750 /var/www
Теперь наш сервер полностью готов к установке сервисов.
Шаг 9: Установка MySQL.
Установим MySQL:
sudo yum install mysql-server mysql
Добавим его в автозапуск:
sudo /sbin/chkconfig --levels 235 mysqld on
и запустим:
sudo service mysqld start
После этого зададим пароль пользователю root:
mysql -u root
USE mysql
не забудьте вписать что-то свое вместо s10ZniYpar00L
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('s10ZniYpar00L');
Запретим подключение к базе без пароля:
DELETE FROM user WHERE password = '';
DELETE FROM user WHERE user.user= '';
и обновим привилегии:
FLUSH PRIVILEGES;
Удалим тестовую базу:
DROP DATABASE test;
и выйдем из консоли управления MySQL сервером:
\q
Шаг 10: Настройка FTP.
Установим vSFTPd:
sudo yum install vsftpd
Добавляем его в автозапуск и пробуем запустить:
sudo /sbin/chkconfig --levels 235 vsftpd on
sudo service vsftpd start
Редактируем конфигурацию:
sudo mcedit /etc/vsftpd/vsftpd.conf
Изменяем значения параметров:
anonymous_enable=NO
local_enable=YES
write_enable=YES
Добавляем в конец файла:
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=107.21.246.159
Не забудьте вписать тут свой IP
Кнопкой F2 сохраняем изменения, выходим из редактора через F10 и перезапускаем FTP сервер:
sudo service vsftpd restart
Теперь можно пробовать подключиться к нашему серверу по FTP любым клиентом с поддержкой PASV режима.
В качестве имени хоста используем наш IP, пользователь www, пароль из шага номер 8. Режим PASV включен принудительно. Подключаемся и пробуем залить в папку /var/www любой файл. Если не получается, говорим:
sudo chmod 0755 /var/www
и пробуем еще раз.
Примерно вот так это выглядит во FlashFXP:
Если залилось с самого начала, то не нужно менять права с 750 на 755 (это дополнительная дырка в безопасности)
и проверяем права доступа к файлу. Он должен создаться с правами 0644. Если все совпадает, то переходим к 11-му шагу.
Шаг 11: Установка Apache и PHP.
Сначала ставим Апач:
sudo yum install httpd mod_ssl
После него PHP:
sudo yum install php
Отдельной строчкой регэкспы:
sudo yum install pcre-devel
и общей кучей модули и зависимости для PHP:
sudo yum -y install aspell aspell-en aspell-ru cvs php-gd php-intl php-mbstring php-mysql php-pdo php-soap php-xml php-xmlrpc php-pspell php-devel php-pear
Добавляем Apache в автозапуск и пробуем его запустить:
sudo /sbin/chkconfig --levels 235 httpd on
sudo service httpd start
Если все запустилось, корректируем конфигурацию под амазоновский сервер и пользователя webserver:
sudo mcedit /etc/httpd/conf/httpd.conf
Ищем и корректируем в тексте следующие строчки
ServerTokens Prod
TraceEnable Off
KeepAlive On
MaxKeepAliveRequests 256
KeepAliveTimeout 10
User webserver
Group virtwww
Строку TraceEnable Off возможно придется добавить.
Кнопкой F2 сохраняем изменения, выходим из редактора через F10 и перезапускаем Apache:
sudo service httpd restart
Разрешаем изменение файлов через ftp:
sudo chown www:virtwww /var/www/html /var/www/icons /var/www/error /var/www/cgi-bin
Убираем основную вредительскую дырку в конфиге PHP:
sudo mcedit /etc/php.ini
Ищем строку magic_quotes_gpc и ставим ее в положение On:
magic_quotes_gpc = On
Для совместимости не помешает включить короткие теги:
short_open_tag = On
Кнопкой F2 сохраняем изменения, выходим из редактора через F10 и перезапускаем Apache:
sudo service httpd restart
Если на каком-либо этапе апач перестанет запускаться, откатываем изменения и смотрим что произошло в логах:
sudo mcview /var/log/httpd/error_log
и
sudo mcview /var/log/httpd/access_log
После того как все запустилось закрываем терминал:
exit
и возвращаемся в консоль управления в барузере.
Шаг 12: Включаем балансировку нагрузки (Load Balancers).
Этот шаг в принципе можно пропустить, но это делать нежелательно. Балансировка входит в бесплатный пакет и я не вижу зачем отказываться от такой полезной вещи, которую можно использовать и для поддержки живости сайта. В этом режиме система Load Balancers периодически просто обращается к какому либо URL на сервере и делает выводы из времени отклика. Отсюда логически вытекает самая распространенная ошибка в настройке. По умолчанию предлагается пинговать индексную страницу сайта, а кто знает сколько она может весить в произвольном случае? В результате при каждой проверке тратится вроде бы немножко трафика, но за месяц может накапать целое ведро. Поэтому создадим для этой системы специальную страничку ping.html и впишем туда одинокую единичку без юникодов, пробелов и переводов строк. В результате на проверку всегда будет тратиться ровно 1 байт трафика. Этот файл нужно загрузить через ftp в корень сайта перед созданием балансера.
Имя может быть произвольным, но уникальным если балансеров несколько.
Целью проверки выбираем ping.html
Проверять будем наш уже запущенный сервер
Ура и все! Можно открывать в браузере наш IP адрес, заливать PHP скрипты через FTP и общаться из них с MySQL. Пример:
Не забывайте периодически контролировать расходы ресурсов в разделе управления аккаунтом и постарайтесь не пропустить момент, когда ваш бесплатный хостинг вдруг станет платным. При превышении лимитов любого из бесплатных сервисов, он не останавливается, а становится платным.
Расценки за превышение бесплатных норм для S3 и EC2
Вместо заключения: Не стоит думать, что все описанные манипуляции являются оптимальными и обеспечивают хоть какой-то уровень безопасности. Сервер в таком виде годится только для тестирования и хостинга домашних страничек с десятком посетителей в месяц. Довести все это до ума можно и это даже не сложно для грамотного человека. Засада в том, что грамотными становятся не день и не за год и вообще в одном человеке редко совмещается писатель на простонародном php и специалист в настройке серверов. Поэтому прежде чем отпускать это все безобразие в свободное плавание, попросите, за пару бутылок коньяка, какого-нибудь знакомого бородатого юниксоида законнектиться к вашему серверу по SSH. Он поматерится, поковыряется минут 10, несколько раз обзовет писателя этой стены текста бараном (и будет прав), но после этого все заработает не в пример лучше и стабильнее.
Upd Еще почитать про Amazon AWS можно вот тут:
habrahabr.ru/blogs/infosecurity/107631
habrahabr.ru/blogs/hosting/62362
habrahabr.ru/blogs/hosting/55058
И про Ubuntu на английском
alestic.com
И тоже наверное перенесу тему в хостинг.