<?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>Maesan blog</title>
	<atom:link href="http://blog.maesan.jp/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.maesan.jp</link>
	<description>いんたーねっつが好きです。</description>
	<lastBuildDate>Wed, 07 Dec 2011 09:36:49 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Lionでportが動かなかった</title>
		<link>http://blog.maesan.jp/1263544.html</link>
		<comments>http://blog.maesan.jp/1263544.html#comments</comments>
		<pubDate>Wed, 07 Dec 2011 09:16:35 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263544</guid>
		<description><![CDATA[新しいMacBookPro買ったので移行アシスタントでSnow Leopardのディスクからデータ移したらportで入れたツールまできちんと移っててすごいなぁと感心してたんだけど(Snow Leopard以前の移行アシスタントではportそのものも移せなかったような気がするけど気のせい？) 実際にportを使ってみると port selfupdate とかするとエラーが出ちゃってとりあえず入れてたやつは動いているけど、新規でインストールとか出来ない状態になってました。 なんだろなぁと思いながらもしかしてLion用のXcode入れないとダメなんじゃね？とか思ってApp Storeからインストールしてみたら案の上動いたからとりあえずメモ]]></description>
			<content:encoded><![CDATA[<p>新しいMacBookPro買ったので移行アシスタントでSnow Leopardのディスクからデータ移したらportで入れたツールまできちんと移っててすごいなぁと感心してたんだけど(Snow Leopard以前の移行アシスタントではportそのものも移せなかったような気がするけど気のせい？)<br />
実際にportを使ってみると port selfupdate とかするとエラーが出ちゃってとりあえず入れてたやつは動いているけど、新規でインストールとか出来ない状態になってました。</p>
<p>なんだろなぁと思いながらもしかしてLion用のXcode入れないとダメなんじゃね？とか思ってApp Storeからインストールしてみたら案の上動いたからとりあえずメモ</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263544.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ロケットネットでもベンチマークしてみた</title>
		<link>http://blog.maesan.jp/1263523.html</link>
		<comments>http://blog.maesan.jp/1263523.html#comments</comments>
		<pubDate>Fri, 08 Jul 2011 17:01:03 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263523</guid>
		<description><![CDATA[何かロケットネットさんがキャンペーンで50GBのディスク容量にも関わらず年間1,000円キャンペーンをやってたので思わず釣られてみたw いやいや、月額じゃなくて年額1,000円ですよ！これは事件です！ まぁ共用のレンタルサーバーということでVPSとも違うのであんまり自由度も無いけど、取りあえずデータのバックアップ用にでも使おうかと思って借りてみました。 念のため（というかこれが目的になってる節もありますがw）いつものようにPHPspeedをやってみたぜ！ ちなみにOSはCentOSっぽいです。 ちょっと前にやった[AWS] EC2マイクロインスタンスのベンチマークしてみたに追記する形でまとめます。 ベンチ結果 EC2 micro EBS EC2 small instance-store さくらVPS 512 ServersMan@VPS Standard ロケットネット Synthetic PHP BenchMark 3,267 1,262 2,507 1,693 3,794 Synthetic MySQL BenchMark 13,748 5,234 11,072 5,168 6,005 Synthetic Read/Write BenchMark 865 792 1,406 901 2,910 Real World PHP BenchMark 2,639 1,320 4,659 3,090 4,493 Real World PHP [...]]]></description>
			<content:encoded><![CDATA[<p>何かロケットネットさんがキャンペーンで50GBのディスク容量にも関わらず年間1,000円キャンペーンをやってたので思わず釣られてみたw<br />
いやいや、月額じゃなくて年額1,000円ですよ！これは事件です！</p>
<p>まぁ共用のレンタルサーバーということでVPSとも違うのであんまり自由度も無いけど、取りあえずデータのバックアップ用にでも使おうかと思って借りてみました。<br />
念のため（というかこれが目的になってる節もありますがw）いつものようにPHPspeedをやってみたぜ！<br />
ちなみにOSはCentOSっぽいです。</p>
<p>ちょっと前にやった<a href="http://blog.maesan.jp/1263487.html">[AWS] EC2マイクロインスタンスのベンチマークしてみた</a>に追記する形でまとめます。</p>
<h2>ベンチ結果</h2>
<table class="tbl">
<tbody>
<tr>
<th></th>
<th>EC2 micro<br />
EBS</th>
<th>EC2 small<br />
instance-store</th>
<th>さくらVPS<br />
512</th>
<th>ServersMan@VPS<br />
Standard</th>
<th>ロケットネット</th>
</tr>
<tr>
<th>Synthetic<br />
PHP BenchMark</th>
<td>3,267</td>
<td>1,262</td>
<td>2,507</td>
<td>1,693</td>
<td><span style="color: #0000ff;">3,794</span></td>
</tr>
<tr>
<th>Synthetic<br />
MySQL BenchMark</th>
<td><span style="color: #0000ff;">13,748</span></td>
<td>5,234</td>
<td>11,072</td>
<td>5,168</td>
<td>6,005</td>
</tr>
<tr>
<th>Synthetic<br />
Read/Write BenchMark</th>
<td>865</td>
<td>792</td>
<td>1,406</td>
<td>901</td>
<td><span style="color: #0000ff;">2,910</span></td>
</tr>
<tr>
<th>Real World<br />
PHP BenchMark</th>
<td>2,639</td>
<td>1,320</td>
<td><span style="color: #0000ff;">4,659</span></td>
<td>3,090</td>
<td>4,493</td>
</tr>
<tr>
<th>Real World<br />
PHP &amp; MySQL BenchMark</th>
<td>838</td>
<td>994</td>
<td><span style="color: #0000ff;">2,179</span></td>
<td>1,287</td>
<td>2,054</td>
</tr>
<tr>
<th>Server BenchMark</th>
<td>1,415</td>
<td>969</td>
<td>2,548</td>
<td>1,300</td>
<td><span style="color: #0000ff;">2,838</span></td>
</tr>
</tbody>
</table>
<p><a href="http://blog.maesan.jp/wp-content/uploads/2011/07/rocket-benchi.png" target="_blank"><img class="alignnone size-large wp-image-1263527" title="rocket-benchi" src="http://blog.maesan.jp/wp-content/uploads/2011/07/rocket-benchi-1024x635.png" alt="" width="676" height="419" /></a></p>
<p>正直なところ驚きました。<br />
当然ながらVPSやら共用サーバーは当たり外れがあると思いますので、一概に断言はできませんがロケットネットのパフォーマンスはかなりスゴいです。<br />
キャンペーン無しの値段でも初期費用1,575円、月額735円ということで一番安いため、大した性能は期待していませんでしたが、比較したやつの中ではトップクラスでした。後発有利とはいえこれは結構驚きです。<br />
回線品質は確認してないですけどCDN的な使い方もアリかもしれないです。</p>
<p>おまけレベルですがsshも使えて、実際触っていても引っかかる感じが全くないのでアリだと思います。ただ、rsyncでバックアップしようと思ってたのにやっぱりrsync使えなかった（つーか初めに確認しろよオレw）ので若干ショックです＞＜<br />
chmodすら無くてftp経由でパーミッション変更しないといけないとかイミフw<br />
まぁバックアップの方法は適当に考えることにしよう。</p>
<p>Railsも使えるっちゃ使えるみたいなのですが、いかんせんバージョンがかなり古いですねぇ。普通のホームページやらblogやらphp使ったサイトとかなら全然おkですが、ちょっと凝ったことをしようと思ったらやっぱちょっと厳しいですね。<br />
（この辺りがPHPでサイト作る人が圧倒的に多い理由じゃ無いかといつも思う。）</p>
<h2>まとめ</h2>
<p><strong>ロケットネットがオススメの人</strong><br />
・画像いっぱい動画もうpなホームページを作りたい人<br />
・お手軽に独自ドメインでブログとかメールとかやってみたい人<br />
　→ただ使い勝手的に<a href="http://px.a8.net/svt/ejp?a8mat=1BR0UK+C9681E+348+TVYKI" target="_blank">heteml</a><img src="http://www17.a8.net/0.gif?a8mat=1BR0UK+C9681E+348+TVYKI" border="0" alt="" width="1" height="1" />や<a href="http://px.a8.net/svt/ejp?a8mat=1BR0UK+CAYIUQ+348+65MEA" target="_blank">ロリポ</a><img src="http://www19.a8.net/0.gif?a8mat=1BR0UK+CAYIUQ+348+65MEA" border="0" alt="" width="1" height="1" />のがオススメw<br />
・ちょっとWebアプリの作り方を勉強してみたいし、PHPだと捗るって聞いた人<br />
・ターミナルの黒い画面が苦手なのでブラウザでイロイロ設定したい人</p>
<p><strong>ロケットネットがオススメじゃない人</strong><br />
・容量とか別に無くてもいい人<br />
・Railsってかなり捗るって聞いた人<br />
・Google先生と仲良くなるにはPythonとDjangoだろって人<br />
・サーバーをイロイロいじって勉強したい人<br />
・735円出すのが惜しい人<br />
　→つーか月額100円台からあるよね今。。。</p>
<p>ちなみに自分的にお気に入りというかオススメランキングはこんな感じ<br />
<span style="font-size: x-large;"><a href="http://aws.amazon.com/" target="_blank">EC2</a> ＞　<a href="http://px.a8.net/svt/ejp?a8mat=1O53N2+A2L06Q+D8Y+BWVTE" target="_blank">さくらのVPS</a><img src="http://www12.a8.net/0.gif?a8mat=1O53N2+A2L06Q+D8Y+BWVTE" border="0" alt="" width="1" height="1" /> ＞　<a href="http://px.a8.net/svt/ejp?a8mat=1O53N2+A1E4Z6+23BO+C0QPE" target="_blank">ロケットネット</a><img src="http://www17.a8.net/0.gif?a8mat=1O53N2+A1E4Z6+23BO+C0QPE" border="0" alt="" width="1" height="1" /> ＞　<a href="http://px.a8.net/svt/ejp?a8mat=1TQL6N+76ZKXE+1QFI+101KYQ" target="_blank">ServersMan@VPS</a><br />
<img src="http://www11.a8.net/0.gif?a8mat=1TQL6N+76ZKXE+1QFI+101KYQ" border="0" alt="" width="1" height="1" /></span></p>
<p>ServersMan@VPSはベンチに現れていませんが、頻繁に反応が鈍くなります。ssh使っててもイライラするレベルw<br />
今ServersMan@VPSで運用している業務アプリがあるのですが、今月末にちょっとメンテを入れるのでそのタイミングでEC2のTokyoに切り替える予定なくらいあまり気に入っていないw<br />
まぁこの辺はOpenVZの仕様的なところも関係するのかもしれないですね。</p>
<p><a href="http://px.a8.net/svt/ejp?a8mat=1O53N2+A1E4Z6+23BO+BX3J5" target="_blank"><br />
<img src="http://www22.a8.net/svt/bgt?aid=101014958607&amp;wid=001&amp;eno=01&amp;mid=s00000009762002002000&amp;mc=1" border="0" alt="" width="468" height="60" /></a><br />
<img src="http://www10.a8.net/0.gif?a8mat=1O53N2+A1E4Z6+23BO+BX3J5" border="0" alt="" width="1" height="1" /></p>
<p><span style="font-size: x-large;">まぁ、とりあえず一年1000円で使えるうちにから借りとけってことですw</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263523.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[MySQL] レプリケーションしてみた</title>
		<link>http://blog.maesan.jp/1263512.html</link>
		<comments>http://blog.maesan.jp/1263512.html#comments</comments>
		<pubDate>Fri, 22 Apr 2011 10:18:31 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263512</guid>
		<description><![CDATA[定期的にmysqldumpとかでバックアップするのもイイんだけど、確実性を求めるならやっぱレプリケーションだろうと思いやってみた。 ちなみに定期的にmysqldumpするのは間違って更新しちゃったり消しちゃった的な時には有用なのでやっとくことに越したことはないです。 MySQLのレプリケーションって？ 簡単に説明すると、バックアップを取りたいサーバー（マスター）とバックアップ先のサーバー（スレーブ）を用意して、マスターが更新される度に同じ内容でスレーブを更新する仕組みです。更新はほぼリアルタイムに行われるため、更新系はマスターで、参照系はスレーブでやるとかそういう負荷分散的な使い方ができます。 スレーブは複数にしたり、そのスレーブをマスターとして更に多段にスレーブをつなげることもできます。 ただ、複数のマスターをバックアップするスレーブとかはできないです。（物理的に1台のサーバーに複数のMySQLを立ち上げてスレーブにするってのはアリですが） 手順 レプリケーションユーザー作成 まずレプリケーション用のユーザーを用意します。 これはスレーブからマスターにアクセスする用に使うユーザーで、スレーブから接続できるように設定する必要があります。 んでセキュリティー的にレプリケーションの権限だけにしたほうがよいです。 マスターサーバーで以下を実行 mysql&#62;GRANT REPLICATION SLAVE ON *.* TO &#8216;hoge_rep&#8217;@'スレーブのIP&#8217; IDENTIFIED BY &#8216;hoge_password&#8217;; ちなみにデフォルトで外部サーバーからmysqlに接続できないように設定されている場合があるので、my.cnfのbind-address設定を確認したほうがよいです。 bind-address = 127.0.0.1 とかなってたら自分自身からしかアクセス出来ませんのでコメントアウトするなりしてください。 マスターサーバーとスレーブサーバーの設定 マスターのバイナリログをスレーブが取得しにきて同期する仕組みなのでバイナリログを有効化擦る必要がありますので以下を追記する（コメントアウトされてたら有効にする） またマスターとスレーブの文字コードが異なるとまずいことになるので明示的に設定したほうがよいです。 特定のDBのみレプリケーションしたい場合はbinlog_do_dbやbinlog_ignore_dbを設定すればおｋです。 [mysqld] server-id=11111 log_bin=/var/log/mysql/mysql-bin.log default-character-set=utf8 binlog_do_db=hogehoge_database [mysql] default-character-set=utf8 server-idは何でも、スレーブとかぶらなければおｋです。 基本的にスレーブ側はserver-idを設定するだけで良いのですが、レプリケーションしたいDBを限定するにはreplicate-do-dbやreplicate-ignore-dbを指定します。ただし、バイナリログを取得してから対象のDBを絞り込むため、ネットワークのトラフィック量は減りません。そのためネットワークの負荷を下げたい場合はマスター側でbinlog-do-dbを設定したほうがよいです。 [mysqld] server-id=22222 default-character-set=utf8 replicate-do-db=hogehoge_database [mysql] default-character-set=utf8 ただし、スレーブをマスターにして更にスレーブをぶら下げたいときは [mysqld] server-id=22222 default-character-set=utf8 replicate-do-db=hogehoge_database log_bin=/var/log/mysql/mysql-bin.log log_slave_updates と書く必要があります。 設定が終わったらmysqlは再起動してください。 [...]]]></description>
			<content:encoded><![CDATA[<p>定期的にmysqldumpとかでバックアップするのもイイんだけど、確実性を求めるならやっぱレプリケーションだろうと思いやってみた。<br />
ちなみに定期的にmysqldumpするのは間違って更新しちゃったり消しちゃった的な時には有用なのでやっとくことに越したことはないです。</p>
<h2>MySQLのレプリケーションって？</h2>
<p>簡単に説明すると、バックアップを取りたいサーバー（マスター）とバックアップ先のサーバー（スレーブ）を用意して、マスターが更新される度に同じ内容でスレーブを更新する仕組みです。更新はほぼリアルタイムに行われるため、更新系はマスターで、参照系はスレーブでやるとかそういう負荷分散的な使い方ができます。<br />
スレーブは複数にしたり、そのスレーブをマスターとして更に多段にスレーブをつなげることもできます。<br />
ただ、複数のマスターをバックアップするスレーブとかはできないです。（物理的に1台のサーバーに複数のMySQLを立ち上げてスレーブにするってのはアリですが）</p>
<h2>手順</h2>
<h3>レプリケーションユーザー作成</h3>
<p>まずレプリケーション用のユーザーを用意します。<br />
これはスレーブからマスターにアクセスする用に使うユーザーで、スレーブから接続できるように設定する必要があります。<br />
んでセキュリティー的にレプリケーションの権限だけにしたほうがよいです。<br />
マスターサーバーで以下を実行</p>
<div class="console">
mysql&gt;GRANT REPLICATION SLAVE ON *.* TO &#8216;hoge_rep&#8217;@'スレーブのIP&#8217; IDENTIFIED BY &#8216;hoge_password&#8217;;
</div>
<p>ちなみにデフォルトで外部サーバーからmysqlに接続できないように設定されている場合があるので、my.cnfのbind-address設定を確認したほうがよいです。</p>
<div class="config">
bind-address = 127.0.0.1
</div>
<p>とかなってたら自分自身からしかアクセス出来ませんのでコメントアウトするなりしてください。</p>
<h3>マスターサーバーとスレーブサーバーの設定</h3>
<p>マスターのバイナリログをスレーブが取得しにきて同期する仕組みなのでバイナリログを有効化擦る必要がありますので以下を追記する（コメントアウトされてたら有効にする）<br />
またマスターとスレーブの文字コードが異なるとまずいことになるので明示的に設定したほうがよいです。<br />
特定のDBのみレプリケーションしたい場合はbinlog_do_dbやbinlog_ignore_dbを設定すればおｋです。</p>
<div class="config">
[mysqld]<br />
server-id=11111<br />
log_bin=/var/log/mysql/mysql-bin.log<br />
default-character-set=utf8<br />
binlog_do_db=hogehoge_database</p>
<p>[mysql]<br />
default-character-set=utf8
</p></div>
<p>server-idは何でも、スレーブとかぶらなければおｋです。<br />
基本的にスレーブ側はserver-idを設定するだけで良いのですが、レプリケーションしたいDBを限定するにはreplicate-do-dbやreplicate-ignore-dbを指定します。ただし、バイナリログを取得してから対象のDBを絞り込むため、ネットワークのトラフィック量は減りません。そのためネットワークの負荷を下げたい場合はマスター側でbinlog-do-dbを設定したほうがよいです。</p>
<div class="config">
[mysqld]<br />
server-id=22222<br />
default-character-set=utf8<br />
replicate-do-db=hogehoge_database</p>
<p>[mysql]<br />
default-character-set=utf8
</p></div>
<p>ただし、スレーブをマスターにして更にスレーブをぶら下げたいときは</p>
<div class="config">
[mysqld]<br />
server-id=22222<br />
default-character-set=utf8<br />
replicate-do-db=hogehoge_database<br />
log_bin=/var/log/mysql/mysql-bin.log<br />
log_slave_updates
</div>
<p>と書く必要があります。</p>
<p>設定が終わったらmysqlは再起動してください。</p>
<h3>データの複製</h3>
<p>差分で同期していく仕組みなのでレプリケーションを開始する時には全く同じデータである必要があります。そのためマスターのデータをスレーブにコピーします。<br />
ファイルをrsyncとかでコピーしても大丈夫だとは思いますが、普通にmysqldumpを使ってみることにします。<br />
この時、現在のログのファイル名と位置をメモしておきます。</p>
<div class="console">
mysql&gt;FLUSH TABLES WITH READ LOCK;<br />
mysql&gt;SHOW MASTER STATUS;<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| File             | Position | Binlog_Do_DB      | Binlog_Ignore_DB |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| mysql-bin.000028 |  2849935 | hogehoge_database |                  |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+
</div>
<p>で、この状態のまま別のターミナルでmysqldumpします</p>
<div class="console">
$mysqldump -r root -p hogehoge_database &#8211;lock-all-tables &gt; hogehoge.sql
</div>
<p>元のターミナルでロックを解除します</p>
<div class="console">
mysql&gt;UNLOCK TABLES;
</div>
<p>そして今度はスレーブでデータをインポートして、レプリケーションをスタートします。</p>
<div class="console">
$mysql -u root -p hogehoge_database &lt; hogehoge.sql</p>
<p>mysql&gt;CHANGE MASTER TO<br />
MASTER_HOST=&#8221;master.example.com&#8221;,<br />
MASTER_USER=&#8221;hoge_rep&#8221;,<br />
MASTER_PASSWORD=&#8221;hoge_password&#8221;,<br />
MASTER_LOG_FILE=&#8221;mysql-bin.000028&#8243;,<br />
MASTER_LOG_POS=2849935;<br />
mysql&gt;START SLAVE;
</p></div>
<p>以上でレプリケーションが開始されます。</p>
<h2>参考ページ</h2>
<p><a href="http://wadslab.net/wiki/index.php?MySQL%20%A5%EC%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%CE%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7%BC%EA%BD%E7" target="_blank">MySQL レプリケーションのセットアップ手順</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263512.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AWS] EBSブートについての覚え書き</title>
		<link>http://blog.maesan.jp/1263499.html</link>
		<comments>http://blog.maesan.jp/1263499.html#comments</comments>
		<pubDate>Fri, 15 Apr 2011 14:30:39 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263499</guid>
		<description><![CDATA[エントリー[AWS] EC2マイクロインスタンスのベンチマークしてみたでも書いてましたが、EC2のマイクロインスタンスはEBSブートのAMIでしか使えません。今までinstance-storeのAMIしか使ったことが無かったので、イメージの保存〜リカバリーの勝手が分からずちょっと自分なりに調べてみたので覚え書きにする。 &#160; そもそもEC2って？ 元々EC2ではEBSってのは無くて、instance-storeのみでサービスしてたらしいです。 AMIイメージから起動して使用する手順 S3に保存されているAMIイメージを選択する クラウド上にイメージを展開する オンメモリでインスタンスが展開される。シャットダウンすると消える 起動しているインスタンスを永続化する手順 インスタンスのイメージを作成する 作成したイメージをS3にアップロードして保存する この辺の流れはシンガポールが追加されたAmazon EC2で遊んでみた[S3編]を参考にしてください。 S3はストレージサービスと言っても普通にマウントして使うようなやり方はできなくて、httpを使ってファイルを送受信するだけのシンプルなサービス（何せSimple Storage Service → S3ですからw）なので、インスタンスからマウントできるようなストレージサービスとしてEBS(Elastic Block Storage)ってのが提供されるようになったようです。 &#160; EBSについて ではS3とは別のEBSって何かってことですが、EBSを使う流れは簡単にいうとこんな感じ EBSの使い方 サイズを指定してボリュームを作成する 作成したボリュームを起動中のインスタンスにアタッチする インスタンスでアタッチしたボリュームをマウントする ココまではイイんだけど、じゃあEBSブートって何よ？ってのが疑問になったわけ。イメージ的にはシャットダウンしても消えないインスタンスが使えるようになるんだって思って、だいたい合ってました。 EBSブートのインスタンスが起動するまでの流れ EBSブート用のAMIから起動する 自動的にEBSボリュームが作成され、イメージが展開される EBSボリュームからインスタンスが起動する 終了するとstop状態でEBSボリュームが残る (設定でterminateにもできるので注意) terminateするとEBSボリュームが消える インスタンスの状態にはrunningとterminateとstopってのがあって、terminateするとデータ全部消えちゃいます。EBSだとterminateしても消えないのかなって思ったけど残念ながら消えます＞＜その代わりEBSにはstopって状態が存在して、stopにしておくとスナップショットをとって保存しておけます。また、stopならそこからもう一度起動することもできます。 &#160; スナップショットからAMIイメージを作成してリカバリーする方法 stopにしておけばデータは消えないのですが、同じインスタンスをもう１個立ち上げたいとか誰かにオレオレAMIを公開したいとかできないし、stopのままおいておくのもなんか気持ち悪いのでどうやってEBSブートAMIを作るのか調べました。 スナップショットはManagement Consoleからでも簡単にできるのですが、AMIイメージの作成はManagement Consoleからはできず、コマンドラインインターフェースを使う必要がありました。 実際の手順はこのページ「EC2においてEBS Snapshotでバックアップを取得しそれをリカバリする方法」がスゴくわかりやすかったです。 インスタンスの情報が以下でスナップショットの名前がsnap-xxxxxxxxとすると Root Device: /dev/sda1 Kernel ID: aki-xxxxxxxx RAM Disk ID: [...]]]></description>
			<content:encoded><![CDATA[<p>エントリー<a href="http://blog.maesan.jp/1263487.html">[AWS] EC2マイクロインスタンスのベンチマークしてみた</a>でも書いてましたが、EC2のマイクロインスタンスはEBSブートのAMIでしか使えません。今までinstance-storeのAMIしか使ったことが無かったので、イメージの保存〜リカバリーの勝手が分からずちょっと自分なりに調べてみたので覚え書きにする。</p>
<p>&nbsp;</p>
<h2>そもそもEC2って？</h2>
<p>元々EC2ではEBSってのは無くて、instance-storeのみでサービスしてたらしいです。</p>
<div class="memo">
<p><strong>AMIイメージから起動して使用する手順</strong></p>
<ol>
<li>S3に保存されているAMIイメージを選択する</li>
<li>クラウド上にイメージを展開する</li>
<li>オンメモリでインスタンスが展開される。シャットダウンすると消える</li>
</ol>
</div>
<div class="memo">
<p><strong>起動しているインスタンスを永続化する手順</strong></p>
<ol>
<li>インスタンスのイメージを作成する</li>
<li>作成したイメージをS3にアップロードして保存する</li>
</ol>
</div>
<p>この辺の流れは<a title="シンガポールが追加されたAmazon EC2で遊んでみた[S3編]" rel="bookmark" href="http://blog.maesan.jp/1252089.html">シンガポールが追加されたAmazon EC2で遊んでみた[S3編]</a>を参考にしてください。</p>
<p>S3はストレージサービスと言っても普通にマウントして使うようなやり方はできなくて、httpを使ってファイルを送受信するだけのシンプルなサービス（何せ<span style="text-decoration: underline;">S</span>imple <span style="text-decoration: underline;">S</span>torage <span style="text-decoration: underline;">S</span>ervice → S3ですからw）なので、インスタンスからマウントできるようなストレージサービスとしてEBS(Elastic Block Storage)ってのが提供されるようになったようです。</p>
<p>&nbsp;</p>
<h2>EBSについて</h2>
<p>ではS3とは別のEBSって何かってことですが、EBSを使う流れは簡単にいうとこんな感じ</p>
<div class="memo">
<p><strong>EBSの使い方</strong></p>
<ol>
<li>サイズを指定してボリュームを作成する</li>
<li>作成したボリュームを起動中のインスタンスにアタッチする</li>
<li>インスタンスでアタッチしたボリュームをマウントする</li>
</ol>
</div>
<p>ココまではイイんだけど、じゃあEBSブートって何よ？ってのが疑問になったわけ。イメージ的にはシャットダウンしても消えないインスタンスが使えるようになるんだって思って、だいたい合ってました。</p>
<div class="memo">
<p><strong>EBSブートのインスタンスが起動するまでの流れ</strong></p>
<ol>
<li>EBSブート用のAMIから起動する</li>
<li>自動的にEBSボリュームが作成され、イメージが展開される</li>
<li>EBSボリュームからインスタンスが起動する</li>
<li>終了するとstop状態でEBSボリュームが残る (設定でterminateにもできるので注意)</li>
<li>terminateするとEBSボリュームが消える</li>
</ol>
</div>
<p>インスタンスの状態にはrunningとterminateとstopってのがあって、terminateするとデータ全部消えちゃいます。EBSだとterminateしても消えないのかなって思ったけど<strong>残念ながら消えます＞＜</strong>その代わりEBSにはstopって状態が存在して、stopにしておくとスナップショットをとって保存しておけます。また、stopならそこからもう一度起動することもできます。</p>
<p>&nbsp;</p>
<h2>スナップショットからAMIイメージを作成してリカバリーする方法</h2>
<p>stopにしておけばデータは消えないのですが、同じインスタンスをもう１個立ち上げたいとか誰かにオレオレAMIを公開したいとかできないし、stopのままおいておくのもなんか気持ち悪いのでどうやってEBSブートAMIを作るのか調べました。<br />
スナップショットはManagement Consoleからでも簡単にできるのですが、AMIイメージの作成はManagement Consoleからはできず、コマンドラインインターフェースを使う必要がありました。<br />
実際の手順はこのページ「<a href="http://nkjmkzk.net/?p=1814">EC2においてEBS Snapshotでバックアップを取得しそれをリカバリする方法</a>」がスゴくわかりやすかったです。</p>
<div class="memo">インスタンスの情報が以下でスナップショットの名前がsnap-xxxxxxxxとすると<br />
Root Device: /dev/sda1<br />
Kernel ID: aki-xxxxxxxx<br />
RAM Disk ID: ari-xxxxxxxx&nbsp;</p>
<p>コマンドはこんな感じ</p>
<blockquote><p>#ec2-register -n イメージ名 -d &#8216;イメージの説明&#8217; &#8211;root-device-name /dev/sda1 -b /dev/sda1=snap-xxxxxxxx -a i386 &#8211;kernel aki-xxxxxxxx &#8211;ramdisk ari-xxxxxxxx</p>
<p class="notice">*64bitの場合はi386をx86_64に</p>
</blockquote>
</div>
<p>これでMy AMIにオレオレイメージが作成されましたのでいつでもインスタンスを立ち上げることができるようになりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263499.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[AWS] EC2マイクロインスタンスのベンチマークしてみた</title>
		<link>http://blog.maesan.jp/1263487.html</link>
		<comments>http://blog.maesan.jp/1263487.html#comments</comments>
		<pubDate>Thu, 14 Apr 2011 15:36:33 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263487</guid>
		<description><![CDATA[いつの間にやらEC2にsmallインスタンスの更に下のmicroインスタンスってのが使えるようになったらしいので、ちょっとやってみた。 他のサービスと比較 まずは似たようなサービスと比較してみます。 AWSの東京リージョンも最近できましたが、前からシンガポール使ってたので、それ基準で。 VPSとEC2は違うものですが、値段的に同じくらいのさくらVPSとServersMan@VPSも表に入れてみた。 &#160; スペック 初期費用(年) 料金/時間 料金/月間 EC2 スモール（オンデマンド） CPU：仮想1コアメモリ：1.7GBストレージ：160GB* 0 $0.095 $68.4 (約5,700円) EC2 マイクロ（オンデマンド） CPU：仮想1コアメモリ：613MBストレージ：従量(EBS) 0 $0.025 $18 (約1,500円) EC2 マイクロ（リザーブ） CPU：仮想1コアメモリ：613MBストレージ：従量(EBS) $54 $0.01 $7.2 (約600円) さくらのVPS512 CPU：仮想2コアメモリ：512MBストレージ：20GB 0 &#8212; 980円 ServersMan@VPSStandard CPU：仮想2コアメモリ：512MBストレージ：30GB 0 &#8212; 980円 *ただしシャットダウンすると跡形も無く消え去ります＞＜ スモールはちょっと頭抜けてますが、マイクロのリザーブは初期費用入れるとだいたい980円くらいなのでさくらVPS 512やServersMan@VPS Standardとほぼぴったりな感じです。 ただ、EC2はデータの転送量に応じた料金がかかりますし、EC2のマイクロインスタンスはEBSブートのみなのでストレージ費用も別途かかります（月$0.1/GB+I/0に応じて） そのためやっぱちょっと金額は他と比べるとかかっちゃいます。ただ、普通のVPSと違ってアクセスが集中した時でもある程度ブーストしてくれるのでその辺はクラウドの強みかなと思います。 ベンチマーク！ では皆さんも大好きなベンチマーク結果をw ベンチマークはAWS, さくらVPS, hetemlでベンチマークしてみたと同じくPHPspeedでやってみました。 アレから時間も経ってるので、スモールとさくらVPSも再計測してみました+ServersMan@VPSも最近使い始めたのでそれもまとめてみました。 &#160; EC2 [...]]]></description>
			<content:encoded><![CDATA[<p>いつの間にやらEC2にsmallインスタンスの更に下のmicroインスタンスってのが使えるようになったらしいので、ちょっとやってみた。</p>
<h2>他のサービスと比較</h2>
<p>まずは似たようなサービスと比較してみます。<br />
AWSの東京リージョンも最近できましたが、前からシンガポール使ってたので、それ基準で。<br />
VPSとEC2は違うものですが、値段的に同じくらいのさくらVPSとServersMan@VPSも表に入れてみた。</p>
<table class="tbl">
<tr>
<th>&nbsp;</th>
<th>スペック</th>
<th>初期費用(年)</th>
<th>料金/時間</th>
<th>料金/月間</th>
</tr>
<tr>
<th>EC2 スモール<br/>（オンデマンド）</th>
<td>CPU：仮想1コア<br/>メモリ：1.7GB<br/>ストレージ：160GB*</td>
<td>0</td>
<td>$0.095</td>
<td>$68.4 (約5,700円)</td>
</tr>
<tr>
<th>EC2 マイクロ<br/>（オンデマンド）</th>
<td>CPU：仮想1コア<br/>メモリ：613MB<br/>ストレージ：従量(EBS)</td>
<td>0</td>
<td>$0.025</td>
<td>$18 (約1,500円)</th>
</tr>
<tr>
<th>EC2 マイクロ<br/>（リザーブ）</th>
<td>CPU：仮想1コア<br/>メモリ：613MB<br/>ストレージ：従量(EBS)</td>
<td>$54</td>
<td>$0.01</td>
<td>$7.2 (約600円)</th>
</tr>
<tr>
<th>さくらのVPS<br/>512</th>
<td>CPU：仮想2コア<br/>メモリ：512MB<br/>ストレージ：20GB</td>
<td>0</td>
<td>&#8212;</td>
<td>980円</th>
</tr>
<tr>
<th>ServersMan@VPS<br/>Standard</th>
<td>CPU：仮想2コア<br/>メモリ：512MB<br/>ストレージ：30GB</td>
<td>0</td>
<td>&#8212;</td>
<td>980円</th>
</tr>
</table>
<p class="notice">*ただしシャットダウンすると跡形も無く消え去ります＞＜</p>
<p>スモールはちょっと頭抜けてますが、マイクロのリザーブは初期費用入れるとだいたい980円くらいなのでさくらVPS 512やServersMan@VPS Standardとほぼぴったりな感じです。<br />
ただ、EC2はデータの転送量に応じた料金がかかりますし、EC2のマイクロインスタンスはEBSブートのみなのでストレージ費用も別途かかります（月$0.1/GB+I/0に応じて）<br />
そのためやっぱちょっと金額は他と比べるとかかっちゃいます。ただ、普通のVPSと違ってアクセスが集中した時でもある程度ブーストしてくれるのでその辺はクラウドの強みかなと思います。</p>
<h2>ベンチマーク！</h2>
<p>では皆さんも大好きなベンチマーク結果をw<br />
ベンチマークは<a href="http://blog.maesan.jp/1263367.html" target="_blank">AWS, さくらVPS, hetemlでベンチマークしてみた</a>と同じくPHPspeedでやってみました。<br />
アレから時間も経ってるので、スモールとさくらVPSも再計測してみました+ServersMan@VPSも最近使い始めたのでそれもまとめてみました。</p>
<table class="tbl">
<tr>
<th>&nbsp;</th>
<th>EC2 micro<br/>EBS</th>
<th>EC2 small<br/>instance-store</th>
<th>さくらVPS<br/>512</th>
<th>ServersMan@VPS<br/>Standard</th>
</tr>
<tr>
<th>Synthetic PHP BenchMark</th>
<td>3,267</td>
<td>1,262</td>
<td>2,507</td>
<td>1,693</td>
</tr>
<tr>
<th>Synthetic MySQL BenchMark</th>
<td>13,748</td>
<td>5,234</td>
<td>11,072</td>
<td>5,168</td>
</tr>
<tr>
<th>Synthetic Read/Write BenchMark</th>
<td>865</td>
<td>792</td>
<td>1,406</td>
<td>901</td>
</tr>
<tr>
<th>Real World PHP BenchMark</th>
<td>2,639</td>
<td>1,320</td>
<td>4,659</td>
<td>3,090</td>
</tr>
<tr>
<th>Real World PHP &#038; MySQL BenchMark</th>
<td>838</td>
<td>994</td>
<td>2,179</td>
<td>1,287</td>
</tr>
<tr>
<th>Server BenchMark</th>
<td>1,415</td>
<td>969</td>
<td>2,548</td>
<td>1,300</td>
</tr>
</table>
<p><a href="http://blog.maesan.jp/wp-content/uploads/2011/04/ec2-benchi.png" target="_blank"><img src="http://blog.maesan.jp/wp-content/uploads/2011/04/ec2-benchi.png" alt="" title="ec2-benchi" width="550" height="343" class="alignnone size-full wp-image-1263494" /></a></p>
<h2>まとめ</h2>
<p>いや、何かの間違いと思いたいのですが、EC2のsmallが一番しょぼいってどうよ？w<br />
何かもう全部マイクロインスタンスに変えてやろうかと思ってしまったわ＞＜<br />
ちなみにsmallとmicroは同じAMIで、instance-storeで使ってたAMIをEBSに変換してmicroで使ってみました。<br />
（この辺はまた別エントリーで書いてみます）<br />
EBSブートの方がinstance-storeよりもIO性能が低いってAWSのページには書いてあったのですが、全然変わらないというかむしろ逆転している感が漂っています。。。</p>
<p>相変わらずさくらVPSがスゴすぎるのはいうまでもない感じですが、ServersMan@VPSが意外と健闘している感じがします。実際使ってみるとServersMan@VPSはたまに引っかかる感じというか、遅いと感じる時があるのですが、ベンチマークとってみるとあまり目立ってばらついては無かったです。</p>
<p>一番ばらつきが大きかったのがEC2のmicroでした。短期ブーストってAWSの説明に書いてあったけど、いざという時は瞬発力を発揮してくれるのかもしれないですね。</p>
<p style="font-size:24px">まぁ取りあえず<a href="http://px.a8.net/svt/ejp?a8mat=1O53N2+A2L06Q+D8Y+BWVTE" target="_blank">さくらのVPS</a><br />
<img border="0" width="1" height="1" src="http://www13.a8.net/0.gif?a8mat=1O53N2+A2L06Q+D8Y+BWVTE" alt="">使っとけば間違いは無いってことですかね？W</p>
<p><a href="http://px.a8.net/svt/ejp?a8mat=1O53N2+A2L06Q+D8Y+BXB8X" target="_blank"><br />
<img border="0" width="468" height="60" alt="" src="http://www23.a8.net/svt/bgt?aid=101014958609&#038;wid=001&#038;eno=01&#038;mid=s00000001717002003000&#038;mc=1"></a><br />
<img border="0" width="1" height="1" src="http://www12.a8.net/0.gif?a8mat=1O53N2+A2L06Q+D8Y+BXB8X" alt=""></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263487.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>格安SSL証明書導入の記録</title>
		<link>http://blog.maesan.jp/1263464.html</link>
		<comments>http://blog.maesan.jp/1263464.html#comments</comments>
		<pubDate>Thu, 03 Mar 2011 08:02:36 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[覚え書き]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263464</guid>
		<description><![CDATA[SNIについてですがwww.maesan.jpの証明書でmaesan.jpも証明できるのでこの記事でSNI対応できてるというのは間違っていると思われます（コメント指摘ありがとうございます！） この記事に書いてある無理矢理な方法ではなく、きちんと対応したバージョンのapacheを使ってください＞＜ いままでSSLの証明書取得とか設定とか、レンタルサーバー側に任せっきりだったのでちょっと勉強がてら格安SSLの「エンジョイSSLダイレクト」って所を使ってmaesan.jpドメインをSSL化してみた。 何ていうか名前からしてアレな感じですが、値段は驚きの1,400円w そんな価格の証明書で大丈夫か？w 手順 サーバーのSSL化は以下の手順で行います。 1.CSRの作成 2.SSL証明書発行申し込み 3.サーバーのSSL設定 CSRの作成〜証明書発行申し込み CSRってのは企業の社会的責任のアレじゃなくて、Certificate Signing Requestの略らしく、簡単にいうと公開鍵＋サーバーの情報が含まれた謎の文字列のことです。 サーバーはDebian使ってますが、基本的な手順は一緒と思われます。 まずは秘密鍵の生成を行います。 #openssl genrsa -out maesan.jp.key 2048 秘密鍵とは公開鍵で暗号化されたものを復号化する鍵のことで、秘密鍵で暗号化されたものは公開鍵で復号化できるんだった気がしますが、それはRSAだけだったかよく分からなくなってきたので、詳しい説明は賢い人に聞いてください！ んで次にCSRの生成を行います。 #openssl req -new -key maesan.jp.key -out maesan.jp.csr Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Kyoto Locality Name (eg, city) []:Kyoto Organization Name (eg, company) [Internet Widgits Pty [...]]]></description>
			<content:encoded><![CDATA[<p><strong><font color="red">SNIについてですがwww.maesan.jpの証明書でmaesan.jpも証明できるのでこの記事でSNI対応できてるというのは間違っていると思われます（コメント指摘ありがとうございます！）<br />
この記事に書いてある無理矢理な方法ではなく、きちんと対応したバージョンのapacheを使ってください＞＜</font><br />
</strong><br />
いままでSSLの証明書取得とか設定とか、レンタルサーバー側に任せっきりだったのでちょっと勉強がてら格安SSLの「<a href="http://www.e-ssldirect.com/" target="_blank">エンジョイSSLダイレクト</a>」って所を使ってmaesan.jpドメインをSSL化してみた。<br />
何ていうか名前からしてアレな感じですが、値段は驚きの1,400円w そんな価格の証明書で大丈夫か？w</p>
<h2>手順</h2>
<p>サーバーのSSL化は以下の手順で行います。<br />
1.CSRの作成<br />
2.SSL証明書発行申し込み<br />
3.サーバーのSSL設定</p>
<h2>CSRの作成〜証明書発行申し込み</h2>
<p>CSRってのは企業の社会的責任のアレじゃなくて、Certificate Signing Requestの略らしく、簡単にいうと公開鍵＋サーバーの情報が含まれた謎の文字列のことです。</p>
<p>サーバーはDebian使ってますが、基本的な手順は一緒と思われます。</p>
<p>まずは秘密鍵の生成を行います。</p>
<div class="cmd">#openssl genrsa -out maesan.jp.key 2048</div>
<p>秘密鍵とは公開鍵で暗号化されたものを復号化する鍵のことで、秘密鍵で暗号化されたものは公開鍵で復号化できるんだった気がしますが、それはRSAだけだったかよく分からなくなってきたので、詳しい説明は賢い人に聞いてください！</p>
<p>んで次にCSRの生成を行います。</p>
<div class="cmd">#<strong>openssl req -new -key maesan.jp.key -out maesan.jp.csr</strong><br />
Country Name (2 letter code) [AU]:<strong>JP</strong><br />
State or Province Name (full name) [Some-State]:<strong>Kyoto</strong><br />
Locality Name (eg, city) []:<strong>Kyoto</strong><br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<strong>Maesan&#038;Co.,Ltd.</strong><br />
Organizational Unit Name (eg, section) []:<strong>空白でおk</strong><br />
Common Name (eg, YOUR name) []:<strong>www.maesan.jp</strong><br />
Email Address []:<strong>空白でおk</strong></p>
<p>Please enter the following &#8216;extra&#8217; attributes<br />
to be sent with your certificate request<br />
A challenge password []:<strong>空白でおk</strong><br />
An optional company name []:<strong>空白でおk</strong></div>
<p>CSRはテキストで以下のような謎の文字列です<br />
これを申し込みページにコピペすればおk</p>
<div class="code">
<pre>-----BEGIN CERTIFICATE REQUEST-----
MIICpDCCAYwCAQAwXzELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBUt5b3RvMQ4wDAYD
VQQHEwVLeW90bzEYMBYGA1UEChQPTWFlc2FuJkNvLixMdGQuMRYwFAYDVQQDEw13
d3cubWFlc(◕‿‿◕)IIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnr0R
XAGjybsym3IjKWsCec3/Gea9rptRELwjA5LMRHftSLB47nD1d+WktU34jEyQ/8GQ
MFsSVjaBIAhU4EfnGサンプルだよA3pWBxcEe|＼ _＿_ ／|G+FeIZpi71HSa4
FxqQVurIL/qxEkCoy23L0+17Ee5KGSiUNKjKI／人◕‿‿◕人＼byGoDHQsIh4bH
hG7BItU0uFVnN3+dzQdyn9tLL1XEIcOvfXY7G5G/EQaiKDLbyUJQo9FWpYjxtdLx
Div0tIhehpK/zzpryTBwu3AkU1n1tp2fOSy6W/hDUvt7IjA90BYlqsIalK8io0hF
t7o+smIpvkdmb+6AewIDAQABoAAwDQYJKoZIhvcNAQEFBQADggEBAELWERkrZDxB
b1xt5NRPrhFPf0rBX/+tFo( つ◕ω◕)つIKwm4ZuuspvUBfj+OMmYFfe3BE7lU2S
cS/gFT9iSIWmT2hqV5jX9Z5iYqg6kYf7fBUlmmkeZjMw8v3XqSeST8U+6On+hfzp
7DGaYUO∩(⊙∀⊙)∩wJnUn/6AvYuqmLb3n3lhUE+f5t8xZl1FGGo7HwBDinCa8L
Gwfg6gmVYNKQpEJGhIL62+PKaWrMvcU5XHa9yYRMv4t41MyJ4tSXSk+TeO1ViWp8
VynoKbMhyლ(❛o❛ლ)AtNz0fYU/ga2v2hX6g1r7u54KuaIht5CSml2abTeyETCF67
8wpc7VVFwbQ=
-----END CERTIFICATE REQUEST-----</pre>
</div>
<p>ちなみに申し込みフォームで証明書送付先メールアドレスがroot@www.maesan.jpとかになっちゃって困ったのですが、取りあえずそれで進めて問題なかったです。</p>
<p>で、申し込み終わってPayPalで決済も終わったのに５分どころか一晩連絡無しw<br />
いやいや、最短５分とか書いてあったしw<br />
まぁ営業時間外っぽい時間だったし、色々と流れ的にテンポが悪いとこもあったので、きっと中の人が手作業で進めてるところがあるような気がするw</p>
<p>取りあえず翌朝にメールがきまして、トラッキングページから送付先のメールアドレスも変更して、RapidSSLからメールが届き、承認すれば証明書(中間CAも)がメールにて送付されてきました。</p>
<h3>サーバーの設定</h3>
<p>SSLの設定ですが、www.maesan.jpとmaesan.jpをVirtualHostで分けたいなと思いましたが、debianのaptのapacheは2.2.9でSNIに対応するのはapache2.2.12以降らしいのでダメっぽい。しかし、ダメ元でやってみるw</p>
<p>まずはmod_gnutlsをインストール</p>
<div class="cmd">#apt-get install libapache2-mod-gnutls</div>
<p>で、mod_gnutlsの設定<br />
/etc/apache2/ports.conf<br />
mod_sslのとこをコメントアウトして以下を追記</p>
<div class="code"><code class="prettyprint">&lt;IfModule mod_gnutls.c&gt;<br />
  Listen 443<br />
  NameVirtualHost *:443<br />
  SSLStrictSNIVHostCheck off<br />
&lt;/IfModule&gt;</code></div>
<p>バーチャルホストの設定<br />
/etc/apache2/sites-available/www.maesan.jp-ssl</p>
<div class="code"><code class="prettyprint">&lt;VirtualHost _default_:443&gt;<br />
  ServerName www.maesan.jp<br />
  SSLEngine on<br />
  SSLCertificateFile      /etc/apache2/ssl/maesan.jp.crt　←証明書<br />
  SSLCertificateKeyFile   /etc/apache2/ssl/maesan.jp.key　←秘密鍵<br />
  SSLCACertificateFile    /etc/apache2/ssl/maesan.jp.cacrt　←中間証明書<br />
  以下略<br />
&lt;/VirtualHost&gt;</code></div>
<p>/etc/apache2/sites-available/maesan.jp-ssl</p>
<div class="code"><code class="prettyprint">&lt;VirtualHost _default_:443&gt;<br />
  ServerName maesan.jp<br />
  SSLEngine on<br />
  SSLCertificateFile      /etc/apache2/ssl/maesan.jp.crt　←証明書<br />
  SSLCertificateKeyFile   /etc/apache2/ssl/maesan.jp.key　←秘密鍵<br />
  SSLCACertificateFile    /etc/apache2/ssl/maesan.jp.cacrt　←中間証明書<br />
  以下略<br />
&lt;/VirtualHost&gt;</code></div>
<p>モジュールとサイトの有効化</p>
<div class="cmd">#a2enmod gnutls<br />
#a2dissite default-ssl<br />
#a2ensite www.maesan.jp-ssl<br />
#a2ensite maesan.jp-ssl<br />
#/etc/init.d/apache2 restart</p>
<p><span class="error_message">Syntax error on line 19 of /etc/apache2/ports.conf:<br />
Invalid command &#8216;SSLStrictSNIVHostCheck&#8217;, perhaps misspelled or defined by a module not included in the server configuration<br />
 failed!</span>
</div>
<p>やっぱダメかw<br />
SSLStrictSNIVHostCheckの行をコメントアウトして起動してみると動いた。</p>
<p>試しに <a href="https://maesan.jp/" target="_blank">https://maesan.jp/</a> と <a href="https://www.maesan.jp/" target="_blank">https://www.maesan.jp/</a> にアクセスしてみたらなんだかちゃんとVirtualHostで動いてるw<br />
しかもWindows2000のIE6でも動いた！とりあえずおkとするw</p>
<h2>まとめ</h2>
<p>超格安のSSLですが、本当に大丈夫なのかと思いまして、古めの環境も含めてチェックしてみました。</p>
<p><strong>おkだったもの</strong><br />
　Mac: Safari5.0.3, Firefox 3.6.14, Chrome 9.0.597.107, Opera 11.01<br />
　Windows XP: IE8, Chrome 9.0.597.98, Firefox<br />
　Windows 2000: Firefox 3.6.14, Opera 10.63<br />
　iPhone</p>
<p><strong>警告でたの</strong><br />
　Windows 2000: IE6</p>
<p>SNI(名前ベースのSSL VirtualHost)は全部いけた。というか本当に上の設定で正しいかどうかは不明なのであまり参考にしない方がイイかもw</p>
<p>VISTAと7が手元に無い＋IE7を確認してないのでアレですが、とりあえずは使えるレベルなのではないでしょうか？<br />
ただ、このブログのアクセス解析してもIE6が結構な割合でいるので（こんな技術系ブログでIE6のユーザーが多いのもどうかと思いますがw）、万人向けのネットショップとかだとためらってしまうかもしれないですね。XPのIE6で警告でなかったらおkかも知れませんね。</p>
<p>もし上記アドレスにアクセスして警告とか出る環境があればコメントかtweetしてもらえるとありがたいです！</p>
<p>身も蓋もないことをいうと、1,400円で簡単に証明できてしまうようなものなので自己署名のSSLとどれほどの違いがあるのかと思えてしまいますよねwww</p>
<p><strong>追記：<br />
　Windows XPでIE6の環境を作って試したら問題なくいけました。<br />
　ついでにヨメの古いガラケーで試すとwww.maesan.jpはいけてmaesan.jpはムリだった。<br />
　→正直コレはSNIの問題じゃないかと思ったり思わなかったり。。。<br />
</strong></p>
<h2>参考URL</h2>
<p><a href="http://www.e-ssldirect.com/" target="_blank">エンジョイSSLダイレクト</a><br />
<a href="http://d.hatena.ne.jp/tilfin/20110224/1298557887" target="_blank">Ubuntu で Apache 2.2 でマルチドメイン SSL を設定するには</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263464.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[cakePHP] floatのフィールドが指数表記になっちゃう</title>
		<link>http://blog.maesan.jp/1263454.html</link>
		<comments>http://blog.maesan.jp/1263454.html#comments</comments>
		<pubDate>Thu, 17 Feb 2011 08:17:43 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263454</guid>
		<description><![CDATA[cakePHPでfloatのフィールドを使った場合、７桁を超える数値を入れたらフォームで指数表記されちゃうのが困る。 これが こうなる 仕方ないのでviewで $this->data["Article"]["point"] = sprintf('%.2f', $this->data["Article"]["point"]); って書いたらいけるかと思ったらいけなかった。 よくよく考えたらviewをレンダリングする前にformが出来上がってんじゃなかったっけ？w ってことに気付いて素直にcontrollerに書いたら期待通りに動いた。 function edit($id = null) { if (!$id &#038;&#038; empty($this->data)) { $this->Session->setFlash(__('Invalid article', true)); $this->redirect(array('action' => 'index')); } if (!empty($this->data)) { if ($this->Article->save($this->data)) { $this->Session->setFlash(__('The article has been saved', true)); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The article could not be saved. Please, try again.', [...]]]></description>
			<content:encoded><![CDATA[<p>cakePHPでfloatのフィールドを使った場合、７桁を超える数値を入れたらフォームで指数表記されちゃうのが困る。</p>
<p>これが<br />
<img src="http://blog.maesan.jp/wp-content/uploads/2011/02/スクリーンショット（2011-02-17-17.00.49）.png" alt="" title="スクリーンショット（2011-02-17 17.00.49）" width="409" height="265" class="alignnone size-full wp-image-1263455" /></p>
<p>こうなる<br />
<img src="http://blog.maesan.jp/wp-content/uploads/2011/02/スクリーンショット（2011-02-17-17.01.06）.png" alt="" title="スクリーンショット（2011-02-17 17.01.06）" width="400" height="261" class="alignnone size-full wp-image-1263456" /></p>
<p>仕方ないのでviewで</p>
<div class="code"><code class="prettyprint">$this->data["Article"]["point"] = sprintf('%.2f', $this->data["Article"]["point"]);<br />
</code></div>
<p>って書いたらいけるかと思ったらいけなかった。<br />
よくよく考えたらviewをレンダリングする前にformが出来上がってんじゃなかったっけ？w<br />
ってことに気付いて素直にcontrollerに書いたら期待通りに動いた。</p>
<div class="code"><code class="prettyprint">function edit($id = null) {<br />
  if (!$id &#038;&#038; empty($this->data)) {<br />
    $this->Session->setFlash(__('Invalid article', true));<br />
    $this->redirect(array('action' => 'index'));<br />
  }<br />
  if (!empty($this->data)) {<br />
    if ($this->Article->save($this->data)) {<br />
      $this->Session->setFlash(__('The article has been saved', true));<br />
      $this->redirect(array('action' => 'index'));<br />
    } else {<br />
      $this->Session->setFlash(__('The article could not be saved. Please, try again.', true));<br />
    }<br />
  }<br />
  if (empty($this->data)) {<br />
    $this->data = $this->Article->read(null, $id);<br />
    $this->data["Article"]["point"] = sprintf('%.2f', $this->data["Article"]["point"]);<br />
  }<br />
}<br />
</code></div>
<p><img src="http://blog.maesan.jp/wp-content/uploads/2011/02/スクリーンショット（2011-02-17-17.15.43）.png" alt="" title="スクリーンショット（2011-02-17 17.15.43）" width="396" height="262" class="alignnone size-full wp-image-1263457" /><br />
何かイマイチすっきりしないのですが、他の解決策ないのかねぇ？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263454.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[cakePHP] 1.3でForm-&gt;selectのパラメータ変わったのか</title>
		<link>http://blog.maesan.jp/1263452.html</link>
		<comments>http://blog.maesan.jp/1263452.html#comments</comments>
		<pubDate>Mon, 07 Feb 2011 14:31:39 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263452</guid>
		<description><![CDATA[今までだと、formヘルパーを使って空白を出さないselectは以下の様に書いてました echo $this->Form->select('hoge_id', $hoges, null, null, false); で1.3でこれやるとダメで、ソース見たらこうやるのが正しいっぽい echo $this->Form->select('hoge_id', $hoges, null, array('empty' => false)); だれかCookbookのフォームヘルパーのselectのページを修正してください＞＜ http://book.cakephp.org/ja#!/ja/view/1430/select ↑英語版を見るとそっちは正しいみたいだった！]]></description>
			<content:encoded><![CDATA[<p>今までだと、formヘルパーを使って空白を出さないselectは以下の様に書いてました</p>
<div class="code"><code class="prettyprint">echo $this->Form->select('hoge_id', $hoges, null, null, false);</code></div>
<p>で1.3でこれやるとダメで、ソース見たらこうやるのが正しいっぽい</p>
<div class="code"><code class="prettyprint">echo $this->Form->select('hoge_id', $hoges, null, array('empty' => false));</code></div>
<p>だれかCookbookのフォームヘルパーのselectのページを修正してください＞＜<br />
<a href="http://book.cakephp.org/ja#!/ja/view/1430/select" target="_blank">http://book.cakephp.org/ja#!/ja/view/1430/select</a><br />
↑英語版を見るとそっちは正しいみたいだった！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263452.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Python] メール送信</title>
		<link>http://blog.maesan.jp/1263445.html</link>
		<comments>http://blog.maesan.jp/1263445.html#comments</comments>
		<pubDate>Wed, 02 Feb 2011 02:29:43 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263445</guid>
		<description><![CDATA[Pythonでメールを送信したかったのでやってみた 基本的には以下のページのコピペなのですが、1点引っかかったのでメモ Pythonでメールを送信したい人のためのサンプル集 #!/usr/bin/env python # encoding: utf-8 import smtplib from email.MIMEText import MIMEText from email.Utils import formatdate def SendMail(to_addr, subject, body, from_addr=None): if from_addr is None: from_addr = "hoge@maesan.jp" msg = MIMEText(body) msg["Subject"] = subject msg["From"] = from_addr msg["To"] = to_addr msg["Date"] = formatdate() s = smtplib.SMTP() s.sendmail(from_addr, [to_addr], msg.as_string()) s.close() if __name__ == [...]]]></description>
			<content:encoded><![CDATA[<p>Pythonでメールを送信したかったのでやってみた</p>
<p>基本的には以下のページのコピペなのですが、1点引っかかったのでメモ<br />
<a href="http://labs.unoh.net/2007/06/python_2.html" target="_blank">Pythonでメールを送信したい人のためのサンプル集</a></p>
<div class="code"><code class="prettyprint">#!/usr/bin/env python<br />
# encoding: utf-8</p>
<p>import smtplib<br />
from email.MIMEText import MIMEText<br />
from email.Utils import formatdate</p>
<p>def SendMail(to_addr, subject, body, from_addr=None):<br />
    if from_addr is None:<br />
        from_addr = "hoge@maesan.jp"<br />
    msg = MIMEText(body)<br />
    msg["Subject"] = subject<br />
    msg["From"] = from_addr<br />
    msg["To"] = to_addr<br />
    msg["Date"] = formatdate()</p>
<p>    s = smtplib.SMTP()<br />
    s.sendmail(from_addr, [to_addr], msg.as_string())<br />
    s.close()</p>
<p>if __name__ == '__main__':<br />
  from_addr = 'hoge@maesan.jp'<br />
  to_addr = 'foo@maesan.jp'<br />
  subject = 'test mail'<br />
  body = 'test'<br />
  SendMail(to_addr, subject, body, from_addr)<br />
</code></div>
<p>これでおkだと思ってたのですが、実行すると</p>
<blockquote class="error_message"><p>AttributeError: SMTP instance has no attribute &#8216;sock&#8217;</p></blockquote>
<p>ってエラーがでた。</p>
<p>多分メールサーバーとの接続に失敗したのかなと思い、明示的にサーバーとポートを指定したら動いた。</p>
<div class="code"><code class="prettyprint">    # s = smtplib.SMTP()  # ↓こんな感じに変更<br />
    s = smtplib.SMTP("localhost", 25)<br />
</code></div>
<h2>参考ページ</h2>
<p><a href="http://labs.unoh.net/2007/06/python_2.html" target="_blank">Pythonでメールを送信したい人のためのサンプル集</a><br />
<a href="http://mail.python.org/pipermail/mailman-coders/2005-October/001931.html" target="_blank">[ mailman-Bugs-1315417 ] SMTP problem</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263445.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryで.postしようと思ったらfileはpostできない件</title>
		<link>http://blog.maesan.jp/1263439.html</link>
		<comments>http://blog.maesan.jp/1263439.html#comments</comments>
		<pubDate>Wed, 26 Jan 2011 12:15:00 +0000</pubDate>
		<dc:creator>maesan</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.maesan.jp/?p=1263439</guid>
		<description><![CDATA[今更ながらjQueryにハマってまして、今日も画面遷移なしで画像がアップロードできるスクリプトを書こうとしたのですが、Javascriptではfileをpostできないことに気付いた＞＜ で、画面遷移なしでファイルをアップロードしようと思ったらiframeを使ったりするらしい。Ajaxではないけど、Ajaxっぽい動きですな。 ということでサクっと書いてみた アップロード用ページ upload.html &#60;html&#62; &#60;head&#62; &#60;style&#62; #dummy{ /* display:none; するとSafariだとおかしくなるらしい？ */ border:0px; width:0px; height:0px; } #image{ display:none; max-width:480px; } &#60;/style&#62; &#60;/head&#62; &#60;body&#62; &#60;iframe name="dummy" id="dummy"&#62;&#60;/iframe&#62; &#60;div id="message"&#62;&#60;/div&#62; &#60;img id="image"&#62;&#60;/div&#62; &#60;form action="upload.php" method="post" target="dummy" enctype="multipart/form-data"&#62; &#60;input type="file" name="img" /&#62; &#60;input type="submit" value="Upload"&#62; &#60;/form&#62; &#60;/body&#62; &#60;/html&#62; 注意点はiframeにdisplay:none;するとSafariだとおかしくなるらしいんだけど、ウチの環境では別にどっちでも行けた(Mac OSX 10.6.6, Safari 5.0.3) http://groundwalker.com/blog/2007/02/file_uploader_and_safari.html ファイルアップロード処理とか upload.php &#60;?php [...]]]></description>
			<content:encoded><![CDATA[<p>今更ながらjQueryにハマってまして、今日も画面遷移なしで画像がアップロードできるスクリプトを書こうとしたのですが、Javascriptではfileをpostできないことに気付いた＞＜</p>
<p>で、画面遷移なしでファイルをアップロードしようと思ったらiframeを使ったりするらしい。Ajaxではないけど、Ajaxっぽい動きですな。</p>
<p>ということでサクっと書いてみた</p>
<h3>アップロード用ページ upload.html</h3>
<div class="code"><code class="prettyprint">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;style&gt;<br />
#dummy{<br />
    /* display:none; するとSafariだとおかしくなるらしい？ */<br />
    border:0px;<br />
    width:0px;<br />
    height:0px;<br />
}<br />
#image{<br />
    display:none;<br />
    max-width:480px;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
    &lt;iframe name="dummy" id="dummy"&gt;&lt;/iframe&gt;<br />
    &lt;div id="message"&gt;&lt;/div&gt;<br />
    &lt;img id="image"&gt;&lt;/div&gt;<br />
    &lt;form action="upload.php" method="post" target="dummy" enctype="multipart/form-data"&gt;<br />
        &lt;input type="file" name="img" /&gt;<br />
        &lt;input type="submit" value="Upload"&gt;<br />
    &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div>
<p>注意点はiframeにdisplay:none;するとSafariだとおかしくなるらしいんだけど、ウチの環境では別にどっちでも行けた(Mac OSX 10.6.6, Safari 5.0.3)<br />
<a href="http://groundwalker.com/blog/2007/02/file_uploader_and_safari.html" target="_blank">http://groundwalker.com/blog/2007/02/file_uploader_and_safari.html</a></p>
<h3>ファイルアップロード処理とか upload.php</h3>
<div class="code"><code class="prettyprint">&lt;?php<br />
    $error = 0;<br />
    $msg = "";<br />
    $filename = "";<br />
    if ($_FILES["img"]["error"] == 0) {<br />
    	$info = getimagesize($_FILES['img']['tmp_name']);<br />
    	if ($info[2] != 2 &#038;&#038; $info[2] != 3 &#038;&#038; $info[2] != 6) {<br />
            $msg = "画像ファイルでお願いします。";<br />
            $error++;<br />
    	} else {<br />
    	   $exts = array(2 =&gt; '.jpg', 3 =&gt; '.png', 6 =&gt; '.bmp');<br />
    	   $ext = $exts[$info[2]];<br />
            $filename = "tmp/hoge".$ext;<br />
            move_uploaded_file($_FILES["img"]["tmp_name"], $filename);<br />
            chmod($filename, 0666);<br />
            $msg = "ファイルをアップロードしました。";<br />
    	}<br />
    } else {<br />
        $msg = "ファイルのアップロードに失敗しました。";<br />
        $error++;<br />
    }<br />
    // jsonで出してeval<br />
    $results = sprintf('{"error":"%s","msg":"%s","filename":"%s"}', $error, $msg, $filename);<br />
?&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script src="jquery.js"&gt;&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
//&lt;![CDATA[<br />
    $('document').ready(function(){<br />
        var results = eval('(&lt;?php echo $results;?&gt;)');<br />
        // 親ウィンドウのオブジェクトはwindow.parent.documentってやったらとれる<br />
        $('#message', window.parent.document).html(results["msg"]);<br />
        if (results["error"] == 0) {<br />
            $('#image', window.parent.document).css('display', 'block').attr('src', results["filename"]);<br />
        }<br />
    });<br />
//]]&gt;<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div>
<p>別にこの程度ならjQuery使う必要は全然ないんですけどねw<br />
フツウに書いてもコード量は変わらんですw</p>
<p>ポイントはjQueryでiframeから親windowのDOM要素を操作する場合は<br />
$(&#8216;対象のidとか&#8217;, window.parent.document)<br />
ってやるとできる。</p>
<p>素のjavascriptで書いた<br />
parent.document.getElementById(&#8220;対象のid&#8221;)<br />
とほぼ一緒かな。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.maesan.jp/1263439.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

