序章

Ruby on Rails開発者の場合、WebアプリをホストするためのWebサーバーが必要になる可能性があります。 このチュートリアルでは、 PusionPassengerをRails対応のWebサーバーとして使用する方法を説明します。 Passengerはインストール、構成、保守が簡単で、NginxまたはApacheで使用できます。 このチュートリアルでは、Ubuntu14.04にNginxを使用してPassengerをインストールします。

Railsアプリをデプロイする別の方法は、この 1クリックRailsインストールを使用することです。これは、複数のリクエストを同時に処理できるHTTPサーバーであるUnicornでNginxを使用します。

このチュートリアルを終了すると、Passenger / Nginx WebサーバーにテストRailsアプリケーションがデプロイされ、ドメインまたはIPアドレスを介してアクセスできるようになります。

ステップ1—ドロップレットを作成する

新しいUbuntu14.04ドロップレットを作成します。 小規模なサイトの場合は、512MBのプランを採用するだけで十分です。

メモリ消費量が少ないため、32ビットUbuntuイメージを選択することをお勧めします(64ビットプログラムは、32ビットプログラムよりも約50%多くのメモリを使用します)。 ただし、より大きなマシンが必要な場合、または4 GBを超えるRAMにアップグレードする可能性がある場合は、64ビットバージョンを選択する必要があります。

ステップ2—Sudoユーザーを追加する

ドロップレットが作成された後、追加のシステム管理作業が必要です。 システムユーザーを作成し、サーバーを保護する必要があります。

サーバーの初期設定の記事に従ってください。

このチュートリアルでは、sudo権限を持つ基本ユーザーを作成する必要があります。 この例では、railsユーザーを使用します。 ユーザーに別の名前がある場合は、次の手順で正しいパスを使用していることを確認してください。

ステップ3(オプション)—ドメインを設定する

サイトが確実に表示されるようにするには、ドメイン名が新しいサーバーを指すようにDNSレコードを設定する必要があります。 リンクをたどると、ホスト名の設定の詳細を確認できます。

ただし、IPアドレスを介してサイトにアクセスできるため、この手順はオプションです。

ステップ4—Rubyをインストールする

Rubyをソースから手動でインストールします。

他の作業を行う前に、更新を実行して、インストールするすべてのパッケージが最新であることを確認する必要があります。

sudo apt-get update

次に、いくつかの依存関係をインストールします。 これにより、インストールが可能な限りスムーズになります。

sudo apt-get install build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3

Rubyソースファイル用の一時フォルダを作成します。

mkdir ~/ruby

新しいフォルダに移動します。

cd ~/ruby

最新の安定したRubyソースコードをダウンロードします。 この記事の執筆時点では、これはバージョン2.1.3です。 現在の最新バージョンは、 DownloadRubyのWebサイトから入手できます。 新しいバージョンが利用可能な場合は、次のコマンドでリンクを置き換える必要があります。

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz

ダウンロードしたファイルを解凍します。

tar -xzf ruby-2.1.3.tar.gz

抽出したディレクトリを選択します。

cd ruby-2.1.3

configureスクリプトを実行します。 これは、依存関係をチェックし、新しい Makefile を作成するため、しばらく時間がかかります。これには、コードをコンパイルするために実行する必要のある手順が含まれます。

./configure

make ユーティリティを実行します。このユーティリティは、Makefileを使用して実行可能プログラムをビルドします。 この手順には少し時間がかかる場合があります。

make

ここで、installパラメーターを使用して同じコマンドを実行します。 コンパイルされたバイナリを/usr/local/binフォルダにコピーしようとします。 この手順では、このディレクトリに書き込むためにルートアクセスが必要です。 また、少し時間がかかります。

sudo make install

これで、Rubyがシステムにインストールされます。 次のコマンドで確認できます。これにより、Rubyバージョンが出力されます。

ruby -v

最後に、一時フォルダを削除できます。

rm -rf ~/ruby

ステップ5—PassengerとNginxをインストールします

過去にPassengerをインストールするための推奨される方法は、RubyGems(passenger-install-nginx-module)を介した一般的なインストールを使用することでした。

ただし、これで、使用するAdvanced Packaging Tool(APT)を使用してUbuntuにPassengerをインストールできます。 このように、Nginxを使用したPassengerのインストールと、さらに重要なことに、更新プロセスは非常に簡単です。

まず、PGPキーをインストールします。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

APTソースファイルを作成します(sudo権限が必要です)。

sudo nano /etc/apt/sources.list.d/passenger.list

そして、ファイルに次の行を挿入します。

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

CTRL + x を押して終了し、 y と入力してファイルを保存し、ENTERを押してファイルの場所を確認します。

このファイルの所有者と権限を変更します。

sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

APTキャッシュを更新します。

sudo apt-get update

最後に、Nginxを使用してPassengerをインストールします。

sudo apt-get install nginx-extras passenger

この手順により、Rubyバージョンが古いバージョンに上書きされます。 これを解決するには、誤ったRubyの場所を削除し、正しいRubyバイナリファイルへの新しいシンボリックリンクを作成します。

sudo rm /usr/bin/ruby
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

ステップ6—Webサーバーをセットアップする

Nginx構成ファイルを開きます。

sudo nano /etc/nginx/nginx.conf

httpブロックで次の行を見つけます。

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

両方のコメントを解除します。 passenger_ruby行のパスを更新します。 これらは次のようになります。

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;

ファイルを保存して終了します。

ステップ7—デプロイ

この時点で、Railsアプリケーションの準備ができていれば、独自のRailsアプリケーションをデプロイできます。 既存のアプリをデプロイする場合は、プロジェクトをサーバーにアップロードして、/etc/nginx/sites-available/defaultの手順にスキップできます。

このチュートリアルでは、Droplet上に直接新しいRailsアプリを作成します。 新しいアプリを作成するには、railsgemが必要になります。

ユーザーのホームディレクトリに移動します(そうしないと、エラーNo such file or directory - getcwdが発生します)–

cd ~

rails gemをインストールします(より速くインストールするための追加のドキュメントはありません)。 これにはまだ数分かかります。

sudo gem install --no-rdoc --no-ri rails

これで、新しいアプリを作成できます。 この例では、testappという名前を使用します。 別の名前を使用する場合は、正しいパスを使用していることを確認してください。 後で手動で実行するため、Bundlerのインストールはスキップします。

rails new testapp --skip-bundle

ディレクトリを入力します。

cd testapp

次に、JavaScript実行環境をインストールする必要があります。 therubyracerジェムとしてインストールできます。 インストールするには、Gemfileを開きます。

nano Gemfile

次の行を見つけます。

# gem 'therubyracer',  platforms: :ruby

コメントを外します。

gem 'therubyracer',  platforms: :ruby

ファイルを保存し、Bundlerを実行します。

bundle install

デフォルトのNginx構成を無効にする必要があります。 Nginx構成ファイルを開きます。

sudo nano /etc/nginx/sites-available/default

行を見つける:

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

次のようにコメントアウトします。

# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;

ファイルを保存します。

次に、アプリのNginx構成ファイルを作成します。

sudo nano /etc/nginx/sites-available/testapp

次のserverブロックを追加します。 設定について以下に説明します。

server {
  listen 80 default_server;
  server_name www.mydomain.com;
  passenger_enabled on;
  passenger_app_env development;
  root /home/rails/testapp/public;
}

このファイルでは、ポート80でのリスニングを有効にし、ドメイン名を設定し、Passengerを有効にして、ルートを新しいプロジェクトのpublicディレクトリに設定します。 root 行は、Railsアプリのアップロード場所に一致するように編集する行です。

ドメインをこのアプリに割り当てたくない場合は、 server_name 行をスキップするか、IPアドレスを使用できます。

セットアップをテストするために、Rails Welcomeaboardページを表示します。 ただし、これは、アプリケーションが開発環境で開始された場合にのみ機能します。 Passengerはデフォルトで本番環境でアプリケーションを起動するため、passenger_app_envオプションでこれを変更する必要があります。 アプリを本番環境で使用する準備ができている場合は、この設定を省略してください。

ファイルを保存します( CTRL + x y ENTER )。

そのためのシンボリックリンクを作成します。

sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testapp

Nginxを再起動します:

sudo nginx -s reload

これで、アプリのWebサイトにアクセスできるようになります。 ドロップレットのドメインまたはIPアドレスに移動します。

http://droplet_ip_address

そして結果を確認します:

Railsテストアプリがサーバー上でライブで表示されるはずです。

ステップ8—定期的に更新する

Rubyを更新するには、このチュートリアルのステップ4に示すように、最新バージョンをコンパイルする必要があります。

NginxでPassengerを更新するには、基本的なシステム更新を実行する必要があります。

sudo apt-get update && sudo apt-get upgrade

ただし、新しいシステムRubyバージョンが利用可能な場合は、Ruby(ソースからインストール)が上書きされる可能性があります。 このため、既存のバージョンのRubyを削除し、Rubyバイナリファイルへの新しいシンボリックリンクを作成するために、コマンドを再実行する必要がある場合があります。 これらは、このチュートリアルのステップ5の最後にリストされています。

更新プロセスの後、Webサーバーを再起動する必要があります。

sudo service nginx restart