<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Apple Geek &#187; hosting</title>
	<atom:link href="http://theapplegeek.ru/archives/tag/hosting/feed" rel="self" type="application/rss+xml" />
	<link>http://theapplegeek.ru</link>
	<description>Чему ты научился сегодня?</description>
	<lastBuildDate>Fri, 30 Jul 2010 13:48:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Затраты на сервис Amazon CloudFront</title>
		<link>http://theapplegeek.ru/archives/3669</link>
		<comments>http://theapplegeek.ru/archives/3669#comments</comments>
		<pubDate>Fri, 02 Apr 2010 20:14:27 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3669</guid>
		<description><![CDATA[Для кеширования контента я использую плагин WordPress &#8220;W3 Total Cache&#8220;. Одна из очень ценных его функций кроме кеширования &#8211; вынесение статического контента (изображения, css, js-файлов) в Content Delivery Network Amazon CloudFront (о его настройке я уже рассказывал). Достоинства: Ускоряется загрузка сайта за счёт того, что контент располагается на ближайших серверах CDN. Уменьшается нагрузка на сайт, [...]]]></description>
			<content:encoded><![CDATA[<p>Для кеширования контента я использую плагин WordPress &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://wordpress.org/extend/plugins/w3-total-cache/" >W3 Total Cache</a></noindex>&#8220;. Одна из очень ценных его функций кроме кеширования &#8211; вынесение статического контента (изображения, css, js-файлов) в Content Delivery Network <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/cloudfront/" >Amazon CloudFront</a></noindex> (о его настройке <a href="http://theapplegeek.ru/archives/2960" >я уже рассказывал</a>).</p>
<p>Достоинства:</p>
<ul>
<li>Ускоряется загрузка сайта за счёт того, что контент располагается на ближайших серверах CDN.</li>
<li>Уменьшается нагрузка на сайт, так как не приходится раздавать множество изображений и других файлов, движок WordPress генерирует только страницу, а всё остальное подтягивается из CDN. Это снижает требования к хостингу.</li>
<li>Уменьшается трафик, ведь большинство трафика создают изображения. Это также приводит к экономии.</li>
</ul>
<p><span id="more-3669"></span></p>
<p>Стоимость сервиса очень демократичная. На текущий момент у блога 300 уникальных посетителей в день и 600 RSS-подписчиков с fullfeed. И за это я плачу порядка $2-$3 в месяц:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/04/01_cloudfront-full.png"  class="image-link" rel="lightbox"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/04/01_cloudfront-thumb.png" height="312" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3669/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Переход на внешний хостинг</title>
		<link>http://theapplegeek.ru/archives/3610</link>
		<comments>http://theapplegeek.ru/archives/3610#comments</comments>
		<pubDate>Tue, 23 Mar 2010 10:20:50 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=3610</guid>
		<description><![CDATA[Три месяца я держал свой блог на ноутбуке MacBook, стоящем на кухне &#8211; он плавно перемещался под потолком с кухонного шкафа на холодильник и обратно. Процесс установки блога на Mac OS X я детально описал в статьях: &#8220;Часть 1, MySQL&#8220;, &#8220;Часть 2, Apache&#8221; и &#8220;Часть 3, кеширование&#8220;. Но в последние недели я стал замечать, что [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/03/00_linode-thumb1.png" height="126" align="right" width="160" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Три месяца я держал свой блог на ноутбуке MacBook, стоящем на кухне &#8211; он плавно перемещался под потолком с кухонного шкафа на холодильник и обратно. Процесс установки блога на Mac OS X я детально описал в статьях: &#8220;<a href="http://theapplegeek.ru/archives/2714" >Часть 1, MySQL</a>&#8220;, &#8220;<a href="http://theapplegeek.ru/archives/2735" >Часть 2, Apache</a>&#8221; и &#8220;<a href="http://theapplegeek.ru/archives/2790" >Часть 3, кеширование</a>&#8220;.</p>
<p>Но в последние недели я стал замечать, что по какой-то непонятной для меня причины подсеть моего домашнего провайдера становится недоступной на переходе Telia &#8211; Level3. Если бы это был одинарный случай, то я бы не беспокоился. Но две недели подряд &#8211; это уже перебор.</p>
<p>В итоге я принял решение перейти на внешний хостинг.</p>
<p><span id="more-3610"></span></p>
<p>К хостингу, особенно местечковому, у меня отношение сугубо отрицательное. Хостинг-провайдеры зарабатывают деньги. И разместить 200 клиентов на сервере, который может нормально обслужить всего 100 клиентов &#8211; это нормальная ситуация. И начинаются войны &#8211; клиенты требуют от провайдера сервиса, а провайдер обвиняет клиентов в создании излишней нагрузки и заставляет переходить на другой тариф. Всё это сопровождается непродуманностью технических возможностей &#8211; даже WordPress проблематично запустить из-за искусственно заниженных ограничений по памяти. В итоге shared-хостингом и VPS недовольны все. Поэтому местных хостинг-провайдеров я даже не рассматривал.</p>
<p>Самый правильный вариант &#8211; это выделенный сервер. Но прямой прибыли мои проекты не приносят, и платить $100-$200 никакого желания у меня нет.</p>
<p>Пересматривая заметки в Google Reader, я наткнулся на <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://journal.uggedal.com/vps-performance-comparison" >сравнительный анализ</a></noindex> сервисов VPS Amazon, Rackspace, Linode и ещё двух компаний. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/https://www.linode.com/" >Linode</a></noindex> по большинству параметров опередил, и я решил попробовать.</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/03/01_linode-full.png"  class="image-link" rel="lightbox[3610]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/03/01_linode-thumb.png" height="570" width="462" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Linode предлагает <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.xen.org/" >Xen</a></noindex>-хостинг. Я взял минимальный пакет Linode 360 с 360 MB RAM.</p>
<p>Конечно, перенос блога об Apple с Mac OS X на Linux не совсем кошерно, и я не оправдываю часть названия &#8220;The Apple&#8221;. Зато &#8220;Geek&#8221;&#8216;овость не страдает. Мне ещё с времени экспериментов с Amazon нравится Ubuntu, поэтому я создал VPS на Ubuntu 9.10 в Лондонском датацентре:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/03/02_linode-full.png"  class="image-link" rel="lightbox[3610]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/03/02_linode-thumb.png" height="146" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Процесс установки и переноса прошёл практически гладко, я даже не заметил ограничения по памяти. Мне показалось, что сайт стал работать немного медленнее, но это можно списать на территориальную удалённость площадки. Сейчас всяческие локальные сети обмена трафиком вроде UA-IX, MSK-IX уже кажутся рудиментом, и я предпочитаю держать ресурсы подальше от родины, тем более, что цена вопроса &#8211; какие-то смешные 50 ms RTT.</p>
<p>Да и стоимость меня очень даже устраивает. Кстати, <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://blog.myfreeweb.ru/" >@myfreeweb</a></noindex> порекомендовал сервис (dv) компании <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://mediatemple.net/" >Media Temple</a></noindex>. Но я хочу пока побыть на Linode, тем более, что за месяц я уже заплатил.</p>
<p>Кроме всего прочего у Linode есть <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://itunes.apple.com/us/app/linode-manager/id352861751?mt=8" >клиент под iPhone</a></noindex>:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/03/03_linode-full.png"  class="image-link" rel="lightbox[3610]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/03/03_linode-thumb.png" height="480" width="320" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Если вы заметили ухудшение работы сайта &#8211; пожалуйста, сообщите об этом мне в комментариях, я всегда готов улучшить сервис.</p>
<p>See you,<br />
Serdyukov Oleg</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/3610/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Вынесение статического контента в Amazon CloudFront</title>
		<link>http://theapplegeek.ru/archives/2960</link>
		<comments>http://theapplegeek.ru/archives/2960#comments</comments>
		<pubDate>Mon, 18 Jan 2010 15:20:12 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=2960</guid>
		<description><![CDATA[Изображение из заголовка я взял с AllThingsDistributed. Для любого сайта важны контент, скорость и дизайн. Без качественного контента не будет посетителей, плохая скорость их рано или поздно отпугнёт, плохой дизайн тоже не придаст особой любви даже при хорошем контенте (но это на последнем месте, так как многие посетители читают обновления только через RSS). Контент и [...]]]></description>
			<content:encoded><![CDATA[<p><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/01_cloudfront-thumb1.png" height="80" align="right" width="160" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p><i>Изображение из заголовка я взял с <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.allthingsdistributed.com/2008/11/amazon_cloudfront.html" >AllThingsDistributed</a></noindex>.</i></p>
<p>Для любого сайта важны контент, скорость и дизайн. Без качественного контента не будет посетителей, плохая скорость их рано или поздно отпугнёт, плохой дизайн тоже не придаст особой любви даже при хорошем контенте (но это на последнем месте, так как многие посетители читают обновления только через RSS). Контент и дизайн &#8211; вещи творческие, а вот скорость технологична, её можно обеспечить за счёт применения некоторых рекомендаций и настройки софта. Самое качественное и полное руководство &#8211; это документ Yahoo &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://developer.yahoo.com/performance/rules.html" >Best Practices for Speeding Up Your Web Site</a></noindex>&#8220;. Если его выполнить, то можно добиться значительного ускорения работы своего сайта.</p>
<p>Для аудита есть плагин Firefox <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/https://addons.mozilla.org/en-US/firefox/addon/5369" >YSlow</a></noindex>, разработанный Yahoo. Он работает совместно с <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/https://addons.mozilla.org/en-US/firefox/addon/1843" >FireBug</a></noindex>. В этой части я не буду останавливаться на нём, расскажу в отдельной части.</p>
<p>Один из важных пунктов в оптимизации &#8211; это &#8220;Use a Content Delivery Network&#8221;. Все Content Delivery Network служат для быстрой и надёжной географически распределённой доставки статического контента. Вот как раз об этом и поговорим.</p>
<p><span id="more-2960"></span></p>
<p>У Amazon есть свой CDN &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/cloudfront/" >CloudFront</a></noindex>. Описание и практические принципы работы расписаны в <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AmazonCloudFront/latest/GettingStartedGuide/" >Getting Started Guide</a></noindex>, я не буду их здесь дублировать, а покажу, как практически разместить свои данные в CloudFront.</p>
<p><b>Предупреждение:</b> услуга Amazon CloudFront платная, тарифы есть на сайте Amazon.</p>
<p>Для начала активируем сервис, для чего идём на страницу <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/cloudfront/" >CloudFront</a></noindex>:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/02_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/02_cloudfront-thumb.png" height="329" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Sign Up For Amazon CloudFront. Будет запрошен логин/пароль:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/03_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/03_cloudfront-thumb.png" height="370" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Можно ознакомиться с ценами и проверить биллинговые данные, после чего нажать &#8220;Complete Sign Up&#8221;:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/04_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/04_cloudfront-thumb.png" height="372" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Сервис активирован:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/05_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/05_cloudfront-thumb.png" height="372" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Работать с CloudFront можно через <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/console/" >AWS Management Console</a></noindex>:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/06_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/06_cloudfront-thumb.png" height="346" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/07_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/07_cloudfront-thumb.png" height="404" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Но гораздо проще &#8211; через бесплатную утилиту <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://cyberduck.ch/" >Cyberduck</a></noindex>. Я собирался привычно рассказывать о работе с системой через консоль, но в процессе создания S3 Bucket с удивлением увидел, что Cyberduck прекрасно работает не только с S3, но и с CloudFront. Желающих же продолжить с консолью я направляю на <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AmazonCloudFront/latest/GettingStartedGuide/" >Getting Started Guide</a></noindex>, там всё прекрасно описано.</p>
<p>Предварительно находим и где-нибудь сохраняем AWS Access Key ID и Secret Access Key &#8211; они нам понадобятся немного позже. За ними идём на <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/" >AWS</a></noindex>, Your Account, Security Credentials:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/08_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/08_cloudfront-thumb.png" height="372" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/09_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/09_cloudfront-thumb.png" height="372" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Запускаем программу:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/11_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/11_cloudfront-thumb.png" height="399" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Создаём учётную запись S3:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/12_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/12_cloudfront-thumb.png" height="528" width="434" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Secondary click и Connect, либо просто Enter для подключения:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/13_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/13_cloudfront-thumb.png" height="157" width="356" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>В поле Username вводим AWS Access Key ID, в поле Password &#8211; Secret Access Key:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/14_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/14_cloudfront-thumb.png" height="280" width="434" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Зашли в S3:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/15_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/15_cloudfront-thumb.png" height="399" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Создаю новый каталог (bucket). Имя должно быть уникально для всей системы:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/16_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/16_cloudfront-thumb.png" height="449" width="387" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/17_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/17_cloudfront-thumb.png" height="163" width="426" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/18_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/18_cloudfront-thumb.png" height="399" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Вот информация по bucket&#8217;у (Cmd+I):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/19_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/19_cloudfront-thumb.png" height="342" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>В Cyberduck есть возможность сразу разместить данные в CloudFront. Для этого выставляем права:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/20_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/20_cloudfront-thumb.png" height="211" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Включаем CloudFront Distribution и логирование</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/21_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/21_cloudfront-thumb.png" height="259" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Заходим в каталог и перетаскиваем туда нужный файл image.jpg:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/22_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/22_cloudfront-thumb.png" height="399" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Смотрим информацию по файлу, запоминаем URL (http://d2ggdqlo6oay4b.cloudfront.net/image.jpg):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/23_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/23_cloudfront-thumb.png" height="259" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Всё, через минут 5 можно обращаться к файлу по указанному адресу.</p>
<p>Обратите внимание, что в свойствах S3 регион указан &#8220;US Standard&#8221;. Его можно поменять в настройках программы, но до создания bucket&#8217;а:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/24_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/24_cloudfront-thumb.png" height="224" width="415" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/25_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/25_cloudfront-thumb.png" height="250" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Логи по обращению к файлам в CloudFront находятся в каталоге logs в нашем Bucket&#8217;е:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/26_cloudfront-full.png"  class="image-link" rel="lightbox[2960]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/26_cloudfront-thumb.png" height="399" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Всё, данные размещены, URL получен, и его можно использовать у себя на сайте. Ждите следующую часть &#8211; я расскажу о потрясающем плагине <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://wordpress.org/extend/plugins/w3-total-cache/" >W3 Total Cache</a></noindex> для WordPress, с ним я ускорил время загрузки страницы с 220 ms до 34 ms &#8211; согласитесь, это очень хороший результат.</p>
<p>Кстати, сейчас вы можете оценить работу и этого плагина, и Amazon CloudFront &#8211; они у меня активны. Один побочный эффект &#8211; пришлось отключить плагин адаптации сайта под iPhone, но я занимаюсь восстановлением его работы.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/2960/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Настройка блога WordPress на Mac OS X. Часть 3, кеширование</title>
		<link>http://theapplegeek.ru/archives/2790</link>
		<comments>http://theapplegeek.ru/archives/2790#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:38:44 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=2790</guid>
		<description><![CDATA[Для быстрой работы блог нужно всячески кешировать. Я использую комбинацию из нескольких способов &#8211; кеширование на уровне WordPress WP Super Cache, на уровне PHP &#8211; eAccelerator, Memcached и заодно кеширование запросов MySQL. По крайней мере хуже не становится, а улучшение производительности налицо. Один из полезнейших плагинов WordPress &#8211; это WP Super Cache. Он из категории [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/01_memca-full.png"  class="image-link" rel="lightbox[2790]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/01_memca-thumb1.png" height="161" align="right" width="150" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></a></p>
<p>Для быстрой работы блог нужно всячески кешировать. Я использую комбинацию из нескольких способов &#8211; кеширование на уровне WordPress <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://wordpress.org/extend/plugins/wp-super-cache/" >WP Super Cache</a></noindex>, на уровне PHP &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://eaccelerator.net/" >eAccelerator</a></noindex>, <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://memcached.org/" >Memcached</a></noindex> и заодно кеширование запросов MySQL. По крайней мере хуже не становится, а улучшение производительности налицо.</p>
<p>Один из полезнейших плагинов WordPress &#8211; это <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://wordpress.org/extend/plugins/wp-super-cache/" >WP Super Cache</a></noindex>. Он из категории &#8220;must have&#8221;. Настройки:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/02_memca-full.png"  class="image-link" rel="lightbox[2790]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/02_memca-thumb.png" height="225" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p><span id="more-2790"></span></p>
<p>Есть некоторые проблемы с <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://wordpress.org/extend/plugins/wptouch/" >WPTouch</a></noindex>, поэтому нужно отключить кеширование для мобильных устройств:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/03_memca-full.png"  class="image-link" rel="lightbox[2790]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/03_memca-thumb.png" height="307" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Список для копирования:</p>
<pre>
bot
ia_archive
slurp
crawl
spider
iphone
ipod
android
dream
cupcake
webos
incognito
webmate
opera
mini
blackberry9530
blackberry9500
</pre>
<p>Memcached. Я его раньше не использовал, но всегда хотел. Особой эффективности для небольшой нагрузки я не заметил, но он по крайней мере работает. Процесс установки:</p>
<pre>
$ sudo port install memcached
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.memcached.plist
$ sudo port install php5-memcache
</pre>
<p>И перезапускаем apache.</p>
<p>Статус демона memcached можно посмотреть <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.mysqlperformanceblog.com/2008/11/26/a-quick-way-to-get-memcached-status/" >таким образом</a></noindex>:</p>
<pre>
$ echo stats | nc 127.0.0.1 11211
</pre>
<p>Для того, чтобы Memcached использовался в WordPress, ставим плагин <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://wordpress.org/extend/plugins/wp-memcached-manager/installation/" >WP Memcached Manager</a></noindex>. Настройки:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/04_memca-full.png"  class="image-link" rel="lightbox[2790]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/04_memca-thumb.png" height="421" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Статус работы:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/05_memca-full.png"  class="image-link" rel="lightbox[2790]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/05_memca-thumb.png" height="421" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>EAccelerator. Нужен. Однозначно. Теория &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://eaccelerator.net/" >на сайте разработчиков</a></noindex>. Процесс установки и <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://eaccelerator.net/wiki/InstallFromSource" >настройки</a></noindex>:</p>
<pre>
$ sudo port install php5-eaccelerator
$ sudo vim /opt/local/var/db/php5/eaccelerator.ini

eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter="*.php"
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
</pre>
<p>И перезагружаем apache.</p>
<p>Включаем <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://elliottback.com/wp/why-my-wordpress-site-is-so-much-faster-than-yours/" >кеширование запросов в MySQL</a></noindex>:</p>
<pre>
$ sudo vim /etc/my.cnf
query_cache_type = 1
query_cache_size = 26214400
</pre>
<p>И перезагружаем MySQL.</p>
<p>Статус работы:</p>
<pre>
$ mysql mysql
SHOW STATUS LIKE 'Qcache%';
SHOW STATUS LIKE 'Questions%';
</pre>
<p>И в завершение тестируем быстродействие сайта:</p>
<pre>
$ ab -n 1000 -c 1 http://theapplegeek.ru
</pre>
<p>Но и это ещё не всё. Продолжим оптимизацию уже на nginx, одно из направлений &#8211; выставление Expire для определённых типов файлов, а также компресирование ответов. Продолжение следует.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/2790/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Настройка блога WordPress на Mac OS X. Часть 2, Apache</title>
		<link>http://theapplegeek.ru/archives/2735</link>
		<comments>http://theapplegeek.ru/archives/2735#comments</comments>
		<pubDate>Tue, 12 Jan 2010 11:25:37 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=2735</guid>
		<description><![CDATA[Для простоты следующим шагом в качестве web-сервера я запущу apache. Его большое преимущество в том, что php очень просто ставится, как модуль, и не требуется дополнительных ухищрений. Поэтому я запущу сайт именно под apache, а уже после этого переделаю всё под nginx, который мне нравится больше. В Mac OS X есть штатный apache, его можно [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/01/01_ap-thumb1.png" height="152" align="right" width="160" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Для простоты следующим шагом в качестве web-сервера я запущу <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://httpd.apache.org/" >apache</a></noindex>. Его большое преимущество в том, что php очень просто ставится, как модуль, и не требуется дополнительных ухищрений. Поэтому я запущу сайт именно под apache, а уже после этого переделаю всё под <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://ru.wikipedia.org/wiki/Nginx" >nginx</a></noindex>, который мне нравится больше.</p>
<p>В Mac OS X есть штатный apache, его можно запустить в System Preferences/Sharing/Web Sharing:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/02_ap-full.png"  class="image-link" rel="lightbox[2735]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/02_ap-thumb.png" height="419" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Это полноценный Apache/2.2.13, но для наших целей он не подходит &#8211; PHP в портах требует установленного apache, причём из портов. Ухищряться можно было бы, но особого желания у меня делать это не было. Поэтому я спокойно смиряюсь с мыслью, что в системе будет стоять Apache родной и Apache из портов.</p>
<p><span id="more-2735"></span></p>
<p>Установка Apache2 проста:</p>
<pre>
$ sudo port install apache2
</pre>
<p>Запуск (пока его запускать не нужно):</p>
<pre>
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
</pre>
<p>Остановка:</p>
<pre>
$ sudo launchctl unload -w /Library/LaunchDaemons/org.macports.apache2.plist
</pre>
<p>Я привык управлять apache через apachectl, и не собираюсь изменять своим привычкам. Но apachectl от штатного Apache находится в /usr/sbin/apachectl:</p>
<pre>
$ which apachectl
/usr/sbin/apachectl
</pre>
<p>Apachectl же свежеустановленного порта лежит в /opt/local/apache22/bin/apachectl, для простоты делаем симлинк в каталог, находящийся первее в путях, чем /usr/sbin:</p>
<pre>
$ sudo ln -s /opt/local/apache22/bin/apachectl /opt/local/bin/
</pre>
<p>Теперь очередь за PHP, ставим полный набор, который нужен для WordPress (некоторые модули не нужны, но я их использую все). В процессе установки читаем сообщения:</p>
<pre>
$ sudo port install php5-web
<small>To customize php, copy
/opt/local/etc/php5/php.ini-development (if this is a development server) or
/opt/local/etc/php5/php.ini-production (if this is a production server) to
/opt/local/etc/php5/php.ini and then make changes.</small>
</pre>
<pre>
$ sudo port install php5-mysql
<small>To use mysqlnd with a local MySQL server, edit /opt/local/etc/php5/php.ini and set
mysql.default_socket, mysqli.default_socket and pdo_mysql.default_socket
to /opt/local/var/run/mysql5/mysqld.sock</small>
</pre>
<p>Дальше полезных сообщений не будет:</p>
<pre>
$ sudo port install php5-mbstring
$ sudo port install php5-mcrypt
$ sudo port install php5-zip
$ sudo port install php5-gd
$ sudo port install php5-eaccelerator
$ sudo port install php5-openssl
$ sudo port install php5-sockets
$ sudo port install libssh2
</pre>
<p>Для eaccelerator создаю нужный каталог:</p>
<pre>
$ sudo mkdir /tmp/eaccelerator/
$ sudo chown www:www /tmp/eaccelerator/
</pre>
<p>Беру php.ini-production и делаю в нём базовые правки (тюнинг PHP-тема отдельная)</p>
<pre>
$ sudo cp /opt/local/etc/php5/php.ini-production \
	/opt/local/etc/php5/php.ini
$ sudo vim /opt/local/etc/php5/php.ini
date.timezone = Europe/Kiev
error_log = /var/log/php_errors.log
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
</pre>
<p>Не забываю создать файл для логов, иначе они могут не писаться</p>
<pre>
$ sudo touch /var/log/php_errors.log
$ sudo chown www:www /var/log/php_errors.log
</pre>
<p>Для интересующихся модули PHP поставились в каталог:</p>
<pre>
$ ls -al /opt/local/lib/php/extensions/no-debug-non-zts-20090626/
<small>-rwxr-xr-x   2 root  admin    71880 Jan  9 22:29 eaccelerator.so
-rwxr-xr-x   2 root  admin   338560 Jan  9 22:32 gd.so
-rwxr-xr-x   2 root  admin  2031040 Jan  9 22:27 mbstring.so
-rwxr-xr-x   2 root  admin    38384 Jan  9 22:29 mcrypt.so
-rwxr-xr-x   2 root  admin    46648 Jan  9 22:26 mysql.so
-rwxr-xr-x   2 root  admin   111672 Jan  9 22:26 mysqli.so
-rwxr-xr-x   2 root  admin   117480 Jan 10 21:41 openssl.so
-rwxr-xr-x   2 root  admin    30496 Jan  9 22:26 pdo_mysql.so
-rwxr-xr-x   2 root  admin    45016 Jan 10 21:47 sockets.so
-rwxr-xr-x   2 root  admin    81680 Jan  9 22:29 zip.so</small>
</pre>
<p>Теперь приступаем к конфигурированию Apache. Я отключаю ненужные мне модули, убираю все комментарии и вычищаю мусор. Рассказывать об этом не буду подробно, могу сказать, что и в &#8220;дефолтовом&#8221; состоянии Apache работает хорошо, главное сделать несколько коррекций, которые я приведу ниже:</p>
<pre>
$ sudo vim /opt/local/apache2/conf/httpd.conf
</pre>
<p>В конце секции загрузки модулей добавляем:</p>
<pre>
LoadModule php5_module modules/libphp5.so
</pre>
<p>Меняем строку</p>
<pre>
DirectoryIndex index.html
</pre>
<p>на</p>
<pre>
DirectoryIndex index.html index.php
</pre>
<p>Раскомментариваем включаемые файлы</p>
<pre>
Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-vhosts.conf
Include conf/extra/httpd-default.conf
</pre>
<p>Добавляем конфиг для php (файл установился, я удивился, почему сам модуль не активировался в LoadModule):</p>
<pre>
Include conf/extra/mod_php.conf
</pre>
<p>httpd-mpm.conf можем не править, там всё в порядке.</p>
<p>В httpd-default.conf нужно подправить параметры, которые я выделил жирным. Если на сервер будет большое количество коннектов, и, например, база данных будет не справляться, то стоит выключить KeepAlive и размышлять о кешировании.</p>
<pre>
$ sudo vim /opt/local/apache2/conf/extra/httpd-default.conf
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
AccessFileName .htaccess
<b>ServerTokens Prod</b>
<b>ServerSignature Off</b>
HostnameLookups Off
</pre>
<p>В httpd-vhosts.conf описываются виртуальные хосты. Я это делаю так:</p>
<pre>
$ sudo vim /opt/local/apache2/conf/extra/httpd-vhosts.conf
<small>NameVirtualHost *:80
&lt;VirtualHost *:80&gt;
    ServerAdmin webmaster@theapplegeek.ru
    ServerName theapplegeek.ru
    ErrorLog "logs/theapplegeek.ru-error_log"
    CustomLog "logs/theapplegeek.ru-access_log" common
    DocumentRoot "/Users/ctrld/Sites/theapplegeek/public_html"
    &lt;Directory "/Users/ctrld/Sites/theapplegeek/public_html"&gt;
        Options FollowSymLinks -Indexes
        AllowOverride All
        Order allow,deny
        Allow from all
     &lt;/Directory&gt;

    &lt;Location "/wp-content/uploads"&gt;
        php_admin_flag engine off
        AddType text/plain .html .htm .shtml
    &lt;/Location&gt;
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
    ServerName          www.theapplegeek.ru
    RedirectPermanent   /   "http://theapplegeek.ru/"
&lt;/VirtualHost&gt;</small>
</pre>
<p>Обратите внимание на запрет php для /wp-content/uploads. Также вы видите, что основное имя хоста у меня без www &#8211; этот рудимент меня удивлял ещё лет семь назад. Но так как есть некоторые посетители, пытающиеся вводить www, то переучивать их можно только с помощью Permanent Redirect на основной домен.</p>
<p>Всё, Apache сконфигурирован. Конечно же, путь /Users/ctrld/Sites/theapplegeek/public_html должен существовать. Делаем тестовый файл для проверки php:</p>
<pre>
$ vim /Users/ctrld/Sites/theapplegeek/public_html/info.php
&lt;?php
    phpinfo();
?&gt;
</pre>
<p>Проверим конфигурацию apache:</p>
<pre>
$ sudo /opt/local/apache2/bin/apachectl configtest
Syntax OK
</pre>
<p>Если всё в порядке, то запускаем его (в первый раз &#8211; через launchctl load -w, чтобы он смог стартовать после перезапуска системы):</p>
<pre>
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
</pre>
<p>А в дальнейшем можем использовать apachectl:</p>
<pre>
$ sudo apachectl start
$ sudo apachectl stop
$ sudo apachectl restart
$ sudo apachectl graceful
</pre>
<p>Последняя команда (graceful) позволяет рестартовать apache без обрыва соединений, что вежливо по отношению к посетителям.</p>
<p>Можно убедиться, что apache запущен:</p>
<pre>
$ ps ax | grep htt
<small>37877   ??  Ss     0:00.10 /opt/local/apache2/bin/httpd -k start
37878   ??  S      0:00.00 /opt/local/apache2/bin/httpd -k start
37879   ??  S      0:00.00 /opt/local/apache2/bin/httpd -k start
37880   ??  S      0:00.00 /opt/local/apache2/bin/httpd -k start
37881   ??  S      0:00.00 /opt/local/apache2/bin/httpd -k start
37882   ??  S      0:00.00 /opt/local/apache2/bin/httpd -k start</small>
</pre>
<p>Теперь небольшой &#8220;хинт&#8221;. Я описал виртуальный хост реального сайта theapplegeek.ru. Но я ещё ничего не переносил и контента там нет. Для того, чтобы оттестировать сайт и исправить ошибки, я направляю запросы на новое место, модифицируя /etc/hosts на том компьютере, с которого я тестирую сайт, но другие посетители будут ходить до переключения в DNS на старое место.</p>
<pre>
$ sudo vim /etc/hosts
94.45.55.146	theapplegeek.ru
94.45.55.146	www.theapplegeek.ru
</pre>
<p>Всё, подготовительные работы сделаны, можно проверять. Открываю в браузере URL http://theapplegeek.ru/info.php с тестовым скриптом PHP. Всё работает. Благодать. Если же есть какие-то проблемы, то нужно смотреть логи:</p>
<pre>
$ tail -f /opt/local/apache2/logs/theapplegeek.ru-error_log
$ tail -f /opt/local/apache2/logs/theapplegeek.ru-access_log
$ tail -f /opt/local/apache2/logs/error_log
$ tail -f /var/log/php_errors.log
</pre>
<p>Установка WordPress не отличается от установки на любом Unix, его можно поставить по отличной инструкции <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://codex.wordpress.org/Установка_WordPress" >на русском языке</a></noindex>. Но если нужно, то напишите в комментариях, и я в отдельной части рассмотрю этот процесс.</p>
<p>Домашняя сеть у меня подключена через TimeCapsule, и проброс обращений извне к web-серверу, находящемся на адресе 192.168.98.2, я сделал через Port Mapping:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/03_ap-full.png"  class="image-link" rel="lightbox[2735]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/03_ap-thumb.png" height="371" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/04_ap-full.png"  class="image-link" rel="lightbox[2735]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/04_ap-thumb.png" height="362" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Внешний адрес я обычно смотрю через сервис <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://whatismyip.com/" >WhatIsMyIP</a></noindex> (94.45.55.146). Как только я перенёс сайт и проверил его работу, я зашёл в панель управления моими DNS-зонами и переключил записи со старого места на новое:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/05_ap-full.png"  class="image-link" rel="lightbox[2735]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/05_ap-thumb.png" height="183" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>И затем начал следить за логами и корректировать проблемы, которые я пропустил. На помощь приходит в том числе такая конструкция, позволяющая искать 404/etc:</p>
<pre>
$ tail -1000 /opt/local/apache2/logs/theapplegeek.ru-access_log \
	| awk '$9 != 200 &#038;&#038; $9 != 304 {print $9, $7}' | sort | uniq -c
</pre>
<p>Вуаля.</p>
<p>Через несколько часов убираем из /etc/hosts добавленные ранее записи.</p>
<p>Следующим шагом я сконфигурирую nginx с использованием fastcgi для обработки PHP. Ещё (это больше памятка самому себе) нужно будет включить ежедневную ротацию логов. И сделать тюнинг PHP и сетевых параметров Mac OS X.</p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/2735/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Настройка блога WordPress на Mac OS X. Часть 1, MySQL</title>
		<link>http://theapplegeek.ru/archives/2714</link>
		<comments>http://theapplegeek.ru/archives/2714#comments</comments>
		<pubDate>Mon, 11 Jan 2010 07:04:52 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=2714</guid>
		<description><![CDATA[Недавно я подключился к провайдеру Интернет по Ethernet, да ещё с постоянным IP-адресом. Сервер, на котором у меня расположен сайт, периодически ведёт себя очень странно, я думаю, что вы могли это заметить. Иногда сервер перестаёт отвечать, я подозреваю вываливание в Kernel Panic (на сервере стоит FreeBSD 6.3). Подозреваю аппаратную проблему, но заменить сервер я пока [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theapplegeek.ru/wp-content/uploads/2010/01/01_my-thumb1.png" height="84" align="right" width="160" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></p>
<p>Недавно я подключился к провайдеру Интернет по Ethernet, да ещё с постоянным IP-адресом. Сервер, на котором у меня расположен сайт, периодически ведёт себя очень странно, я думаю, что вы могли это заметить. Иногда сервер перестаёт отвечать, я подозреваю вываливание в Kernel Panic (на сервере стоит FreeBSD 6.3). Подозреваю аппаратную проблему, но заменить сервер я пока не могу, а обновить систему до 8.0, или установить Linux можно, но непросто, так как я использую для сайтов <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://ru.wikipedia.org/wiki/FreeBSD_Jail" >jail&#8217;ы</a></noindex>. В итоге я решил временно перенести сайты на MacBook, который у меня используется в виде сервера.</p>
<p>Подъём сервера для хостинга WordPress состоит из нескольких этапов, и я рассмотрю их в серии статей. В этой части я опишу установку MySQL, затем &#8211; настройку web-сервера на базе nginx с использованием PHP в виде Fastcgi (можно было бы использовать и Apache, но мне нужен легковесный и быстрый web-сервер, хорошо работающий под большой нагрузкой). Итак, приступим.</p>
<p>Поставить MySQL под Mac OS X можно несколькими методами. Самый неинтересный для меня &#8211; это <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.mamp.info/en/index.html" >MAMP</a></noindex> (готовое решение, включающее MySQL, Apache, PHP с полным набором модулей). Объяснять почему мне это не нравится не буду, и так понятно.</p>
<p><span id="more-2714"></span></p>
<p>Второй &#8211; из бинарного пакета <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dev.mysql.com/downloads/" >с сайта MySQL</a></noindex> (выбираем версию MySQL 5.1—Generally Available (GA) release for production use). Вот <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg" >более короткий линк</a></noindex> к нужному пакету, я ставлю из package format, Mac OS X 10.5 (x86_64), весь процесс описан <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dev.mysql.com/doc/refman/5.1/en/mysql-installation-macosx-pkg.html" >в документации</a></noindex>. Во многих случаях этот способ предпочтительный, так как MySQL здесь собран гарантированно нормально. Но есть некоторая сложность в обновлении &#8211; я предполагаю, что автообновлений нет, и придётся устанавливать новые версии вручную.</p>
<p>Третий метод, привычный для большинства системных администраторов Unix &#8211; это использование пакетного менеджера <a href="http://theapplegeek.ru/archives/1011" >MacPorts</a>, мне он нравится из-за предсказуемости обновлений, да и в любом случае мне понадобятся порты для дальнейших шагов по запуску сайта.</p>
<p>Есть, конечно же, и четвёртый метод, заключающийся в компиляции MySQL из исходных текстов с накладыванием различных патчей, оптимизирующих работу MySQL, но я не любитель стиля Gentoo, и мне важнее предсказуемость работы системы и простота обновлений, чем выигрыш производительности на 15%.</p>
<p>Сначала нужно поставить <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://developer.apple.com/technology/xcode.html" >XCode</a></noindex>, в котором находятся средства разработки под Unix, необходимые для компиляции MySQL и других пакетов. Это просто, объяснять не буду.</p>
<p>Потом &#8211; <a href="http://theapplegeek.ru/archives/1011" >MacPorts</a>. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://distfiles.macports.org/MacPorts/" >Списывается пакет последней версии</a></noindex> под нужную версию Mac OS X, в моём случае MacPorts-1.8.2-10.6-SnowLeopard.dmg, и устанавливается. Сразу же обновим дерево портов:</p>
<pre>
$ . ~/.profile
$ sudo port selfupdate
</pre>
<p>Ставим MySQL Server (на MacBook 2.2 GHz пакет поставился за 22 минуты):</p>
<pre>
$ sudo port install mysql5-server
</pre>
<p>При установке выдалось сообщение о том, как установить файлы базы данных и как запустить mysql. Выполняем:</p>
<pre>
$ sudo -u _mysql mysql_install_db5
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
</pre>
<p>Проверим, что MySQL запустился:</p>
<pre>
$ ps ax | grep mysql | grep -v grep
<small> 2050   ??  Ss     0:00.00 /opt/local/bin/daemondo --label=mysql5 --start-cmd /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper restart ; --pid=none
 2060   ??  S      0:00.02 /bin/sh /opt/local/lib/mysql5/bin/mysqld_safe --datadir=/opt/local/var/db/mysql5 --pid-file=/opt/local/var/db/mysql5/ceiling-cat.local.pid
 2110   ??  S      0:00.07 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql5 --user=_mysql --log-error=/opt/local/var/db/mysql5/ceiling-cat.local.err --pid-file=/opt/local/var/db/mysql5/ceiling-cat.local.pid</small>
</pre>
<p>Я привык к именам программ вида mysqladmin и mysql, а в каталоге /opt/local/bin описаны симлинки вида mysqladmin5/mysql5. Можно сделать нужные симлинки, но я сделаю универсальнее, прописав путь к нужным утилитам без суффикса &#8220;5&#8243;. Путь после модификации должен быть таков:</p>
<pre>
$ vim ~/.profile
<small>export PATH=/opt/local/lib/mysql5/bin:/opt/local/bin:/opt/local/sbin:$PATH</small>
</pre>
<p>Перечитываем путь с помощью &#8220;source&#8221;:</p>
<pre>
$ . ~/.profile
$ echo $PATH
<small>/opt/local/lib/mysql5/bin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin</small>
</pre>
<p>Теперь можем привычно запускать утилиты MySQL</p>
<pre>
$ which mysql
<small>/opt/local/lib/mysql5/bin/mysql</small>
</pre>
<p>Проверить, запустился ли MySQL, можно и так:</p>
<pre>
$ mysql
<small>Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.42 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&gt;</small>
</pre>
<p>Сразу же устанавливаем пароль root (этот пароль я сразу же после написания статьи изменю):</p>
<pre>
$ mysqladmin -u root password 'fc97a2060ec0775ed3b6aa011ee27e88'
</pre>
<p>Для того, чтобы не вводить пароль каждый раз, прописываем его в конфиг-файле:</p>
<pre>
$ touch ~/.my.cnf
$ chmod 600 ~/.my.cnf
$ vim ~/.my.cnf
[mysql]
user    =   root
pass    =   fc97a2060ec0775ed3b6aa011ee27e88
</pre>
<p>Обязательно нужно или поменять пароль для доступа через сеть, или удалить записи для хостов &#8220;hostname.local&#8221; и 127.0.0.1. Когда мне понадобится, я создам нужных пользователей, поэтому буду удалять.</p>
<pre>
$ mysql mysql
mysql> select Host, User, Password from user where user = 'root';
<small>+-------------------+------+-------------------------------------------+
| Host              | User | Password                                  |
+-------------------+------+-------------------------------------------+
| localhost         | root | *769F25A82BD5CC256FA4D47499CE6026D89D72E6 |
| ceiling-cat.local | root |                                           |
| 127.0.0.1         | root |                                           |
+-------------------+------+-------------------------------------------+</small>
mysql> delete from user where User = "root" and Host = "127.0.0.1";
Query OK, 1 row affected (0.00 sec)

mysql> delete from user where User = "root" and Host = "ceiling-cat.local";
Query OK, 1 row affected (0.00 sec)

mysql> select Host, User, Password from user where user = 'root';
<small>+-----------+------+-------------------------------------------+
| Host      | User | Password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *769F25A82BD5CC256FA4D47499CE6026D89D72E6 |
+-----------+------+-------------------------------------------+</small>
</pre>
<p>Можно было бы на этом и закончить, но лучше донастроить MySQL через конфиг-файл /etc/my.cnf. По крайней мере нужно выставить использование по умолчанию UTF8, включить INNODB, ограничить количество коннектов, и включить slow_query_log.</p>
<p>Примеры конфиг-файлов поставляются вместе с MySQL:</p>
<pre>
$ ls -al /opt/local/share/mysql5/mysql/my*cnf
<small>-rw-r--r--  2 root  admin   4851 Jan  7 22:26 /opt/local/share/mysql5/mysql/my-huge.cnf
-rw-r--r--  2 root  admin  20232 Jan  7 22:26 /opt/local/share/mysql5/mysql/my-innodb-heavy-4G.cnf
-rw-r--r--  2 root  admin   4825 Jan  7 22:26 /opt/local/share/mysql5/mysql/my-large.cnf
-rw-r--r--  2 root  admin   4836 Jan  7 22:26 /opt/local/share/mysql5/mysql/my-medium.cnf
-rw-r--r--  2 root  admin   2474 Jan  7 22:26 /opt/local/share/mysql5/mysql/my-small.cnf</small>
</pre>
<p>Меня устраивает конфигурация medium:</p>
<pre>
$ head -5 /opt/local/share/mysql5/mysql/my-medium.cnf
<small># Example MySQL config file for medium systems.
#
# This is for a system with little memory (32M - 64M) where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)</small>
</pre>
<p>Копирую её в /etc/my.cnf:</p>
<pre>
$ sudo cp /opt/local/share/mysql5/mysql/my-medium.cnf /etc/my.cnf
</pre>
<p>Корректирую конфиг (если интересно, то одна из первых версий доступна <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dl.dropbox.com/u/243759/Site/20100109/my.cnf" >для списывания</a></noindex>):</p>
<ul>
<li>Отключаю возможность доступа по сети: skip-networking</li>
<li>Выставляю везде default-character-set=utf8</li>
<li>Для mysqld включаю character-set-server = utf8 и default-character-set = utf8</li>
<li>Ограничиваю количество сессий max_connections=50</li>
<li>thread_cache_size = 16</li>
<li>query_cache_size  = 32M</li>
<li>Включаю секцию innodb</li>
<li>Выставляю логгирование (slow_query_log = 1, slow_query_log_file = /var/log/mysql-slow.log, log-error =  /var/log/mysql.log)</li>
</ul>
<p>Создаю нужные файлы логов, иначе они не воспримутся:</p>
<pre>
$ sudo touch /var/log/mysql-slow.log
$ sudo chown _mysql:_mysql /var/log/mysql-slow.log
$ sudo touch /var/log/mysql.log
$ sudo chown _mysql:_mysql /var/log/mysql.log
</pre>
<p>Перезагружаем сервер MySQL (-w отключает disable, т.е. MySQL загрузится при рестарте системы)</p>
<pre>
$ sudo launchctl unload -w /Library/LaunchDaemons/org.macports.mysql5.plist
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
</pre>
<p>Нужно посмотреть лог на предмет ошибок или проблем:</p>
<pre>
$ tail -100 /var/log/mysql.log
</pre>
<p>Очень важно сделать базовый аудит конфигурации MySQL, для этого я использую два скрипта. Первый &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://blog.mysqltuner.com/" >mysqltuner.pl</a></noindex>:</p>
<pre>
$ curl http://mysqltuner.com/mysqltuner.pl -o mysqltuner.pl
$ chmod +x mysqltuner.pl
$ ./mysqltuner.pl
</pre>
<p>Второй &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/https://launchpad.net/mysql-tuning-primer" >mysql-tuning-primer</a></noindex>:</p>
<pre>
$ curl http://launchpadlibrarian.net/36004840/tuning-primer.sh -o tuning-primer.sh
$ chmod +x tuning-primer.sh
$ ./tuning-primer.sh
</pre>
<p>Особых проблем скрипты не выявили. Если бы нашли, то нужно было бы подправить /etc/my.cnf и перезапустить MySQL.</p>
<p>Настройка закончена, осталось перезапустить Mac OS X для проверки, подымется ли MySQL после рестарта. У меня он поднялся.</p>
<p>Если вы хотите углубить свои знания по MySQL, то рекомендую ознакомиться с сайтом <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.mysqlperformanceblog.com/" >MySQL Performance Blog</a></noindex> (этот сайт ведут специалисты широкоизвестной в узких кругах фирмы Percona).</p>
<h2>Использование GUI для работы с базой данных</h2>
<p>Я не разработчик, и мне хватает командно-строковой утилиты mysql. Но если вам нужен GUI, то можно будет или поставить <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.phpmyadmin.net/home_page/index.php" >phpMyAdmin</a></noindex> (он будет доступен через web), или же утилиту под Mac OS X <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.sequelpro.com/" >Sequel Pro</a></noindex> (она бесплатная, приветствуются пожертвования).</p>
<p>Sequel Pro мне нравится тем, что он позволяет соединяться через туннель SSH, и на хосте с MySQL достаточно открыть сетевой доступ через 127.0.0.1. Для того, чтобы это сделать, нужно в /etc/my.cnf закомментировать опцию &#8220;skip-networking&#8221; (конечно же, после этого нужно перезагрузить MySQL) и открыть доступ пользователю (например, root):</p>
<pre>
$ mysql mysql
<small>mysql> GRANT ALL ON *.* TO root@127.0.0.1 IDENTIFIED BY 'fc97a2060ec0775ed3b6aa011ee27e88';
mysql> FLUSH PRIVILEGES;</small>
</pre>
<p>Настройка туннелирования:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/02_my-full.png"  class="image-link" rel="lightbox[2714]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/02_my-thumb.png" height="478" width="410" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Интерфейс программы:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2010/01/03_my-full.png"  class="image-link" rel="lightbox[2714]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2010/01/03_my-thumb.png" height="370" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<h2>Проверка производительности MySQL</h2>
<p>Для того, чтобы знать, какую нагрузку выдержит MySQL, можно применить бенчмаркинг <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dev.mysql.com/doc/refman/5.1/en/mysql-benchmarks.html" >sql-bench</a></noindex> (это необязательно, раздел можно пропустить). К сожалению, в портах его я не нашёл, поэтому сделаю не совсем правильно, но действенно &#8211; поставлю бинарный package с сайта MySQL (это второй описанный метод), но не буду запускать сам MySQL.</p>
<p>Списываю <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg" >package</a></noindex> Mac OS X 10.5 (x86_64) и устанавливаю его (только mysql-&#8230;..pkg, ни в коем случае не prefpane и не StartupItems). Система поставилась в /usr/local/mysql (это симлинк на каталог с установленной версией типа mysql-5.1.42-osx10.5-x86_64).</p>
<p>SQL-Bench использует Perl, для соединения с MySQL нужен DBD::mysql, поставим его (в ответ на предложение сконфигурировать CPAN нажимаем Enter или пишем &#8220;yes&#8221;):</p>
<pre>
$ sudo perl -MCPAN -eshell
<small>Would you like me to configure as much as possible automatically? [yes] <b>yes</b></small>
cpan[1]&gt; install DBD::mysql
<small>...
 CAPTTOFU/DBD-mysql-4.013.tar.gz
 /usr/bin/make install  -- OK</small>
cpan[2]&gt; quit
</pre>
<p>Запускаем бенчмаркинг. Сразу предупреждаю, что процесс длительный, у меня он занял 16 минут:</p>
<pre>
$ cd /usr/local/mysql/sql-bench/
$ <small>sudo ./run-all-tests --server=mysql --user=root -pass=fc97a2060ec0775ed3b6aa011ee27e88 --log</small>
</pre>
<p>Смотрим на результат, размышляем.</p>
<p>На этом заканчиваем, в следующей части приступим к настройке web-сервера.</p>
<h2>Замена паролей</h2>
<p>При необходимости меняем пароль (как я и обещал, я это сделал &#8211; лучше три лишние команды, чем потеря данных):</p>
<pre>
$ mysql mysql
mysql&gt; GRANT ALL ON *.* TO root@127.0.0.1 IDENTIFIED BY 'verysecretpassword';
mysql&gt; GRANT ALL ON *.* TO root@localhost IDENTIFIED BY 'verysecretpassword';
mysql&gt; FLUSH PRIVILEGES;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/2714/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Amazon Web Services. Часть 2. Запуск сервера</title>
		<link>http://theapplegeek.ru/archives/1825</link>
		<comments>http://theapplegeek.ru/archives/1825#comments</comments>
		<pubDate>Fri, 13 Nov 2009 15:43:17 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=1825</guid>
		<description><![CDATA[В первой части статьи я описал создание учётной записи на Amazon Web Services. Сейчас же приступим к реальной работе. Весь процесс работы отлично описан в официальном документе &#8220;Amazon Elastic Compute Cloud. Getting Started Guide&#8220;, очень рекомендую с ним ознакомиться. Создавал в последний раз сервера три дня назад. Сегодня же, уставившись на консоль, почувствовал себя как [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/00_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/00_aws2-thumb.png" height="83" align="right" width="190" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></a></p>
<p>В первой части статьи я описал создание учётной записи на Amazon Web Services. Сейчас же приступим к реальной работе. Весь процесс работы отлично описан в официальном документе<br />
&#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/" >Amazon Elastic Compute Cloud. Getting Started Guide</a></noindex>&#8220;, очень рекомендую с ним ознакомиться.</p>
<p>Создавал в последний раз сервера три дня назад. Сегодня же, уставившись на консоль, почувствовал себя как себя как герой рассказа &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://ru.wikipedia.org/wiki/Цветы_для_Элджернона" >Цветы для Элджернона</a></noindex>&#8220;&#8230; Ладно, прорвёмся.</p>
<h2>Создание сертификата X.509</h2>
<p>Заходим на &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/" >Amazon Web Services</a></noindex>&#8220;, &#8220;Your Account&#8221;, &#8220;Security Credentials&#8221;.</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/01_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/01_aws2-thumb.png" height="315" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p><span id="more-1825"></span></p>
<p>Если вы зашли сюда через некоторое время после последнего входа, то система попросит аутентифицироваться:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/02_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/02_aws2-thumb.png" height="315" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Переходим на X.509 и создаём сертификат:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/03_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/03_aws2-thumb.png" height="315" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Сохраняем файлы с приватным и публичным ключами в надёжное место (это Downloads ;-):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/04_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/04_aws2-thumb.png" height="558" width="467" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/05_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/05_aws2-thumb.png" height="223" width="456" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Созданный сертификат уже есть в системе:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/06_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/06_aws2-thumb.png" height="279" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Из надёжного места нужно скопировать сертификат в каталог ~/.ec2 &#8211; этот каталог используется утилитами AWS EC2.</p>
<pre>
$ cd ~
$ mkdir .ec2
$ mv ~/Downloads/{cert*pem,pk*pem} ~/.ec2
$ chmod 700 .ec2
$ chmod 600 .ec2/*pem
$ ls -al ~/.ec2
<small>drwx------   4 ctrld  staff   136 Nov 13 15:24 .
drwxr-xr-x+ 43 ctrld  staff  1462 Nov 13 15:24 ..
-rw-------@  1 ctrld  staff   916 Nov 13 15:18 cert-R3A4BRDL7YPWEYAQKUF2GK2HWYPBIWDM.pem
-rw-------@  1 ctrld  staff   922 Nov 13 15:18 pk-R3A4BRDL7YPWEYAQKUF2GK2HWYPBIWDM.pem</small>
</pre>
<h2>Установка утилит для работы EC2</h2>
<p>В <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/setting-up-your-tools.html" >руководстве пользователя</a></noindex> можно найти, где находятся утилиты для EC2. Если лень смотреть, то они доступны по адресу &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&#038;categoryID=88" >Amazon EC2 API Tools</a></noindex>&#8220;:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/07_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/07_aws2-thumb.png" height="317" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Архив ec2-api-tools.zip я распаковал в Documents/AWS, и сделал симлинк на случай обновления:</p>
<pre>
$ cd ~/Documents/AWS/
$ ln -s ec2-api-tools-1.3-42584 ec2-api-tools
</pre>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/08_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/08_aws2-thumb.png" height="239" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<h2>Настройка окружения в shell</h2>
<p>Для работы с EC2 нужно настроить <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/setting-up-your-tools.html" >переменные окружения</a></noindex>. Вот фрагмент моего ~/.profile (спасибо <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://twitter.com/andy_shev" >@andy_shev</a></noindex> за конструкцию &#8216;$(/usr/libexec/java_home)&#8217;, я обычно пользовался &#8216;`command`&#8217;, но так гораздо удобнее):</p>
<pre>
export JAVA_HOME=$(/usr/libexec/java_home)
export EC2_HOME=<b>/Users/ctrld/Documents/AWS/ec2-api-tools</b>
export PATH=$PATH:$EC2_HOME/bin

export EC2_PRIVATE_KEY=~/.ec2/<b>pk-R3A4BRDL7YPWEYAQKUF2GK2HWYPBIWDM.pem</b>
export EC2_CERT=~/.ec2/<b>cert-R3A4BRDL7YPWEYAQKUF2GK2HWYPBIWDM.pem</b>

export EC2_URL=https://eu-west-1.ec2.amazonaws.com
</pre>
<p>Для того, чтобы переменные окружения установились, можно или создать новую сессию в Terminal.app, а старую закрыть, или же воспользоваться &#8220;source&#8221;:</p>
<pre>
$ . ~/.profile
</pre>
<p>Обратите внимание на последнюю строку в фрагменте .profile. Я использую регион EU-WEST (второй вариант ориентирован на USA &#8211; US-EAST, меня он не интересует). Получить список доступных регионов можно так:</p>
<pre>
$ ec2-describe-regions
REGION	eu-west-1	eu-west-1.ec2.amazonaws.com
REGION	us-east-1	us-east-1.ec2.amazonaws.com
</pre>
<p>Конечно же, в переменных $EC2_PRIVATE_KEY и $EC2_CERT нужно указать ваши сертификаты X.509 &#8211; мои вам не пригодятся, и путь тоже стоит поменять на ваш (то, что нужно поменять, выделено жирным).</p>
<h2>Создание ключа для доступа по SSH</h2>
<p>Процесс можно посмотреть в &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/running-an-instance.html" >User guide</a></noindex>&#8220;.</p>
<p>Создаём ключи для доступа по SSH. Это можно сделать в браузере через <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/https://console.aws.amazon.com/ec2/home" >AWS Management Console</a></noindex>, я же предпочитаю консоль. Лучше при работе с EC2 перейти сразу в каталог ~/.ec2 &#8211; это упрощает некоторые операции.</p>
<pre>
$ ec2-add-keypair gsg-keypair
KEYPAIR	gsg-keypair	7d:b5:85:0c:7d:5d:fd:bf:b4:8c:3e:d6:b5:bd:7f:08:71:d2:c1:9d
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEArTGhs3XCfhkxpfos8Wd8F3HXCGd/aVK5boOafptNVcTeP6afDyY7V9CoExK4
...
cnidqNgk7bFPkKGR6mMB9l8AZelzMJljLCKBiDstj3uEW9C0t13nAo0mdgMZsJSF75ja
-----END RSA PRIVATE KEY-----
</pre>
<p>Записываем ключ (включая строки &#8220;&#8212;-BEGIN&#8230;&#8221; и &#8220;&#8212;&#8211;END&#8230;&#8221;) в файл ~/.ec2/id_rsa-gsg-keypair:</p>
<pre>
$ cd ~/.ec2
$ cat id_rsa-gsg-keypair
<small>-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEArTGhs3XCfhkxpfos8Wd8F3HXCGd/aVK5boOafptNVcTeP6afDyY7V9CoExK4
...
cnidqNgk7bFPkKGR6mMB9l8AZelzMJljLCKBiDstj3uEW9C0t13nAo0mdgMZsJSF75ja
-----END RSA PRIVATE KEY-----</small>
$ chmod 600 id_rsa-gsg-keypair
</pre>
<h2>Разрешение сетевого доступа</h2>
<p>Политика безопасности &#8220;default&#8221; запрещает какой-либо доступ к Instance. Для того, чтобы получить доступ к сервисам на сервере, нужно открыть по крайней мере http (для всех) и ssh (для хоста, с которого будет производиться доступ). К сожалению, у меня динамический адрес, и я для во время написания статьи открою ssh для всех адресов (а потом закрою).</p>
<pre>
$ ec2-authorize default -p 80
<small>GROUP		default
PERMISSION		default	ALLOWS	tcp	80	80	FROM	CIDR	0.0.0.0/0</small>

$ ec2-authorize default -p 22
<small>GROUP		default
PERMISSION		default	ALLOWS	tcp	22	22	FROM	CIDR	0.0.0.0/0</small>
</pre>
<h2>Запуск Instance</h2>
<p>Я буду работать с Ubuntu 9.04 Server 32 bit. 32 bit &#8211; ограничение Small Instance, так бы я использовал 64 bit. 9.04 по причине LTS (<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/https://wiki.ubuntu.com/LTS" >Long Term Support</a></noindex>). Ну а Ubuntu &#8211; из-за того, что xfs работает нормально под EC2.</p>
<p>Образы серверов в терминах Amazon &#8211; это AMI (Amazon Machine Images). На основании AMI запускается Instance. Грубо говоря AMI &#8211; это образ на диске, а Instance &#8211; это операционная система, запущенная из этого образа. При остановке Instance все изменения теряются, поэтому нужно брать готовые AMI, запускать на их основании Instance, ставить нужные пакеты, настраивать их, а затем создавать свой AMI, и уже дальше стартовать с него. Для долгосрочного хранения данных используется &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/ebs/" >Elastic Block Storage</a></noindex>&#8220;. AMI доступны по AMI ID.
<p>AMI Ubuntu 9.04 описан на сайте Amazon: &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1952&#038;categoryID=101" >Ubuntu 9.04 Jaunty Server</a></noindex>&#8220;. Создатель &#8211; <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://alestic.com/" >Alestic.com</a></noindex>. Эти образы можно посмотреть <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://alestic.com/" >на сайте</a></noindex>. Обратите внимание, что нужно смотреть свой регион (Europe):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/09_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/09_aws2-thumb.png" height="363" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Итак, AMI ID Ubuntu 9.04 Jaunty server 32 bit &#8211; ami-605b7014. Для гарантии существования проверяю:</p>
<pre>
$ cd ~/.ec2
$ ec2-describe-images ami-605b7014
<small>IMAGE	ami-605b7014	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20091011.manifest.xml	063491364108	available	public		i386	machine	aki-02486376	ari-fa4d668e</small>
</pre>
<p>Можно также находить AMI так:</p>
<pre>
$ ec2-describe-images --all | grep -i 9.04
<small>IMAGE	ami-98032bec	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20081222.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-22103856	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090215.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-f6e1c982	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090313.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-dcfcd4a8	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090329.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-36cde542	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090418.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-48cfe73c	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090423.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-0db89079	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090614.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-6686ae12	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20090804.manifest.xml	063491364108	available	public		i386	machine	aki-7e0d250a	ari-7d0d2509
IMAGE	ami-605b7014	alestic-32-eu-west-1/ubuntu-9.04-jaunty-base-20091011.manifest.xml	063491364108	available	public		i386	machine	aki-02486376	ari-fa4d668e</small>
</pre>
<p>Запускаем Instance на базе нужного AMI с использованием ранее созданного ключа id_rsa-gsg-keypair:</p>
<pre>
$ ec2-run-instances ami-605b7014 -k gsg-keypair
<small>RESERVATION	r-02ab4575	042588059738	default
INSTANCE	<b>i-e803f59f</b>	ami-605b7014			<b>pending</b>	gsg-keypair	0		<b>m1.small</b>	2009-11-13T14:47:46+0000	<b>eu-west-1a</b>	aki-02486376	ari-fa4d668e		monitoring-disabled</small>
</pre>
<p>Обратить внимание нужно на параметры:</p>
<ul>
<li>i-e803f59f &#8211; Instance ID, идентификатор запущенного сервера</li>
<li>pending &#8211; ожидает запуска, обычно нужно около 15-60 секунд на запуск</li>
<li>m1.small &#8211; тип Instance, small</li>
<li>eu-west-1a &#8211; регион, также есть eu-west-1b. Важно обращать внимание при создании Elastic Block Store, но об этом в следующей части</li>
</ul>
<p>Проверить статус запуска можно командой (Instance ID нужно подставить из предыдущей команды):</p>
<pre>
$ ec2-describe-instances <b>i-e803f59f</b>
<small>RESERVATION	r-02ab4575	042588059738	default
INSTANCE	i-e803f59f	ami-605b7014	<b>ec2-79-125-56-187.eu-west-1.compute.amazonaws.com</b>	<b>ip-10-227-53-194.eu-west-1.compute.internal</b>	<b>running</b>	gsg-keypair	0		m1.small	2009-11-13T14:47:46+0000	eu-west-1a	aki-02486376	ari-fa4d668e		monitoring-disabled	<b>79.125.56.187</b>	<b>10.227.53.194</b></small>
</pre>
<ul>
<li>ec2-79-125-56-187.eu-west-1.compute.amazonaws.com &#8211; внешний адрес Instance, доступный через Интернет. Назначить постоянный адрес можно через &#8220;<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/index.html?concepts-elastic-addressing.html" >Elastic IP</a></noindex>&#8220;, об этом тоже поговорим в другой части</li>
<li>running &#8211; сервер запущен</li>
<li>79.125.56.187 &#8211; внешний адрес</li>
<li>10.227.53.194 &#8211; внутренний адрес, который транслируется во внешний для выхода в Интернет</li>
</ul>
<p>Процесс загрузки виден в консольном выводе (да, это Xen)</p>
<pre>
$ ec2-get-console-output <b>i-e803f59f</b>
<small>Linux version 2.6.21.7-2.fc8xen-ec2-v1.0 (root@domU-12-31-39-06-50-93) (gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)) #2 SMP Tue Sep 1 10:04:29 EDT 2009
...
CPU 0 irqstacks, hard=c136c000 soft=c134c000
Xen reported: 2666.762 MHz processor.
...
ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----
/etc/ssh/ssh_host_key.pub: No such file or directory
ec2: 2048 <b>b2:14:33:14:79:14:b8:94:5d:35:78:c8:a2:6c:93:2c</b> /etc/ssh/ssh_host_rsa_key.pub (RSA)
ec2: 1024 d9:e9:9d:33:d6:25:42:6d:08:e9:ff:0f:a5:e7:09:af /etc/ssh/ssh_host_dsa_key.pub (DSA)
ec2: -----END SSH HOST KEY FINGERPRINTS-----</small>
</pre>
<p>Instance запущен, доступ по ssh мы открыли ранее, теперь можно зайти на сервер (ставим свой внешний адрес). Аутентификация &#8211; по публичному ключу RSA. В Amazon повёрнуты на безопасности, поэтому они даже рекомендуют отслеживать возможность атаки &#8220;man-on-the-middle&#8221; путём проверки fingerprints при входе по ssh. Поэтому стоит сравнить RSA-fingerprint, который мы видели в выводе ec2-get-console-output с тем, который отобразится при попытке входа, и только если они совпадают, то входить, написав &#8220;yes&#8221;:</p>
<pre>
$ ssh -i id_rsa-gsg-keypair <b>root@ec2-79-125-56-187.eu-west-1.compute.amazonaws.com</b>
<small>The authenticity of host 'ec2-79-125-56-187.eu-west-1.compute.amazonaws.com (79.125.56.187)' can't be established.
RSA key fingerprint is <b>b2:14:33:14:79:14:b8:94:5d:35:78:c8:a2:6c:93:2c</b>.
Are you sure you want to continue connecting (yes/no)? yes</small>
</pre>
<p>Вуаля, мы зашли в сервер:</p>
<pre>
<small>Linux ip-10-227-53-194 2.6.21.7-2.fc8xen-ec2-v1.0 #2 SMP Tue Sep 1 10:04:29 EDT 2009 i686
...
Amazon EC2 Ubuntu 9.04 jaunty AMI built by Eric Hammond
http://alestic.com  http://ec2ubuntu-group.notlong.com

root@ip-10-227-53-194:~# </small>
</pre>
<p>Дальше нужно установить и настроить софт, после чего сделать свой AMI. Об этом &#8211; в следующей части статьи. Пока можно поиграться с сервером, помня, что ни одна настройка не сохранится после останова.</p>
<h2>Остановка Instance</h2>
<p>Оплата в AWS почасовая, что мобилизирует. Когда закончите развлечения с этим Instance, то, чтобы не опустошать кошелёк, нужно остановить Instance. Запустить ранее остановленный Instance нельзя.</p>
<p>Остановить можно или из самого Instance привычным &#8220;shutdown -h now&#8221; (-h очень важно, если его не указать, то сервер перейдёт в Single User Mode и деньги будут сниматься). Или же выйти из сервера и остановить его командой ec2-terminate-instances.</p>
<p>Получаем список запущенных Instance (кстати, стоит то же самое проверить и при &#8220;shutdown -h now&#8221;):</p>
<pre>
$ ec2-describe-instances
<small>RESERVATION	r-02ab4575	042588059738	default
INSTANCE	<b>i-e803f59f</b>	ami-605b7014	ec2-79-125-56-187.eu-west-1.compute.amazonaws.com	ip-10-227-53-194.eu-west-1.compute.internal	running	gsg-keypair	0		m1.small	2009-11-13T14:47:46+0000	eu-west-1a	aki-02486376	ari-fa4d668e		monitoring-disabled	79.125.56.187	10.227.53.194</small>
</pre>
<p>Останавливаем Instance (конечно же, подставляем свой instance id)</p>
<pre>
$ ec2-terminate-instances <b>i-e803f59f</b>
<small>INSTANCE	i-e803f59f	running	shutting-down</small>
</pre>
<p>Через секунд 20 проверям, остановился ли Instance:</p>
<pre>
$ ec2-describe-instances
<small>RESERVATION	r-02ab4575	042588059738	default
INSTANCE	i-e803f59f	ami-605b7014			<b>terminated</b>	gsg-keypair	0		m1.small	2009-11-13T14:47:46+0000		aki-02486376	ari-fa4d668e		monitoring-disabled</small>
</pre>
<p>Terminated &#8211; всё в порядке.</p>
<p>Кстати, для получения краткой справки по команде EC2 можно использовать ключ &#8220;-h&#8221;:</p>
<pre>
$ ec2-terminate-instances -h
<small>  SYNOPSIS
     ec2kill ([ec2-terminate-instances])
     ec2kill [GENERAL OPTIONS] INSTANCE [INSTANCE [...]]
  GENERAL NOTES
     Any command option/parameter may be passed a value of '-' to indicate
     that values for that option should be read from stdin.
  DESCRIPTION
     Terminate selected running instances.
     The INSTANCE parameter is an instance ID to terminate.

  GENERAL OPTIONS

     -K, --private-key KEY
          Specify KEY as the private key to use. Defaults to the value of the
          EC2_PRIVATE_KEY environment variable (if set). Overrides the default.
	...</small>
</pre>
<h2>Деньги</h2>
<p>Выставленные платежи можно посмотреть на странице <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/" >Amazon Web Services</a></noindex> в &#8220;Your Account&#8221;/&#8221;Account Activity&#8221;:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/10_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/10_aws2-thumb.png" height="332" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Но нужно дождаться завершения полного часа, у меня все сервисы по нулям:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/11_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/11_aws2-thumb.png" height="355" width="499" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>По моей второй учётной записи, в которой я делал похожие эксперименты, статистика такая:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/12_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/12_aws2-thumb.png" height="387" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/13_aws2-full.png"  class="image-link" rel="lightbox[1825]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/13_aws2-thumb.png" height="240" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<h2>Итог</h2>
<p>В этой части мы запустили свой Instance. Операционную систему можно выбирать на свой вкус, есть даже Windows, я видел Server2003r2-i386 и Server2003r2-x86_64. Mac OS X, конечно же, нет.</p>
<p>Как вы видите, AWS не настолько тривиален, как хотелось бы, но для нормального IT-спеца вполне подъёмен.</p>
<p>To be continued&#8230;</p>
<p><br class='final-break' style='clear: both' /></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1825/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amazon Web Services. Часть 1. Создание учётной записи</title>
		<link>http://theapplegeek.ru/archives/1774</link>
		<comments>http://theapplegeek.ru/archives/1774#comments</comments>
		<pubDate>Tue, 10 Nov 2009 16:51:18 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/?p=1774</guid>
		<description><![CDATA[Данная тема не совсем об Apple, но меня она интересует давно, и процесс работы очень сильно завязан на работу в shell в нашей любимой Mac OS X в частности и в любом нормальном Unix в общем. Распространяться о модной теме облачных вычислений я особо не буду, здесь всё и так понятно. Я долго подходил к [...]]]></description>
			<content:encoded><![CDATA[<p><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/00_awsstart1-thumb.png" height="83" align="right" width="190" style=" display: inline; float: right; margin: 0 0 10px 10px;" /></a></p>
<p>Данная тема не совсем об Apple, но меня она интересует давно, и процесс работы очень сильно завязан на работу в shell в нашей любимой Mac OS X в частности и в любом нормальном Unix в общем. Распространяться о модной теме облачных вычислений я особо не буду, здесь всё и так понятно. Я долго подходил к <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/" >Amazon Web Services</a></noindex> (AWS), но наконец-то смог более-менее разобраться с ним.</p>
<p>Как вы заметили, любая статья на моём сайте не абстрактное теоретизирование, а результат решения какой-либо проблемы или вопроса, который меня заинтересовал. Вот и разборки с AWS родились из того, что я решил проработать возможность переноса сайта и нескольких других задач на новый сервер. Разделяемый хостинг недолюбливаю давно, столкнувшись с реалиями локальных хостеров, считающих, что load average от 15 на хостинговом сервере &#8211; это нормальная ситуация в расчёте на то, что &#8220;пипл всё схавает&#8221;. <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.parallels.com/products/pvc45/" >VPS</a></noindex> не нравится почти по той же причине, плюс некоторые проблемы с актуальностью операционных систем (не знаю, как сейчас, но лет 5 назад версии OS в VPS очень отставали). Арендовать выделенный сервер достаточно дорого &#8211; минимальная конфигурация, которая устраивает меня, стоит от $100 в месяц (<noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.dc.volia.com/price/" >тариф &#8220;Профи&#8221;</a></noindex> у Воли &#8211; 799 грн), причём я бы добавил ещё 2 GB памяти (+ 98 грн в месяц).</p>
<p>И вот, читая Release Notes Ubuntu 9.10, я вспомнил о том, что давно хотел повозиться с AWS, а именно с <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/ec2/" >Amazon Elastic Compute Cloud</a></noindex> (Amazon EC2). Характеристики Standard Small Instance (1.7 GB of memory, 1 EC2 Compute Unit &#8211; 1 virtual core with 1 EC2 Compute Unit, 160 GB of instance storage, 32-bit platform) со скрипом, но устраивали, а возможность динамически менять производительность с использованием технологии <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/autoscaling/" >Auto Scaling</a></noindex> меня очень привлекла. Технология облачных вычислений очень интересная, и есть несколько идей по поводу их практического применения, в итоге я решил если не перейти на AWS, так хотя бы плотно с ним поработать. Стоимость решения примерно должна стоить в районе $80 в месяц &#8211; небольшая экономия по сравнению с выделенным сервером, но повозиться интересно.</p>
<p><span id="more-1774"></span></p>
<p>Хочу сразу предупредить &#8211; я запускал сервера всего на час-два, поэтому суммарную стоимость для реального сайта я сказать пока не могу. Кроме позитивных отзывов есть и мнение, что AWS избыточно дорога, и в долгосрочной перспективе лучше иметь выделенные сервера (например, об этом говорил @umputun, ссылаясь на опыт своего знакомого). Также есть огромное неудобство EC2 &#8211; без использования дополнительных техник данные при перезагрузке Instance теряются. Но лучше о технологии судить на основании своего, а не чужого опыта, тем более, что эксперименты будут стоить долларов 10.</p>
<p>Я разобью статью на несколько частей. В первой расскажу о создании учётной записи, во второй &#8211; о создании серверов, а в третьей &#8211; об <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/ebs/" >Amazon Elastic Block Store</a></noindex>.</p>
<p>Никаких особенностей при создании учётной записи AWS нет, но для полноты картины покажу весь процесс. Я использовал обычную карту Master Card, без проблем принимаются карты, эмитированные локальными банками &#8211; ограничения &#8220;USA only&#8221; в сервисе нет.</p>
<p>Создание пользователя:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/01_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/01_awsstart1-thumb.png" height="326" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/02_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/02_awsstart1-thumb.png" height="326" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/03_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/03_awsstart1-thumb.png" height="326" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/04_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/04_awsstart1-thumb.png" height="447" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/05_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/05_awsstart1-thumb.png" height="447" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Выбираем активацию <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/ec2/" >Amazon Elastic Compute Cloud</a></noindex> (EC2):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/06_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/06_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Вводим информацию по карте (не знаю, какую сумму заблокирует для проверки, так как для используемой мной карты нет информации по транзакциям):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/07_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/07_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/08_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/08_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Дальше начинается самое интересное &#8211; в отличие от привычной проверки email необходимо проверить номер телефона &#8211; иначе система не активирует запись. Код страны выбирается из выпадающего списка, в текстовом поле нужно ввести данные без этого префикса:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/09_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/09_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Генерируется PIN-код, IVR Amazon через несколько секунд перезванивает (номер звонящего скрывается) и робот просит ввести PIN или медленно его продиктовать</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/10_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/10_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>При успешной верификации обновляется статус:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/11_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/11_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Активацию нужно завершить:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/12_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/12_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Затем войти в EC2:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/13_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/13_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Подписка завершена, можно посмотреть информацию по &#8220;Security Credentials&#8221;:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/14_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/14_awsstart1-thumb.png" height="334" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Здесь показывается Access Key ID, а для отображения секретного ключа нужно нажать Show</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/15_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/15_awsstart1-thumb.png" height="451" width="499" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Для доступа к AWS нужно сгенерировать сертификат X.509 (это сделаем в следующей части)</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/16_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/16_awsstart1-thumb.png" height="451" width="499" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Также нужно со страницы <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/" >AWS</a></noindex> активировать <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/s3/" >Amazon Simple Storage Service</a></noindex> (Amazon S3):</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/17_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/17_awsstart1-thumb.png" height="336" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/18_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/18_awsstart1-thumb.png" height="336" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/19_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/19_awsstart1-thumb.png" height="336" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>Всё, нужные сервисы активированы. В почтовом ящике лежат три письма от Amazon, они особо не нужны. Главное, что нужно запомнить &#8211; информация по учётной записи находится в меню Account на главной странице <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://aws.amazon.com/" >AWS</a></noindex>:</p>
<p style="clear: both"><a href="http://theapplegeek.ru/wp-content/uploads/2009/11/20_awsstart1-full.png"  class="image-link" rel="lightbox[1774]"><img class="linked-to-original" src="http://theapplegeek.ru/wp-content/uploads/2009/11/20_awsstart1-thumb.png" height="336" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></p>
<p>To be continued&#8230;</p>
<p><br class='final-break' style='clear: both' /></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1774/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Подборка фотографий на тему Mac mini Server</title>
		<link>http://theapplegeek.ru/archives/1320</link>
		<comments>http://theapplegeek.ru/archives/1320#comments</comments>
		<pubDate>Wed, 21 Oct 2009 15:37:45 +0000</pubDate>
		<dc:creator>ctrld</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[hosting]]></category>

		<guid isPermaLink="false">http://theapplegeek.ru/archives/1320</guid>
		<description><![CDATA[Среди представленных вчера Apple новых продуктов для меня самым интересным оказался Mac mini Server. Он меня настолько заинтриговал, что я даже загорелся идеей установки сервера на его базе где-нибудь на colocation. Представьте &#8211; суровые 19&#8243; стойки, суровые мотки кабелей, суровые инженеры датацентра, и тут &#8211; сурово стоит Mac mini, пытаясь соответствовать общей суровости :-) Кстати, [...]]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Среди представленных вчера Apple <a href="http://theapplegeek.ru/archives/1225" >новых продуктов</a> для меня самым интересным оказался <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.apple.com/macmini/server/" >Mac mini Server</a></noindex>. Он меня настолько заинтриговал, что я даже загорелся идеей установки сервера на его базе где-нибудь на colocation. Представьте &#8211; суровые 19&#8243; стойки, суровые мотки кабелей, суровые инженеры датацентра, и тут &#8211; сурово стоит Mac mini, пытаясь соответствовать общей суровости :-)</p>
<p style="clear: both">Кстати, мне порекомендовали две фирмы, дающие Mac mini в аренду для хостинга: <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://iweb.com/dedicated/mac/" >iWeb</a></noindex> (ссылка от <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://twitter.com/gothy" >@gothy</a></noindex>) и <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.macminicolo.net/" >macminicolo.net</a></noindex> (ссылка от <noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://twitter.com/lvader " >@lvader</a></noindex>).</p>
<p style="clear: both">А пока попытаюсь понаслаждаться картинами Mac mini в качестве серверов.</p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/fredz/1488967438/"  class="image-link"><img src="http://farm2.static.flickr.com/1190/1488967438_451ea8d714.jpg" height="291" width="440" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p><span id="more-1320"></span>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/sameli/3441166739/"  class="image-link"><img src="http://farm4.static.flickr.com/3367/3441166739_1ae79eb6b1.jpg" height="375" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/carlcaesar96/2278152257/"  class="image-link"><img src="http://farm3.static.flickr.com/2348/2278152257_b9491f54f2.jpg" height="375" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/crlm/3356254235/"  class="image-link"><img src="http://farm4.static.flickr.com/3573/3356254235_922a25f237.jpg" height="375" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/schoenfeldt/3019813269/"  class="image-link"><img src="http://farm4.static.flickr.com/3159/3019813269_4aa108675d.jpg" height="375" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/sameli/3445728886/"  class="image-link"><img src="http://farm4.static.flickr.com/3548/3445728886_37f78f417b.jpg" height="500" width="375" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/benrodian/2425040391/"  class="image-link"><img src="http://farm4.static.flickr.com/3173/2425040391_ddd160cfeb.jpg" height="500" width="375" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/carlcaesar96/2278941014/"  class="image-link"><img src="http://farm3.static.flickr.com/2038/2278941014_87d221aa73.jpg" height="500" width="375" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/swapneel/2554841454/"  class="image-link"><img src="http://farm4.static.flickr.com/3006/2554841454_dd3f9983d3.jpg" height="500" width="375" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p style="clear: both"><noindex><a rel="nofollow" href="http://theapplegeek.ru/goto/http://www.flickr.com/photos/11299741@N00/3981390321/"  class="image-link"><img src="http://farm4.static.flickr.com/3523/3981390321_19d9617c73.jpg" height="500" width="500" style=" text-align: center; display: block; margin: 0 auto 10px;" /></a></noindex></p>
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://theapplegeek.ru/archives/1320/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached (user agent is rejected)
Page Caching using memcached (user agent is rejected)
Database Caching 11/58 queries in 0.055 seconds using memcached
Object Caching 713/775 objects using memcached

Served from: theapplegeek.ru @ 2010-07-31 02:39:39 -->