快適!! お名前VPS(KVM)にUbuntu12.04をインストールし、Nginx と Unicorn で Rails アプリを動かす

お名前 VPS (KVM) 2GB プランを契約したので、Ubuntu 12.04 LTS をインストールしてみました。
ついでに Rails が動く環境を作るところまでやったので、その過程を共有します。

初期セットアップ

お名前 VPS を契約して最初にコンパネにアクセスすると CentOS 6.2 がデフォルトで、初期パスワードの入力を求められます。とりあえず最初は CentOS をインストールしないといけないみたいです。おとなしくパスワードを入れて次に進みます。
SSH-Key の選択も出てきますが、デフォルトのままにしました。

Ubuntu 12.04 LTS をインストールする

CentOS のインストールが終わったら、コンパネから「OS再インストール」タブを選択し、Ubuntu 12.04 LTS (64bit) を選択します。
その他の設定はお好みで。今回は以下のようにしました。

  • Ubuntu 12.04 LTS 64bit
  • Virtio: ON
  • Disk: 200GB + 0GB

コンソール画面

コンソール画面でインストール設定を行います。以下のように設定しました。

  • Install
  • Japanese (English とかのほうがいいかも。文字化け対策に。)
  • 地域: 日本
  • キーボード
    • Japan
  • ネットワークが自動設定される
  • ホスト名はデフォルト
  • Ubuntu アーカイブのミラー
    • 日本 (jp.archive.ubuntu.com)
  • HTTP Proxy なし
  • ユーザーアカウント
    • Full Name: お好みで。
    • Account Name: お好みで。便宜上 user とする
  • パスワード: ****
  • Home ディレクトリの暗号化: NO
  • Timezone: Asia/Tokyo
  • ディスクのパーティショニング
    • ディスク全体を使う
    • 仮想ディスク1 を選択
    • 既存のデータを削除: YES
    • ディスクに変更を書き込む: YES
  • インストールが始まります
  • アップデートの設定
    • 自動的にアップデートしない (Default)
  • ソフトウェアの選択
    • デフォルトのまま (すべて選択しない)
  • GRUB ブートローダのインストール
    • YES
  • システム時間を UTC にするかどうか
    • いいえ
  • インストール完了
    • コンパネ画面上部の「取り出す」ボタンでインストールディスクを排出しておく


インストールはこんなかんじです。コンパネのコンソールだと何かと不便なので、ssh 接続できるように設定します。

$ sudo aptitude install ssh
$ sudo service ssh start

(公開鍵認証とかにしたほうがいいと思うけど割愛。)

環境を整える

ここから Mac の Terminal で作業していきます。
まずはアップデート。インストール時にアップデートが入ってると思うけど一応。

$ ssh user@hostname (サーバーに接続)
$ sudo aptitude update
$ sudo aptitude upgrade

Vim が入ってなかったのでインストール

$ sudo aptitude install vim
ファイアーウィールの設定

とりあえず ssh のみ許可。

$ sudo ufw status
状態: disabled
$ sudo ufw enable
$ sudo ufw default REJECT
$ sudo ufw allow 22/tcp

パッケージにインストールされているものから選ぶ事もできる。

$ sudo ufw app list
OpenSSH

$ sudo ufw allow "OpenSSH"
ビルド環境

Ruby などのビルドに必要なパッケージをインストールします。

$ sudo aptitude install build-essential libreadline-dev libssl-dev zlib1g-dev libssl-dev libssl1.0.0 libsqlite3-dev  git-core curl
RVM

Ruby 環境は RVM で整えます。

$ curl -L https://get.rvm.io | bash -s stable --ruby
$ source /home/user/.rvm/scripts/rvm
$ echo "source /home/user/.rvm/scripts/rvm" >> .bash_profile
RailsUnicorn

とりあえず Rails あたりをインストール。

$ gem install rails unicorn

Gemfile にも適切に gem を書き込んでおく。

Rails アプリを立ち上げる

Rails アプリのディレクトリに移動して以下のように設定する

$ bundle install
$ bundle exec rake db:setup
$ bundle exec rake assets:precompile
$ bundle exec unicorn_rails -E production -D

こうすると 127.0.0.1:8080 でサーバーが起動します。

Nginx

フロントには nginx を使うので、nginx をさくっとインストールします。

$ sudo aptitude install nginx
$ sudo ufw allow "Nginx Full"
$ sudo vim /etc/nginx/conf.d/backend.conf
upstream backend {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name _;

    location / {
        proxy_set_header HOST $host;
       	proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
        proxy_pass http://backend;
        proxy_redirect off;
    }
}

今回はログとか asset の設定をしてないので、そのへんをちゃんと設定する。

おわり

かなり長くなってしまったので、端折ってる部分もありますが、だいたいこんな感じでした。
安くて高性能な VPS が簡単に手に入るようになったので遊び倒したいです。

オマケ

Pythonbrew をこっそりインストール

上記の「ビルド環境」でインストールしたもの以外にも必要なパッケージがあるので、それらをインストールしてから Pythonbrew をインストールします。

$ sudo aptitude install libncurses-dev libgdbm-dev tk-dev libdb4.8-dev
$ curl -kL http://xrl.us/pythonbrewinstall | bash
$ echo "[[ -s $HOME/.pythonbrew/etc/bashrc ]] && source $HOME/.pythonbrew/etc/bashrc" >> .bash_profile
$ source ~/.pythonbrew/etc/bashrc
$ pybrew install 2.7.3
$ pybrew switch 2.7.3

build.log に以下のようなメッセージが出ているけど、おそらく古すぎて使うことがないので無視。

Python build finished, but the necessary bits to build these modules were not found:
bsddb185 dl imageop
sunaudiodev

これで Python でもたっぷり遊べます!