CentOS6.5でNginxを使用してPassengerを使用してRailsアプリをデプロイする方法
ステータス:非推奨
この記事では、サポートされなくなったバージョンのCentOSについて説明します。 現在CentOS6を実行しているサーバーを運用している場合は、サポートされているバージョンのCentOSにアップグレードまたは移行することを強くお勧めします。
理由:
代わりに参照:このガイドは参照として役立つ場合がありますが、他のCentOSリリースでは機能しない場合があります。 可能な場合は、使用しているCentOSのバージョン用に作成されたガイドを使用することを強くお勧めします。
序章
特にコンピュータプログラミングの特定の分野に慣れていない場合は、課題が実際に終わることはありません。 この場合、私たちの主題はRailsと、RubyOnRailsベースのWebアプリケーションをオンラインにする方法です。これは可能な限り最も簡単で迅速な方法です。
パズルを解いてRubyプログラミング言語とRailsWebアプリケーション開発フレームワークを使用してアプリケーションの作業を開始した後、アプリケーションを世界中の人々と共有するときは、利用可能なすべての選択肢と混同される可能性があります。存在する可能性のある組み合わせの無限の量。
このDigitalOceanの記事では、最初から最後まで、堅実なRailsアプリケーションをデプロイする方法を紹介します(つまり、 オンラインで公開)安定性で有名な最新の利用可能なCentOSオペレーティングシステムを使用。 これは、そのシンプルさと優れた機能で知られるPhusion Passengerアプリケーションサーバーと、接続を処理および管理するために前面で実行されるNginxHTTPサーバーと組み合わせて使用されます。
注:このウォークスルーでは、提供されているリンクの内容を確認して読むことをお勧めします。 これらは、パフォーマンスやセキュリティなどの強化に役立ちます。
用語集
1. Webアプリケーションの展開、サーバーとその役割
- Phusion Passenger Application Server
- リバースプロキシとして実行されているNginxHTTPサーバー
2. デプロイメントサーバーの準備
- オペレーティングシステムの更新と準備
- Ruby環境とRailsのセットアップ
- サーバーアプリケーションのダウンロードとインストール
3. 展開のためのアプリケーションの準備
- サンプルアプリケーションの作成/ソースコードのアップロード
- Nginx管理スクリプトの作成
- Nginxの構成
4. 参考文献
Webアプリケーションの展開、サーバーとその役割
Webアプリケーションの展開、またはWebアプリケーションのオンライン化に関しては、通常、その目的で使用されるアプリケーションの複数のレイヤーがあります。 確かに1人でその仕事をすることはできますが、万能に適合していないため、おそらくあまりうまくいきません。
このチュートリアルでは、PhusionPassengerをアプリケーションサーバーとして使用します。 アプリケーションサーバーの仕事は、最新のWebアプリケーションを含むことで構成されています(例: Ruby Rack、Python WSGIなど)、着信Webリクエストのセカンダリエントリポイントとして機能します。
一方、Nginxは、多目的HTTPサーバーとして機能するようにゼロから設計されています。 静的ファイルを提供できます(例: 画像、テキストファイルなど)非常にうまく接続のバランスを取り、特定のエクスプロイトの試みに対処します。 これは、すべての要求の最初のエントリポイントとして機能し、Webアプリケーションが応答を処理して返すためにそれらをPassengerに渡します。
Phusion Passenger Application Server
今日の乗客は、RubyonRailsアプリケーションの推奨サーバーになりました。 これは、セットアップと開始手順を大幅に簡素化しながら、アプリケーション展開の必要なニーズと領域をカバーすることを目的とした、成熟した機能豊富な製品です。 Nginx(およびApacheも)と直接統合することにより、従来の仲介サーバーセットアップアーキテクチャを排除します。 mod_railsとも呼ばれます。
乗客は非常に人気があり、多くの生産シナリオで広く使用されています。 オンラインで問題に対処するだけでなく、専門家に連絡して見つけることも非常に簡単です。
使用するオープンソース版には、マルチプロセスシングルスレッドの動作モードがあります。 そのエンタープライズバージョンは、シングルスレッドまたはマルチスレッドのいずれかで動作するように構成できます。
Passengerの詳細については、https://www.phusionpassenger.com/にある公式Webサイトにアクセスしてください。
リバースプロキシとして実行されているNginxHTTPサーバー
Nginxは、非常に高性能なWebサーバー/(リバース)-プロキシです。 軽量で、操作が比較的簡単で、拡張が簡単なため(アドオン/プラグインを使用)、人気を博しています。 そのアーキテクチャのおかげで、多くのリクエスト(実質的に無制限)を処理できます。これは、アプリケーションやWebサイトの負荷によっては、他の古い代替手段を使用して対処するのが非常に難しい場合があります。
覚えておいてください:接続を「処理する」とは、技術的には接続を削除せず、何かでサービスを提供できることを意味します。 Nginxがエラーメッセージではないクライアント応答にサービスを提供するには、アプリケーションとデータベースが正常に機能している必要があります。
その人気と成功により、Nginxの背後で実行されているアプリケーションをデプロイして、その強力な機能を活用します。
Nginxの詳細については、nginx.comにある公式Webサイトにアクセスしてください。
デプロイメントサーバーの準備
このセクションでは、次の手順を実行して、アプリケーションに対応できる堅固なサーバーを取得します。
-
オペレーティングシステムを更新する
-
展開に必要な基本ツールを入手する
-
Ruby、Rails、ライブラリをインストールする
-
アプリケーションをインストールします(つまり 乗客)およびHTTPサーバー(Nginx)
オペレーティングシステムの更新と準備
Rubyやその他の必要なアプリケーションをインストールするため(例: 私たちのサーバー)、最初に最小限に出荷されたCentOSドロップレットを準備し、途中で必要になるいくつかの開発ツールを装備する必要があります。
次のコマンドを実行して、CentOSベースのドロップレットのデフォルトツールを更新します。
yum -y update
# This command will update all the base applications
# that come with CentOS by default. Which are mostly
# reserved for use by the operating system.
次のコマンドを実行して、開発ツールを含むバンドルをインストールします。
yum groupinstall -y 'development tools'
# With more recent versions of CentOS, such as 6.5 in our case,
# you can simply run:
# yum groupinstall -y development
# instead.
# This bundle of applications contains various tools
# Such as: gcc, make, automake, binutils, git etc.
このチュートリアルに必要なパッケージの一部(例: libyaml-devel、nginxなど)は、公式のCentOSリポジトリ内に見つかりません。 物事を単純化し、手動でインストールする必要がないように、YUMおよびその他のパッケージマネージャーが使用するEPELソフトウェアリポジトリを追加します。
# Enable EPEL Repository
sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
# Update everything, once more.
yum -y update
最後に、次のセクションでインストールするNginxでPassengerを動作させるには、curl-devel
ライブラリとnanoテキストエディタが必要です。 Railsについても、sqlite-devel
が必要になります。
curl-devel
とnanoをインストールするには、次のコマンドを実行します。
yum install -y curl-devel nano sqlite-devel libyaml-devel
Ruby環境とRailsのセットアップ
注:このセクションは、専用の記事 CentOS6.5にRuby2.1.0をインストールする方法の要約です。
Rubyバージョンマネージャー(RVM)を使用して、Rubyインタープリター(またはRVMと呼ばれる「rubies」)をダウンロードしてインストールします。
次の2つのコマンドを実行して、RVMをインストールし、Rubyのシステム環境を作成します。
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
最後に、システムへのRubyのインストールを完了するために、RVMにRubyバージョン2.1.0をダウンロードしてインストールさせましょう。
rvm reload
rvm install 2.1.0
Rubyの後、 RubyGems パッケージマネージャーを使用して、RailsフレームワークなどのRubyベースのツールの残りを取得するのに役立てることができます。
Railsが機能するには、何よりもまずJavaScriptインタープリターが必要なので、Node.jsもセットアップする必要があります。 この目的のために、デフォルトのシステムパッケージマネージャーYUMを使用します。
以下を実行して、yumを使用してnodejsをダウンロードおよびインストールします。
yum install -y nodejs
RubyGemsのgem
を使用して次のコマンドを実行し、rails
をダウンロードしてインストールします。
gem install bundler rails
サーバーアプリケーションのダウンロードとインストール
注:VPSのRAMが1GB未満の場合は、以下の簡単な手順を実行して、一時データホルダー(RAMの代替)として使用するSWAPディスクスペースを準備する必要があります。 DigitalOceanサーバーには高速SSDディスクが付属しているため、サーバーアプリケーションのインストールタスクを実行する際に、これが実際に問題になることはありません。
# Create a 1024 MB SWAP space
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap
Phusion Passenger
Red Hat LinuxのデフォルトのパッケージマネージャーRPM(RPM Package Manager)は、.rpm
ファイルに含まれるアプリケーションを出荷します。 残念ながら、乗客の場合、それらはかなり時代遅れです。 したがって、もう一度RubyGemを使用して、利用可能な最新バージョンのPassenger –バージョン4をダウンロードしてインストールします。
以下のコマンドを使用して、passengerをダウンロードしてインストールします。
gem install passenger
# This command will fetch Passenger v4.0(.35+) for you.
Passengerがダウンロードされて正しくセットアップされていることをテストするには、passenger
を実行してみてください。
以下のような出力が表示されます。
Phusion Passenger Standalone, the easiest way to deploy Ruby web apps.
Available commands:
passenger start Start Phusion Passenger Standalone.
..
Nginx
通常、Nginxをダウンロードしてインストールするには、EPELリポジトリを追加し、yum経由でNginxを取得できます。 ただし、NginxをPassengerで動作させるには、そのソースを必要なモジュールでコンパイルする必要があります。 ただし、心配しないでください。 乗客には、単一のコマンドを実行するのと同じくらい簡単なプロセスを作成するための便利なツールが付属しています。
次のコマンドを実行して、ネイティブPassengerモジュールを使用したNginxのコンパイルを開始します。
passenger-install-nginx-module
コマンドを実行したら、Enterキーを押して、選択した言語を確認します(つまり、 Ruby、この場合)。 必要に応じて、矢印キーとスペースバーを使用してRubyのみを選択できます。
Use <space> to select.
If the menu doesn't display correctly, ensure that your terminal supports UTF-8.
‣ ⬢ Ruby
⬢ Python
⬢ Node.js
⬡ Meteor
次のステップで、項目1を選択します。
1. Yes: download, compile and install Nginx for me. (recommended)
The easiest way to get started. A stock Nginx 1.4.4 with Passenger
support, but with no other additional third party modules, will be
installed for you to a directory of your choice.
次にEnterキーを押して続行します。
これで、Nginxソースがダウンロード、コンパイル、およびPassengerサポート付きでインストールされます。
注:このアクションには少し時間がかかる場合があります。おそらく、希望または予想よりも長くなります。
展開のためのアプリケーションの準備
注:このセクションでは、例として非常に単純なRubyOnRailsアプリケーションを使用します。 アプリケーションを実際にデプロイするには、コードベースをアップロードし、そのすべての依存関係がインストールされていることを確認する必要があります。
サンプルアプリケーションの作成/ソースコードのアップロード
PassengerとNginxでサービスを提供するために、ホームディレクトリ内に非常に基本的なRailsアプリケーションを作成することから始めましょう。
次のコマンドを実行して、Railsを取得し、/var/www
ディレクトリ内にmy_appという新しいアプリケーションを作成します。
# Create a sample Rails application
cd /var
mkdir www
cd www
rails new my_app
# Enter the application directory
cd my_app
# Create a sample resource
rails generate scaffold Task title:string note:text
# Create a sample database
RAILS_ENV=development rake db:migrate
アプリケーションが正しく設定され、すべてが正常に機能していることをテストするには、appディレクトリに入り、rails s
を使用して単純なサーバーを実行します。
# Enter the application directory
cd /var/www/my_app
# Run a simple server
rails s
# You should now be able to access it by
# visiting: http://[your droplet's IP]:3000/tasks
# In order to terminate the server process,
# Press CTRL+C
注:実際の展開では、コードベースをサーバーにアップロードする場合、SFTPまたは[] FileZillaなどのグラフィカルツール[]を使用して、リモートファイルを安全に転送および管理できます。
Nginx管理スクリプトの作成
Nginxをコンパイルした後、それを簡単に制御するために、簡単な管理スクリプトを作成する必要があります。
次のコマンドを実行して、スクリプトを作成します。
nano /etc/rc.d/init.d/nginx
以下の内容をコピーして貼り付けます。
#!/bin/sh
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
[ "$NETWORKING" = "no" ] && exit 0
nginx="/opt/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $”Reloading $prog: ”
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
CTRL + Xを押し、Yで確定して保存して終了します。
この管理スクリプトのモードを実行可能ファイルとして設定します。
chmod +x /etc/rc.d/init.d/nginx
Nginxの構成
サーバーを構成するこの最後のステップでは、Nginxサーバーブロックを作成する必要があります。これは、Apacheの仮想ホストに大まかに変換されます。
PassengerのNginxのインストール中に見たことを覚えているかもしれませんが、この手順は、コードのブロックをNginxの構成ファイルnginx.conf
に追加することで構成されています。 デフォルトでは、特に明記しない限り、このファイルは/opt/nginx/conf/nginx.conf
の下にあります。
次のコマンドを入力してこの構成ファイルを開き、テキストエディターnanoで編集します。
nano /opt/nginx/conf/nginx.conf
最初のステップとして、http {
ノードを見つけ、passenger_root
およびpassenger_ruby
ディレクティブの直後に次を追加します。
# Only for development purposes.
# For production environment, set it accordingly (i.e. production)
# Remove this line when you upload an actual application.
# For * TESTING * purposes only.
passenger_app_env development;
ファイルを下にスクロールして、server { ..
を見つけます。 デフォルトの場所をコメントアウトします。
..
# location / {
# root html;
# index index.html index.htm;
# }
..
そして、デフォルトのアプリケーションルートを定義します。
root /var/www/my_app/public;
passenger_enabled on;
CTRL + Xを押し、Yで確定して保存して終了します。
次のコマンドを実行して、新しいアプリケーション構成でNginxをリロードします。
/etc/init.d/nginx restart
Nginxのステータスを確認するには、次を使用できます。
/etc/init.d/nginx status
アプリケーション(およびサンプルアプリ)をテストするには、次のサイトにアクセスしてください。
http://[Your droplet's IP addr]/tasks
# Listing tasks
# Title Note
# New Task
注: Nginxの詳細については、VPSでNginxWebサーバーを構成する方法を参照してください。
参考文献
ファイアウォール
SSHの保護
Ubuntuでfail2banを使用してSSHを保護する方法
CentOS6でfail2banを使用してSSHを保護する方法
アラートの作成
システム監視のためにCentOSVPSで電子メールアラートを送信する方法