VPSとRailsでサービス開発
先週の3連休、私は家にひきこもって酒を飲みながらemacsの誰得的な記事を書きつつVPSで遊んでいました。
そこで作ったtwitterを利用したサービスが出来るまでの流れをざっくり公開しようかと思います。
作ったサービスは http://stkr.dip.jp/maps 上で公開してます。
twitter idを入力するとI'm atアプリ等でtweetした文書を取得し、だいたいの場所をGoogle map上にプロットします。
このくらいであれば1日もあれば一から作れます(酒があれば)
VPSの登録
世の中には様々なVPSサービスがありますが、今回使用したのはServersMan@VPSというサービスです。
このサービスは月額490円でメモリ256MB(MAX768MB)でHDDが10GBほどのリソースが使え、
root権限もあるのである程度遊ぶには十分な環境と言えます。
このサービスが出た直後は登録するのに1ヶ月待ちとかだったのですが、今なら登録直後に使用出来るのもいいですね。
http://dream.jp/vps/index.html
へ行きお好きなプランを選んで登録してみてください。
登録したメールアドレスに環境情報が送られてきます。
開発環境の設定
rootユーザーで作業するのは何かと危険なのでまずはユーザーを作りましょう。
% ssh -P 3843 root@xx.xx.xx.xx
でログインし、useraddコマンドでユーザーを作成します。
作成したユーザーを以下「user」とします。
次にsshまわりの環境を整えます。
ServersManではsshのポートが標準の22から3843に変わっているので普通にログインしようとしたら上記のように打ち込む必要があるので非常に面倒です。
そこで ローカル(VPS上ではない)の~/.ssh/config ファイルに以下のような設定をします。
Host vps HostName xx.xx.xx.xx Port 3843 User user
HostNameはServerManから与えられた固定IPアドレス、Portがsshのポート番号で、UserがログインユーザーIDです。
この設定をしておくことで
% ssh vps
と打つだけで済むようになります。
emacsを使っている方はtrampというリモートサーバのファイルを編集出来る機能を設定しておきましょう。
% wget http://ftp.gnu.org/gnu/tramp/tramp-2.2.0.tar.gz % tar zxvf tramp-2.2.0.tar.gz % ./configure --with-contrib % make % sudo make install
.emacs.elに以下を追加
(require 'tramp) (setq tramp-shell-prompt-pattern "^.*[#$%>] *") (setq tramp-default-method "ssh")
設定終了後はemacs上で
C-x C-f /vps:
と入力しましょう。パスワードの入力をするとVPS上のファイルを編集出来るようになります。
Ruby on Railsのインストール&設定
ServerManでRailsが動くようになるまで以下のアプリ群をインストールしてください。
以下の作業はすべてrootで行います。
Ruby関連
# yum install readline-devel openssl-devel zlib-devel # wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p299.tar.gz # tar xvzf ruby-1.8.7-p299.tar.gz # cd ruby-1.8.7-p299 # ./configure --prefix=/opt/ruby-1.8.7-p299 # make # make install # ln -snf /opt/ruby-1.8.7-p299/bin/ruby /usr/local/bin/ruby # ln -snf /opt/ruby-1.8.7-p299/bin/rake /usr/local/bin/rake # ln -snf /opt/ruby-1.8.7-p299/bin/irb /usr/local/bin/irb
RubyGems関連
# wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz # tar xvzf rubygems-1.3.7.tgz # cd rubygems-1.3.7 # ruby setup.rb # ln -snf /opt/ruby-1.8.7-p299/bin/gem /usr/local/bin/gem
sqlite関連
# wget http://www.sqlite.org/sqlite-autoconf-3070500.tar.gz # tar xvzf sqlite-autoconf-3070500.tar.gz # cd sqlite-autoconf-3070500 # ./configure # make # make install # gem install sqlite3-ruby mysql dbi dbd-mysql
passenger関連 (railsをapache経由で使用するため)
# gem install passenger # /opt/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/passenger-3.0.5/bin/passenger-install-apache2-module
apacheの設定
ServerManはデフォルトでApacheが入っているのでconfの設定だけをします。
/etc/httpd/conf/httpd.conf の以下の行のコメントアウトを外します。
NameVirtualHost *:80
起動ユーザーとグループはデフォルトだとdaemonですが、適切なユーザーに変えておきます。
User user Group user
/etc/httpd/conf.d/stokker.confファイルを以下のように作成します。
DocumentRoot /var/www/html/stokker/public ServerName stkr.dip.jp RailsEnv development AllowOverride none Options -MultiViews Order allow,deny Allow from all
DocumentRootはrailsでプロジェクトを作った際に出来るpublicディレクトリを指定します。
/etc/httpd/conf.d/passenger.confファイルを以下のように作成します。
LoadModule passenger_module /opt/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/passenger-3.0.5/ext/apache2/mod_passenger.so PassengerRoot /opt/ruby-1.8.7-p299/lib/ruby/gems/1.8/gems/passenger-3.0.5 PassengerRuby /opt/ruby-1.8.7-p299/bin/ruby
apacheを再起動します。
でrailsが生成した画面が表示されている事を確認してください。
Google maps api
http://code.google.com/intl/ja/apis/maps/signup.html
ここでgoogle maps apiを使用するドメインを登録しKEYを取得します。
取得したKEYは以下のように使用します。
<script src="http://maps.google.com/maps?file=api&v=2& sensor=true&key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" type="text/javascript"> </script>
マップは
<div id="map_canvas" style="width: 728px; height: 400px"></div>
というdiv要素上に表示されます。
twitter4r
twitterの発言を取得するのにtwitter4rを使用しました。
% sudo gem install twitter4r
twitter4rをインストールしたら使用するrubyのファイルで以下のように宣言しておきます。
require "rubygems" gem "twitter4r" require "twitter"
公開発言を取得するだけであれば以下のような簡易なコードで取得出来ます。
@MAX_COUNT = 500 @twitterid = ... last_month = Time.now - 60*60*24*30 tw_client = Twitter::Client.new tw_client.timeline_for(:user, :id => @twitterid, :count => @MAX_COUNT).each do |status| created = status.created_at if created > last_month then ... end end
その他
ロゴ
twitter風のロゴは http://www.twitlogo.com/ で作成しました。