2011年2月12日

Amazon EC2 の Ubuntu に Diaspora をインストール

秋ごろに Windows, Mac OSX, Ubuntu のそれぞれに Diaspora をインストールしました。 そこから随分とコードベースに変更が加えられて、バックエンドも MongoDB から MySQL に変更されましたので、インストールをやり直します。 それぞれのコードを更新してミドルウェアを追加すれば良いのかもしれませんが、ちょっと視点を変えて、Amazon EC2 にインストールしてみます。 EC2 の基本的な設定は Amazon EC2 を使ってみる で終わっている、ということで。

過去記事:

なお、最近のコードベースでは Windows をサポートしていないようです。 作業中らしいですが、どうなることやら。。

手順

公式 Wiki (Installing and Running Diaspora) に Mac OSX、Ubuntu、CentOS に関して記述されていますので、それに従います。 冒頭に、ややこしいけど本当にやるの?という注意書きがあるのが現状を的確に表しています。 おおまかな手順は以前と同じですが、大きな変更点はミドルウェアの追加で、MySQL と Redis をインストールします。 1 と 7 は EC2 を使う場合に特有のものです。

  1. Amazon EC2 で Ubuntu を起動する。
  2. Ruby と RubyGems、Bundler を準備 / 確認する。
  3. ImageMagick、OpenSSL、Git などのツールをインストールする。
  4. MySQL と Redis をインストールして起動する。
  5. Diaspora のソースを取得して、Bundler を使って依存ライブラリを解決する。
  6. サンプルユーザーのデータを投入して、サーバを起動する。
  7. SSH で手元の環境にトンネルを掘り、実際にログインしてみる。

現状を追ってはいませんが、一時期はサーバ間のフェデレーションに XMPP を使おうか?という話題もありました。 ミドルウェアが増えると大変そうですね。。

EC2 インスタンスの起動とツールのインストール

普通の AMI ではなく、"Community AMIs" から Ubuntu 10.10 Server を探してインストールします。 ファイアーウォールの設定は SSH の22番ポートを開放させます。 SSH で接続するユーザーは "root" ではなく "ubuntu" を使います。 Ubuntu の選択肢はバージョン (10.04, 10.10) とデスクトップ版かサーバ版かの組み合わせがあり、それぞれで apt-get に微妙な違いがありますので、AMI の選択は意外と重要です。

Ruby 関係のパッケージが入っていないことを確認します。

$ ruby -v; rake -v; gem -v
The program 'ruby' is currently not installed.  You can install it by typing:
sudo apt-get install ruby
The program 'rake' is currently not installed.  You can install it by typing:
sudo apt-get install rake
The program 'gem' can be found in the following packages:
 * rubygems1.8
 * rubygems1.9.1
Try: sudo apt-get install <selected package>

ビルドツールとRuby をインストールします。

$ sudo apt-get update
$ sudo apt-get install build-essential libxslt1.1 libxslt1-dev libxml2
(snip)

$ sudo apt-get install ruby-full
(snip)

$ ruby -v
ruby 1.8.7 (2010-06-23 patchlevel 299) [x86_64-linux]

AMI によっては Universe を有効にする必要があるかもしれません。 困ったら /etc/apt/sources.list を確認してください。

続いて RubyGems と Bundler をインストールします。 Wiki の順番とは前後しますが、なんとなくの流れ、ということで。 Ubuntu 10.04 ではレポジトリの追加が必要らしいです。10.10 では必要ありません。

$ sudo apt-get install rubygems
(snip)

$ gem -v
1.3.7

$ sudo gem install bundler
$ sudo gem install rake
$ ls /var/lib/gems/1.8/bin
bundle  rake

$ sudo ln -s /var/lib/gems/1.8/bin/bundle /usr/local/bin/bundle
$ sudo ln -s /var/lib/gems/1.8/bin/rake /usr/local/bin/rake
$ rake -v; bundle -v

その他のツールとして ImageMagick と OpenSSL のヘッダーファイルをインストールします。

$ sudo apt-get install imagemagick libmagickwand-dev
(snip)

$ sudo apt-get install libssl-dev
(snip)

最後に Git をインストールします。

$ sudo apt-get install git-core
(snip)

$ git --version
git version 1.7.1

これでツール関係は一区切りです。 次はデーモン関係をインストールします。

NOTE:

Java もインストールしておいた方が良いでしょう。 ことあるごとに "Jammit Warning: Asset compression disabled -- Java unavailable." という 警告が出力されます。

ミドルウェアのインストール

MySQL と Redis をインストールします。

MySQL の Ruby バインディングもインストールします。 インストール中に MySQL の root ユーザのパスワードを設定します。

$ sudo apt-get install mysql-server libmysqlclient-dev libmysql-ruby
(snip)

$ mysql -u root -p{YOUR-ROOT-PASSWORD}

Redis も apt-get で簡単にインストールできます。

$ sudo apt-get install redis-server
(snip)

$ ps aux |grep [r]edis
redis    17137  0.0  0.0   9876  1352 ?        Ss   08:49   0:00 /usr/bin/redis-server /etc/redis/redis.conf

Diaspora のセットアップ

Diaspora のソースコードと、依存するライブラリを取得します。 秋ごろは Object 数が 23000 強でしたので、二倍以上になっているようです。

$ mkdir workspace; cd workspace

$ git clone http://github.com/diaspora/diaspora.git
Initialized empty Git repository in /home/ubuntu/workspace/diaspora/.git/
remote: Counting objects: 50894, done.
remote: Compressing objects: 100% (15069/15069), done.
remote: Total 50894 (delta 37447), reused 47951 (delta 34941)
Receiving objects: 100% (50894/50894), 11.48 MiB | 2.16 MiB/s, done.
Resolving deltas: 100% (37447/37447), done.

次は、依存ライブラリを取り込みます。

$ cd diaspora

$ bundle install
(snip)

$ bundle show twitter
/home/ubuntu/.bundler/ruby/1.8/twitter-ef122bbb280e

これでサーバを起動できる状態になったはずですが、その前に設定ファイルを編集して、 データベースを作成します。データベースのユーザーとパスワードは環境に応じて変更します。

$ tree -L 1 config
config
├── app_config.yml.example
├── application.rb
├── assets.yml
├── boot.rb
├── cucumber.yml
├── database.yml.example
├── deploy
├── deploy_config.yml.example
├── deploy.rb
├── environment.rb
├── environments
├── initializers
├── langcodes_alias_map.yml
├── languages.yml
├── locales
├── oauth_keys.yml.example
├── redis.yml
├── routes.rb
├── selenium.yml
├── server.sh
└── thin.yml

$ cp config/app_config.yml.example config/app_config.yml
$ cp config/database.yml.example config/database.yml
$ vim config/app_config.yml
$ vim config/database.yml

$ bundle exec rake db:create
$ bundle exec rake db:migrate

Jammit の圧縮を使うときに Java もインストールされている方がよかったようです。 とはいえ、どこに影響があるのかよく分からないので放置しておきます。

これでようやく、Diaspora のサーバを起動させます。 thin が 3000 番ポートで HTTP を待ち受け、Websocket も8080番ポートで待ち受けるようになります。

$ ./script/server
Making first-time server initialization.
Sending QUIT signal to process 26140 ...
Jammit Warning: Asset compression disabled -- Java unavailable.
mkdir: created directory `log/thin/'
>> Using rack adapter
(in /home/ubuntu/workspace/diaspora)
Jammit Warning: Asset compression disabled -- Java unavailable.
Jammit Warning: Asset compression disabled -- Java unavailable.
Jammit Warning: Asset compression disabled -- Java unavailable.
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop
Websocket server started.

サンプルユーザを作成

データベースにサンプルユーザ Tom を作成します。 Tom の Username は tom で、Password は evankorth です。

$ rake db:seed:dev

自分でユーザを作成したい場合は db/seeds ディレクトリのファイルを編集するか、 db:first_userdb:add_user を使うようです。

SSH トンネリング

実際にテスト環境にログインしてみたいのですが、3000 番ポートは開放していません。 いちいちセキュリティグループを作成するのは煩雑ですので、SSH でトンネルを掘って解決します。

$ ssh -L3000:localhost:3000 ec2dev

手元のブラウザで http://localhost:3000 にアクセスするとトップページが表示されます。 先ほど作成した tom / evankorth でログインできます。

NOTE:

EC2 を使ってトンネルを掘る話は diaspora on aws cloud install... にもありますが、これは MongoDB を使っている時期なのでちょっと古いものになります。

Websocket の関係もありますので、トンネルをもう一本用意した方が良いでしょう。 とはいえ、まずはログインしてファイルをアップロードできれば良いのかな、と。

まとめ

Amazon EC2 で Ubuntu のインスタンスを起動させ、Diaspora をインストールしました。 SSH トンネルを利用して手元のマシンに窓口を作ることで、EC2 インスタンスをインターネット環境に公開しなくともポッドを利用できます。 プログラムの開発環境として使えるのはもちろんですが、ホームネットワークにも使えるかもしれません。 守秘義務もなく公開したいわけではないけれども、プライベートに管理したいデータ (たとえば家計簿や日記) を扱う場合には良いかもしれませんね。


なんかエラーが出てる。。

$ cat log/redis-console.log

*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 45
>>> 'logfile /var/log/diaspora/redis.log'
Can't open the log file: No such file or directory
コメントを投稿