HOKYPOKY.BLOG

MacBook Airを買ってやったこと 番外編 作業のできるカフェを紹介

最近、天気がいいのとMacbook Airを買ったので、外で作業したりしている。最近流行り?のノマドワーカー、コワーキングスタイルというやつだ。

環境作りとは、自分のいる場所から作るものだとどこかの本(きっとメタプログラミングRuby)に書いてあったので番外編として、Wi-Fiが使え、電源が取れ、居心地のいいカフェを3つほど紹介。


mid. / http://www.mid.vc/

山手通り沿いにあり、「代々木八幡」駅から徒歩6分と少し離れたところにあるため、クルマや電車というよりも自転車や原付などでフラっと立ち寄るのに最適だ。

電源のある席とない席があるのだけれど、昼過ぎに行けば大抵空いている。

ここの良いところ、「ご飯が美味しい」。ランチタイム外でも定食がしっかりしていて、とりあえず食事だけという時に。1,200円と価格もお手頃。

ドリンクはコーヒー、と言いたいところだがここは様々なフレーバーのティーを試してもらいたい。また、茶葉はグラム売りしているので気に入ったらお家でも。

そして、自分は飲まないのだけれどワインも豊富。
パラメーターの分布図付きメニューがあるのでワインが良くわからない人でも好みのワインを見つけられるだろう。

mid.
住所 : 渋谷区元代々木町55−7
営業時間 : 12:00-26:00 (ランチタイム 12:00-15:00)
URL : http://www.mid.vc/


202 Market / http://202-market.com/

partycompany Inc.が「笹塚」駅にオープンした店で、渋谷の「ON THE CORNER」と雰囲気はとても似ている。
どの席も電源とWi−Fiが使えるのでまさに電源カフェといったところ。他にも作業をしにきている人が多いので気兼ねなく作業ができる。

ソファー席も多く、ちょっとしたミーティングをするのにも良さそう。

知恵熱を覚ますために甘いモノが欲しくなる。
ここのケーキは、2ピースで頼めばサイズ半分で2種類のケーキが食べられる。

店員がとても気さくなので、通いたくなる感じ。

202 Market
住所 : 東京都渋谷区笹塚1-57-10 笹塚駅前ビル2F
営業時間 : 12:00-26:00
URL : http://202-market.com/


Lily Cafe 初台店 / http://www.lily-cafe.com/

電源のある席は限られているのだけれど、店員に言えば案内してもらえる。
仮に混んでいたとしても、席が空いたら移動させてもらえるのでその間はバッテリーで。

ここはランチタイムに行くとコーヒーがおかわり出来るのが嬉しい。

店内は天井が高くゆったりとしているが、程良く仕切りのある席もあり集中できる。

駅から多少離れているせいか、穴場だ。
どちらかというと常連も多く地元の人がゆっくりとくつろぎに来ている感がある。

Lily Cafe 初台店
住所 : 東京都渋谷区初台2-11-11 ステータスヒル1F
営業時間 : 11:00-26:00
URL : http://www.lily-cafe.com/


以上3件を、GoogleMapにポイントしてみた。
ボクの家がどのあたりにあるかお分かりいただけただろうか。

残念、ボクの家は中野坂上にある。自転車や原付がないと少し距離があり「気軽に行ける」とは言いがたい。「中野坂上」駅から徒歩圏内に、こういった場所があるといいのだけれど。

MacBook Airを買ってやったこと その1 インストールしたアプリケーションと設定

実はMacBook Airを買っていたので設定をメモっておく。
結構長いので幾つかに分けて書こうと思っている。

アプリケーション / ユーティリティ系

  • Google日本語入力
    (システム環境設定で、ことえりのチェックを外す。
    Google日本語入力も英数(Google)、ひらがな(Google)以外チェックを外す)
  • KeyRemap4Macbook
    USキーボード使っているのでSJISの人はやらなくていい
    左右のコマンドキーを「英数/かな」としてもつかう
    →「コマンドキーの動作を優先モード」にチェック
  • BTT(BetterTouchTool)
    「Trackpad / Magic Trackpad」はMacのデフォルト
    MagicMouse

    • ThreeFinger Click -> Show Desktop
    • ThreeFinger Swipe Down -> Application Expose
    • ThreeFinger Swipe Up -> Expose(Mission Control)
  • QuickSilver
    Leopardまでは色々できたのだけどSnowLeopard以降それができなくなり、普通にアプリケーションランチャーとして利用している。
    なのでCatalogはApplicationフォルダ以外チェックを外している。
  • Growl
    Extra内にあるgrowlnotify.pkgもインストール
  • ClipMenu
    コピペを複数もてる
    どのアプリケーションからも呼び出せるスニペットが重宝する

アプリケーション / 開発系

  • Xcode
    Developer Program入ってない人はAppStoreから。
    iOS5 SDKのため、AppStoreからでなくdeveloper.apple.comからインストールした(要Developer Program)
  • GitX(L)
    GitXのフォーク版、色々機能が増えている。
  • GitHub for Mac
    基本はGitXだけど、GitHub for Macかわいいから。
  • iTerm2
    デフォルトのTerminalよりもいろいろ捗る

アプリケーション / テキストエディタ

アプリケーション / ブラウザ

アプリケーション / その他

  • Adobe CS4 Web Premium
    リモードディスクでインストール
    ※ 送信側のシステム環境設定から共有「DVD または CD 共有」にチェック
  • Twitter
  • iWorks

システム環境設定

  • キーボード
    修飾キー → CapsLockをCtrlへ変更

メールの設定

  • GmailからIMAPで同期

iTunesの設定

  • 前に使っていたMacBookからミュージックフォルダを移動するだけ

まとめ

長文だけどここまではだいぶシンプルな環境なはず。

ユーティリティ系はどれもかなりおすすめ。全部無料。
テキストエディタはIDEとかvim, Emacsつかってないので大したことないかも。Textmate2なんてなかったんや。
ブラウザはChromeメインで使っているけども拡張は少なめ。

Adobeソフトはあまりいじらないで使っている。
ショートカットなどは昔結構いじっていたけども、結局デフォルト派。

システム環境設定のCapsLockをCtrlにするのはコダワリ。Aの横はCtrl。

風が吹けばIE爆発しろ

-> 風が吹く
-> 砂が目に入る
-> 家に戻る
-> インターネットをする
-> 「#!」について考える
-> history.pushStateを使った実装が今のところベスト
-> IEが対応していない
-> IE爆発しろ

色々考えて、IEを爆発させれば丸くおさまるメソッドを使わせてもらいました。

参考記事:「#!」を含むURLについて

「#!」を含むURLについて

「#!」を含むURLについて。
TwitterやLifehacker(先日リニューアルした)やちょっと前のFacebookなどで使われている技術なんだけど、最近少し反感をかっているらしい。

http://d.hatena.ne.jp/karasuyamatengu/20110212/1297465199
http://d.hatena.ne.jp/karasuyamatengu/20110210/1297363019

このあたりかな。(※ ブログ主は原文を訳したりまとめているだけ。)

正直ボクはこの手法がとても好きである。

理由は簡単で

・軽い、速い

コレに尽きる。

・やり取りする情報が少ない -> 転送量が少ない。
・サーバー負荷が少ない -> レスポンスのスピードが速い。
・Ajaxなので画面が真っ白になることなく遷移する -> 体感速度的にも速い。
・CPUパワーについては細かくわからないけど、ネットワークによるCPU負荷も減る。

こんだけユーザー体験を考えてやっているのにね。
前述のブログ記事の引用。

最後に:「コンテンツがcurlでロードできなければそのサイトは壊れている」-Ben Ward

つまり、「ロボットが見れなきゃいけねっす」的な。

誰がこんな事決めたんだろうね。
なんのためのWebサイトなのか。
誰のためのWebサイトなのか。

百歩譲って壊れているとしても、それはダメなんかね?

ルールがユーザー体験を止めてはいけない。

ちなみに

言わんとしていることは分かっている訳で、この技術の弱点を上げるのであれば、上記の引用はもちろん独自の仕様で突き進む気持ち悪さや、「#」自体の機能が損なわれる等、所謂Hackによる犠牲がある。

それを解消する方法として「history.pushState」があることを覚えておいて欲しい。
facebookやgithubで採用されているが、これを使えばURLハック無しで「#!」を使ったようなことができる。

ただ、全ての環境で「history.pushState」が使えるわけではない。
モダンブラウザの一部だけ。早く広まって欲しいな。
でも実際にURLを書き換えられることがセキュリティ上で問題視されるかもしれない。

どんな時代になっても、どんなことをしても、やっかむ人はいるしケチは付けられると思う。
せっかく新しいことを切り開いていく人たちがいるのに糞くだらない理由で文句付ける人にはなりたくない。

真面目か!くそ真面目か!

補足

もう少し考えてみた:http://hokypoky.info/blog/2011/02/14/sigh-to-ie.html

Facebookのフロントエンド技術

Hello Facebook!!

Facebookはじめました。

「Facebookが流行っている理由がわからない」「Facebookは流行るのか!?」などなど言われてるけど、結局はSNSは流行りものであり、mixiが何故面白かったのか、Twitterが何故面白いのかというのも「人がいるから」という理由に他ならないと思っています。
実は、こっそりTwitterのアカウントを別で作ってみたりしたのだけど、誰もフォローしていない、誰にもフォローされていないとそりゃーもうつまらないつまらない。つまり「人がいれば面白い、人がいなければつまらない」。それだけのことです。
流行るか流行らないかはディティールこそ異なれ「話題になったかどうか」なので映画とか大事ね。

で、最近Facebookで友達を積極的にフォローしてそこそこに楽しくなってきました。
色々いじってみて分かったのが「Facebookの技術力がすごい」ということです。

バックエンドでは色々と話題にもなっていますが、フロントエンドもすごかった。
いくつか気がついた点をピックアップしてみます。

バックエンドについて色々は以下などが参考になるかと。
PHPをC++に変換して高速化する「HipHop for PHP」をFacebookが公開
タグ “Facebook” の記事一覧 - Publickey

FBML

FBML(FacebookMarkupLanguage)
http://developers.facebook.com/docs/reference/fbml/

要はFacebookのHTML API(実際はXMLとJavaScriptの実装)。
ファンページやアプリではこれを使ってサイトを作らないといけないのだけど、これはFacebook外のページでも使うこともできます。

例えば、こんなページを作ることができます。
http://www.hsiet.com/winery/storybar.html
さすがにこれは「デザインしょっぺぇ!!」って突っ込みたくなりますね。
ただ、実際にソースをみるとというタグがいっぱいある。

Facebook連携をクライアントサイドだけでできてしまうのは、とても便利。
以下をhead内に入れてあげればFBMLをサイトで使うことができます。

<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>

手始めに、このブログでもFBMLを使いウィジェットを設置。
あとはファンページも作成。
実際は簡単なアプリも作ってみたのだけど、これはいつか記事にするかも。

※ 余談ですが、ファンページのURLを固定化するには25人以上のファン(「いいね!」)がいないといけないらしい。
ぜひ「HOKYPOKY.info ファンページ」から「いいね!」して下さい!!

HTML5時代のAjax

実はココが一番良いたいこと。
タイトルを「Facebookに学ぶ、HTML5時代のAjax」とかにすればよかったかもしれない。

まずはこの記事をみてください。

TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係)

要はGoogleが「http://〇〇.com/xxx/#!hoge」となっているページを「http://〇〇.com/xxx/?_escaped_fragment_=hoge」として解釈してクロールするという話。

実際にバックエンドでhttp://〇〇.com/xxx/?_escaped_fragment_=hogeを用意してあげればAjaxを使ってもSEO的にOKなのです。

しかしこの方法は、すこし古いことが判明。

というのも実は、最近のfacebookでは「#!」がつかない。(ブラウザはChromeとSafari)
URLかわってるのにFacebookって爆速だなーと思って調べていたら、HTML5の「History API」を使っていて、実際は全てAjaxだったのでした。

Histroy APIはブラウザの「戻る/進む」をJavaScriptから操作できるもの。

地味っすなー。

だけどコレを使えばAjaxとSEOを両立できるのです。鍵は「history.pushState()」

// using jQuery
(function($){
  $(function(){
    $("a").click(function(){
      // history.pushStateを使うことで擬似的にURLのパス、ブラウザの履歴を変更する
      // ドメインをまたぐことはできないので安全。
      history.pushState({path: this.pathname}, (this.title ? this.title : document.title), this.href);
      $.ajax({
        url: this.href,
        success: function(data){
          // do something
        }
      });
      return false; // これで本来のaタグのリンクの挙動がキャンセルされる。
    });
  })
})(jQuery);

とても簡単にURL変更と履歴を残しつつ「ページを遷移させない」ことができました。
ページが遷移しないのでAjaxなどで情報を更新すればいいわけです。

レガシーブラウザやロボットに対してはAjaxをオフにして、モダンブラウザではAjaxを使って軽量化、高速化、エフェクティブにするなどの実装が望ましいですね。

(((【【【[[[HTML5]]]】】】) ))

バックエンドの実装もビューはスタティックなHTMLとAPIの連携となっていき、負荷軽減やクロスプラットフォーム化が進みますね!

まとめ

紹介したのは恐らくFacebookからすればほんの一部ですが、FacebookやTwitterなど流行りのWebサービスはたしかな技術力というのが付いてきているなーというのを実感しました。また気がついたらこのブログでも紹介していきたいと思います。

映画「ソーシャル・ネットワーク」は来週観に行こうと思います。

下の「いいね!」宜しくです!

サーバーの構成メモ

Rackspaceが使えるようになったのでいよいよアプリケーションを作っていきたいところ。せっかく自前で作るのだから新しい技術を率先して使っていきたいのと、なるべくサーバースペック(主にメモリ)を消費しない形で実装したい。Railsだけは別で、これがないとボクはWebサービス作れない。

今のところ考えている構成

nginx

http://nginx.org/
ロシア製のWebサーバー。Apacheは汎用性が高いが少々高負荷。最近ではドキュメントもちらほら出てきている。後述するunicornにRailsの処理を任せてしまうのでURL RewiteとVirtualHostの定義くらい。

Ruby Enterprise Edition

http://www.rubyenterpriseedition.com/
省メモリのRuby。1.8.7ベース。どうやらGCなどの仕組みがちがうらしい。実際にRailsはメモリを消費しまくるのと、unicornによるインスタンスの生成、削除が激しいのでこちらの方が効率がいいようだ。Ruby1.9.2も考えたが、他のライブラリ的に時期早尚であることと、メモリ的にはREEの方が優勢。

Ruby on Rails 3

http://rubyonrails.org/
先日メジャーバージョンアップがリリースされた最新のRuby on Rails。Rails3のコアがミニマムになり、抽象クラスが定義されていることでプラグイン間の連携がスマートになった。現段階ではRails2と比べるとプラグインの対応が行き届いてはいないが、移行が多少めんどくさいので最初からRails3でいくことにする。

Unicorn

http://unicorn.bogomips.org/
RailsサーバーというよりはRackサーバー。Unicorn自体がロードバランサーでインスタンスの生成や割り振りの効率がいい。

MongoDB

http://www.mongodb.org/
どうせクラウドなのだからネットワーク分割耐性のあるデータベースにしようと、リレーショナルデータベースではないものの中でこれを選択。ドキュメント指向のデータベースというものらしく、スピードはMySQLよりも早く、可用性を犠牲にする代わりにネットワーク分割耐性がある。ActiveRecordではなくmongoidを使うのでソースは多少変わるが、Rails3よりActiveModelが定義されているおかげでかなりRailsライクだし、そもそもSQLをむりやりORMで動かすよりいいんじゃないかという気になったりしている。そして、速度の対価としてHDDを結構食らう。

monit

http://mmonit.com/monit/
監視ツール。サーバーが落ちたりしたときにある程度復旧してくれたり、メールでアラートしてくれる。

探しているもの

Rails OAuth 1.0a プラグイン

Rails3になって今一番やっかいだなとおもっているのがこれ。
時間が解決してくれるとは思っているが(他力本願)、Rails2で使えていたOAuth系のプラグインがこぞって使えなくなっている。DeviseやWarden_oauthをなんとかRails3に入れたい。ドキュメントが薄いのでソース読むしかないな。

仲間が欲しい!

まわりにRailsやってる人がいなくて、基本独学なのでいろいろと分からないことも多いです。
@nijitaro でTwitterやっていますので気軽にフォローして情報共有しましょうー!

Rackspace!! (1) – CentOSを入れ初期設定を行う

英語の電話は済みましたか?おつかれ様でした。英語の電話が終わりしばらくするとアクティベートされます。
まだ契約していないという人は、今後の参考にしてください。

使用するOSはサーバーがCentOS 5.5、クライアントはMac OS X 10.6 (Snow Leopard)です。

とても長いので目次をつけました。

  1. Rackspace Cloud ServersにCentOSをインストール
  2. CentOSの初期設定 – SSHの設定
    1. CentOSの初期設定 – SSHの設定
    2. さらに強固な設定にする
      1. 新しいユーザーを作る
      2. 作成したユーザーに認証鍵を登録する
      3. ルートユーザーではログインできないようにする
      4. パスワードではログインできないようにする
      5. 認証鍵でログインできるようにする
  3. CentOS初期設定 – その他の設定
    1. HOSTNAME= の内容をFQDNに書き換える
    2. サーバのグローバルIPアドレスに対応する行のホスト名をFQDNに書き換える
    3. ロケールの変更
    4. タイムゾーンの変更
  4. 再起動する
  5. バックアップをとる
  6. まとめ

Rackspace Cloud ServersにCentOSをインストール

アクティベートしたら早速管理画面に入ります。

Rackspace 管理画面 ログイン

スマートな管理画面です。左メニューよりHosting > Cloud Servers を選択してください。

Rackspace 管理画面 サーバー一覧

サーバー一覧が表示されます。ボクの場合はすでにサーバーインスタンスを1つ作ってあります。そのままAdd Serverをクリックします。

Rackspace 管理画面 OS選択

選べるOSがいっぱいありますね。タブからWindowsを選択するとWindowsサーバーを選択することもできます。今回は愛しのCentOS5.5を使うことにします。今後このブログではCentOSを使っての設定方法になります。
Red Hat Linux(REHL)、FedoraはCentOSと同系列ディストリビューションですので、流用は効くと思いますが自分は触ったことありません。CentOSはREHLのクローンで商用サポートのないOS。古臭いですが、枯れた確かなパッケージを使っています。FedoraもREHLからの派生ですが、最新の技術を積極的に取り込むディストリビューションです。

Rackspace 管理画面 名前 スペック選択

サーバーの名前を付けてスペックを選択しましょう。256MBのプランにします。HDDは10GBです。CPUはインスタンスに比例するらしいですがコンパイルなどを見る限り遅くはありません。EC2の2倍速いらしいです。
名前はFQDN(サブドメインを含むドメイン名)にしておくのがいいですよ。サブドメインなしで運用する場合はドメイン名で。

CentOSの初期設定 – SSHの設定

しばらくすると申請完了メールがとどきます。IPとrootのパスワードが書いてあります。
危険ですので早速rootのパスワードを変更しましょう。ターミナルからSSHを使ってのリモートで設定していきますのでクライアントでの作業とします。

メールに書いてあるIPと危険なrootパスワードをつかってログインします。
ターミナル(Macだとターミナル.app)を開きます。

$ ssh root@xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxはメールに付いていたIPアドレスに置き換えてください。
また、Enterを押すとなにやらyes/noを聞かれます。これはサーバー側から証明書が送られてくるので記憶するかどうかという質問です。今後、パスワードログインをしない方向で考えていますのでyesとしておきましょう。

rootでログインできました。怖いので早速パスワードを変更します。

# passwd
(current) UNIX password:
New UNIX password:
Retype new UNIX password: 

現在のパスワードを聞かれ、新しいパスワードを二回入力するとパスワードが変更されます。
今後、メールに記載されているパスワードは何の意味もありませんし、今回入力したパスワードは再入手できませんので大切に保管してください。

次にポートをチェックしましょう。初期設定では22番(SSH)以外閉じられています。
また、Webサービスを展開することを考えていますので、HTTPの80番ポートを開けておきましょう。
別にこれはあとででもいいです。

# vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

80番ポート(HTTP)を開けたい場合は太字を追加してください。
変更した場合はファイアーウォールを再起動します。

# service iptables restart

さらに強固な設定にする

ひとまず危険な状態を逃れることができました。ウミガメの子どもが海に入りカモメの群れから逃れた感じです。しかし海にはまだ危険がたくさんあります。いきなりルートユーザーでログインできることや、そもそもパスワードでログインできてしまうことの危険を考えると怖いです。

そこで以下のようなカッチカチの設定にしましょう。

  1. 新しいユーザーを作る
  2. 作成したユーザーに認証鍵を登録する
  3. ルートユーザーではログインできないようにする
  4. パスワードではログインできないようにする
  5. 認証鍵でログインできるようにする

カッチカチやぞ!

パソコンが盗まれ、ユーザー名がばれず、さらにルートユーザーパスワードがばれない限り安心です。絶対にパソコン内にユーザー名、パスワードを保存しないようにしましょう。
もしもパソコンが盗まれた場合にも、そのパソコンからアクセスされないようにすればいいわけです。
パソコンが壊れてしまった場合、二度とログインできなくなってしまうほどです。できれば二台設定しておきたいです。iPadやiPhoneのSSHクライアントソフトもありますのでそれらを使うのがいいでしょう。

以前もCentOSでのSSHの設定について書いたのであわせて読んでください。

サーバーつくった。その3 – SSHでログインするよ。

ただ、以下の手順で設定できますのでこのまま進めます。

新しいユーザーを作る

あたらしいユーザーは「pickles(ピクルス)」にします。適宜読み替えてください。また、推測されないユーザー名がいいですね。自分の名前やアカウント名は避けたほうがいいでしょう。

$ ssh root@xxx.xxx.xxx.xxx
# useradd pickles
# passwd pickles
New UNIX password:
Retype new UNIX password: 

もし間違えてしまった場合やユーザーを消したい場合は以下で削除できます。

# userdel pickles

作成したユーザーの権限を替えます。wheelグループに「pickles」を追加しましょう。

# usermod -G wheel pickles

以下を実行して「wheel:x:10:root,pickles」と書いてある行があればOKです。

# cat /etc/group

wheelグループ以外のユーザーはrootになれないように設定します。

# vi /etc/pam.d/su

#auth       required     pam_wheel.so use_uid // と書いてある行をさがす
auth       required     pam_wheel.so use_uid // 先頭の「#」を削除します

これで作成したユーザーのみがrootになれるようになりました。
SSHから抜け(Terminalを終了)、再度作成したユーザーでログインしてみます。
(この時きかれるパスワードはpicklesのパスワードとなります。)

$ ssh pickles@xxx.xxx.xxx.xxx

今ログインしているユーザーがだれか確かめます。

$ whoami
pickles

次にrootユーザーになれるか試してみます。このとき聞かれるパスワードはルートのパスワードとなります。

$ su -

ルートになったか確認します。と、その前に$が#に変わっていることに気が付きませんか?
#はルートユーザーであるということを示します。一応確認します。

# whoami
root

rootユーザーを終了し、picklesユーザーに戻ります。

# exit
作成したユーザーに認証鍵を登録する

これではパスワードログインのできるユーザーが増えてしまっただけなので、次にすすみます。
次は認証鍵とよばれるものを設定していきます。

認証鍵がなんなのかということはかわいいイラスト付きのこのブログを読んでみてください。
小悪魔女子大生のサーバエンジニア日記 » Blog Archive » 公開鍵暗号方式によるユーザー認証のしくみ

まずアクセス元するパソコンで鍵を作ります。
ボクはMacなのでMacでの説明となります。

その前に、既に鍵が作られていないかチェックします。

$ ls ~/.ssh/

ここにid_rsa.pubというファイルがある場合は以下をスキップしてください。
ない人のみ以下を進めてください。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usako/.ssh/id_rsa): // 空Enter
Enter passphrase (empty for no passphrase): // 空Enter
Enter same passphrase again: // 空Enter

これで認証鍵が設定されました。passphraseを設定しても構いません。もし設定する場合は8文字以上の大文字小文字数字を混ぜたものにしたほうがいいそうです。ただ、運用上パスワードがたくさんできてしまいヒューマンエラーが起きてしまうことやpassphraseがあまり意味を成さないことを考えるとそのまま空Enterでも問題ありません。

次にこれをサーバーに転送します。

$ scp ~/.ssh/id_rsa.pub >> pickles@xxx.xxx.xxx.xxx:pickles.pub

SSHログインして、転送された鍵を登録します。注意するのはルートユーザーではなくpicklesでの作業となります。

$ ssh pickles@xxx.xxx.xxx.xxx
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ cat pickles.pub >> ~/.ssh/authorized_keys2
$ mv pickles.pub
$ cd ~/.ssh
$ chmod 600 authorized_keys2
ルートユーザーではログインできないようにする

SSHのコンフィグを行います。以下はまとめて設定できます。
ルートユーザーになり、コンフィグファイルを開きます。

$ su -
# vi /etc/sshd_config

rootでのSSHログインをOFFにします。

Before:

#PermitRootLogin yes

After:

PermitRootLogin no
パスワードではログインできないようにする

パスワードでのログインを無効にする。

Before:

#PasswordAuthentication yes

After:

PasswordAuthentication no

空パスワードでのログインを無効にする

Before:

#PermitEmptyPasswords no

After:

 PermitEmptyPasswords no
認証鍵でログインできるようにする

これはデフォルトでONになっているので何も設定しないでもOKです。
もし以下のようになっていたらyesまたはコメントアウトしてください。

Before:

PubkeyAuthentication no

After:

PubkeyAuthentication yes

または

#PubkeyAuthentication yes // 一応デフォルト値でコメントアウトする

最後に上の方にもどりログ出力のレベルを替えておきます。

Before:

#SyslogFacility AUTH

After:

SyslogFacility AUTHPRIV

以上でSSHの設定は終わりです。

CentOS初期設定 – その他の設定

その他やっておくといいことです。

HOSTNAME= の内容をFQDNに書き換える。

サーバーインスタンスを作る際にいれた名前がFQDNで設定していると思うので設定されていると思います。

# vi /etc/sysconfig/network
HOSTNAME=www.example.com

サーバのグローバルIPアドレスに対応する行のホスト名をFQDNに書き換える

これも設定されていると思います。

# vi /etc/hosts
127.0.0.1     localhost localhost.localdomain
xxx.xxx.xxx.xxx     www.example.com

ロケールの変更

日本にする場合は以下です。

# vi /etc/sysconfig/i18n
LANG="ja_JP.utf-8"

タイムゾーンの変更

サーバー時間を日本にする場合は以下です。

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# vi /etc/sysconfig/clock
ZONE="Asia/Tokyo"

ロケーションやタイムゾーンに関してはあくまでサーバーの設定ですので、アプリケーションでのロケーションやタイムゾーンはアプリ側できちんと設定、実装するようにしてください。

時刻同期の設定も行ないます。

# yum install ntp
# /sbin/chkconfig ntpd on
# /etc/init.d/ntpd start

参考文献
Rackspaceで借りたCentOSサーバで最初にする設定 | maeda.log

再起動する

以上でサーバーのコンフィグが終わりましたので再起動しましょう。
またこれから管理画面での作業となります。

管理画面左メニューより Cloud Servers に入ると先程作成したサーバーインスタンスが表示されています。これをクリックします。

以下のような画面になりますので、Rebootをクリックします。程なく再起動されます。

Rackspace 管理画面 サーバーインスタンス

ちなみにSSHからも再起動できます。

# reboot

バックアップをとる

再起動したら、先程の画面のタブよりImagesを選択します。以下のような画面が現れます。

「Daily Backup Window (GMT):」「Weekly Backup Window:」からバックアップの周期を選択できます。
Weeklyで水曜日のバックアップにしました。一応想定するユーザーが一番少なそうな日です。

まとめ

以上、とても長くなりましたがRackspaceの初期設定が完了しました。最後まで読んでくれてありがとうございます。
ここまでの設定はCentOSでのものとなりました。途中にも書きましたがREHLやFedoraも同様に設定できますし、サーバー用途としては一番使われているディストリビューションです。

またRackspaceに限らず、サーバーを運営する際のSSHの設定は細かく説明したつもりですので他のサービス、サーバーをセットアップする際も参考にしてみてください。

Rackspace!! (0) – Rackspace Cloud Serversとは?

例えば個人でWebサービスをつくろうと思ったとき、「もしも」「仮に」ユーザーが増えたらどうしようなんて考えたことないですか?
HOKYPOKYは現在Dreamhostでホスティングしていて結構なスペックだったりするから不満はないのだけどそれも個人サイトだからという話。Webサービスがある程度大きくなったとしたら引越しが必要になってしまいます。
よーし、お父さん自宅サーバー作っちゃうぞー!(独身)っていうのも悪くないですが、家の回線にユーザーがアクセスしにくるなんて考えるとそれもそれで大変そう。しかもサーバーのメンテナンスとかに悩まされたくないですよね。専用スタッフを雇ったりするお金はありません。
理想でいえば小規模からはじめられて、簡単にサーバーを大きくできること。

そこでクラウドです!!

「興味ないね」

いやいやそのクラウドじゃないです。(定番ネタ)

クラウドホスティングサーバーとは?種類と特性

クラウドが何かというところは割愛しますが、クラウドホスティングサーバーの有名どころでは、Google App Engine (以下GAE)とAmazon EC2Microsoft Windows Azureなんかがあります。

GAEは、無料からはじめられるクラウドです。
PaaSと呼ばれる形式で、既にシステムが構築されている中で自分のアプリケーションを置くことができます。そして使えるプログラムがPythonとJava。Javaが使えるのでJRubyやScalaなども使うことができます。たとえばJRubyではRailsをつかうことができますが、JRubyとGAE(PaaS)による制限が発生します。自由なレールの上に石ころがいっぱい転がっている感じ。思わぬ事故が発生するかもしれないし、全部の石をどけるのも億劫ですし、なにより線路の上に石ころが転がっていますから遅いです。条件があえばかなり魅力的なクラウドとなっています。

ならばAmazon EC2だ!
Amazon EC2はIaaSと呼ばれる形式で、言ってしまえば仮想専用サーバーなので自分で自由に環境を構築することができるのでオススメではありますが、一番下のプランでもちょっとお高い。さらに下のプランが32bitで上のプランが64bitとなっていたりで、スケールアップしていく際にここが障害になるかもしれません。
ドキュメントも出揃ってきているのである程度予算が確保されているのであればEC2にしていれば問題はないでしょう。

Microsoft Windows Azureは詳しく調べていませんが、Amazon EC2の方が評判はいいみたいです。
後発なのでこれからが注目でもはあります。

Rackspace Cloud Servers

長くなりましたがAmazon EC2はちょっと高いと感じる方に、RackspaceCloud Serversをオススメします。
念を押して言いたいのですが、安いからしょぼいサーバーというわけではありません!
RackspaceはAmazon EC2と同じくIaaS形式で、TumblrGithubをホスティングしているという実績もあり(Tumblrは噂)、CPU時間が$0.015/h、11$/月という安さからはじめられる。メモリは256MBと小さいですが大きくすることも可能です。
レンタルサーバーレベルから巨大なサーバーにまでできるサーバーそのものなんです。

IaaSですから愛しのCentOSを入れることもできますし、WindowsServerやUbuntu、RedHat Linux、Gentooなどから選ぶことも可能です。仮想専用サーバーなのでroot権限はもちろん、カスタマイズは自由自在です。一昔前では個人で専用サーバーを借りるなんて勇気のいることでしたがかなり気楽なものです。

Rackspace Cloud Files

Amazon EC2に対するAmazon S3と同じくRackspace Cloud Filesというストレージサーバーもあります。
これもS3と同じような価格でRackspace Cloud Serversとの親和性も高いので画像ファイルやムービーなどを扱う場合はこちらを使うのがいいかもしれません。アプリケーションサーバーとファイルサーバーを分けることで価格的に効率のよいサービスが提供できます。
詳しいことはここでは書きませんが、データの転送にも価格がかかり、S3の方が若干安い。Amazon EC2とAmazon S3、Rackspace Cloud ServersとRackspace Cloud Filesはそれぞれ別サービスなので、ストレージサーバーのみをAmazon S3にするということも考えられます。

Rackspace Cloud Serversを借りてみた

さっそく借りてみました。フォームから入力していくだけで申請は終わり、、、、ませんでした。
なんとアメリカから本人確認の電話が掛かってきます。しかも英語です。日本語通じません。
すごく焦ったのですが、海外生活していたことを思い出し「YesYes!!」「OKOK!!」でなんとかその場をクリア。英語出来る人いるのであれば手伝ってもらったほうがいいですよ。
丁度、Appleの基調講演を見ながら申請したのですが、Jobsのプレゼンは英語があまりわからない自分でも聞き取れるのがすごい。電話を切ったとき英語の基調講演を聞きながら英語の電話をしていた自分に思わず笑ってしまいました :)

まとめ

今回はクラウドホスティングサーバーについてと、個人利用レベルからでも始められるRackspace Cloud Serversの紹介させていただきました。
次は実際のセットアップについて書いていきたいとおもいます。

MySQLを5.1にアップデート #mysql50# って何!?

少々煽り気味なタイトルで失礼します。

先日Gitの記事を書いて、自分のサーバーのGitのバージョンが古かったことが結局気になってバージョンアップをしたんですね。

たまにしかアップデートしないサーバーなのでPHPとかMySQLもアップデートしようと考えました。使っているOSはCentOS 5.5です。デフォルトで提供されているリポジトリでのMySQLの最新は5.0.x、PHPも5.1.x。

さすが最愛のCentOSさんです。ちーっす。

yumのリポジトリでそこそこ最新のPHPやMySQLを提供しているのがLes RPM de Remiというリポジトリらしいです。(Utter Ramblingsというのもある。)

では早速yumにリポジトリを追加しましょう。

$ sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

これでremiが使えるようになります。/etc/yum.conf.d/remi.repoを編集し、remiを有効化したりするのですが、今回はそうしません。一時的に有効にする方法でインストールしていきます。
実はこれからMySQLをアップグレードするのですがコンフリクトしてしまいます。一度MySQLを削除します。

$ sudo yum remove mysql

インストールします。ここで先程のremiを一時的に有効にするため –enablerepo=remi オプションをつけます。
これで無闇に最新バージョンを入れるわけではなく基本は(古臭くて)堅実なCentOSのリポジトリを使うことができます。

$ sudo yum --enablerepo=remi install mysql mysql-server

MySQLがアップグレードされました。

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.50, for redhat-linux-gnu (x86_64) using readline 5.1

しかしこれで安心してはいけません。

$ mysql -u USERNAME -p
mysql > show databases;

+---------------------------------+
| Database                        |
+---------------------------------+
| information_schema              |
| #mysql50#com_nijitaro-wordpress |
| mysql                           |
+---------------------------------+
...

com_nijitaro-wordpressというnijitaro.comブログ(ほぼ使ってない)用DBがあるのですが頭に#mysql50#がついています。
MySQL5.1で有効でない文字が使われていてどうのこうのというわけでバージョンアップするとDBの頭につくことがあるようです。DBのデータも5.1用にアップデートしなくてはなりません。

mysql_updateを実行すればいいようです。

$ mysql_update -u USERNAME -p
$ mysql -u USERNAME -p
mysql> show databases;
+------------------------+
| Database               |
+------------------------+
| information_schema     |
| com_nijitaro-wordpress |
| mysql                  |
+------------------------+
...

ばっちりですね。

PHPも5.3にアップデートします。
タイトルとは関係ないのですがPHP5.3にするついでにMySQLも上げようとしてた時にはまったのでした。
こちらはremiリポジトリを使って簡単にインストールできました。

$ sudo yum --enablerepo=remi update php

これで関係するphp-mysqlなども一度にアップグレードされます。

WordPressなどのプロダクトは、比較的古いシステムでもインストールできるようになっていますが、Webサービスを構築するフレームワークなどではシステム効率、高速化、記述の簡略化などを優先してかバッサリと古いバージョンを切り捨てることもあったりします。
急いでバージョンを上げる必要はないように感じますが、攻めのWebサービスを構築する場合などはポータビリティは後回しにガンガン最新のバージョンで作っていくというのがトレンド(?)のようです。

とはいえ、ボクみたいに入り口で引っかかって悠長にブログなんか書いちゃって肝心のプログラムが全くすすまないなんてことにならないように!!