Ruby on Rails アプリケーションを Git Hooks を使用して Ubuntu 14.04 にデプロイする手順について、以下に完全かつ包括的なガイドを提供します。この記事では、Git Hooks を活用してデプロイ作業を自動化し、Rails アプリケーションを効率的にサーバーにデプロイする方法を説明します。
1. 前提条件
このガイドでは、以下の前提条件が満たされていることを想定しています:
- Ubuntu 14.04 がインストールされたサーバーがあること。
- Git と Ruby on Rails がインストールされていること。
- デプロイ先のサーバーに SSH アクセスできること。
- Rails アプリケーションがすでに Git リポジトリとして管理されていること。
もし、まだ必要なソフトウェアがインストールされていない場合は、以下のコマンドでインストールできます。
bashsudo apt-get update sudo apt-get install git ruby-full build-essential libsqlite3-dev nodejs
Rails のインストール方法については、公式ドキュメントを参照してください。
2. Git Hooks の概念
Git Hooks は、特定の Git 操作(コミット、プッシュ、マージなど)が実行されたときに、自動的にトリガーされるスクリプトです。これにより、デプロイメント作業やその他のタスクを自動化できます。
Git Hooks はリポジトリの .git/hooks/
ディレクトリ内に格納されており、たとえば post-commit
や post-receive
などのフックがあります。特に、リモートサーバーにデプロイする際には post-receive
フックを使用することが一般的です。
3. デプロイ準備
3.1 Git リポジトリのセットアップ
まず、デプロイする Rails アプリケーションが Git リポジトリとして管理されていることを確認します。まだ Git を使用していない場合、以下のコマンドでリポジトリを初期化します。
bashcd /path/to/your/rails/app
git init
git add .
git commit -m "Initial commit"
3.2 リモートリポジトリの設定
GitHub や Bitbucket などのリモートリポジトリを利用している場合は、リモートリポジトリを追加します。
bashgit remote add origin [email protected]:yourusername/your-repository.git git push -u origin master
4. サーバー側の準備
4.1 サーバーへの Git リポジトリのクローン
次に、デプロイ先のサーバーでリポジトリをクローンします。SSH を利用してサーバーにログインし、適切なディレクトリに移動します。
bashssh user@your-server-ip
cd /var/www/
git clone [email protected]:yourusername/your-repository.git myapp
cd myapp
4.2 Rails アプリケーションの依存関係のインストール
Rails アプリケーションが依存する gem をインストールします。まず、必要な gem をインストールするために bundle
を実行します。
bashgem install bundler bundle install
4.3 Web サーバーの設定
Rails アプリケーションを稼働させるために、Nginx や Apache などの Web サーバーを設定する必要があります。ここでは、Nginx と Unicorn を使用した設定方法を紹介しますが、必要に応じて他の Web サーバーを選択できます。
Unicorn のインストール
まず、Unicorn を Gemfile に追加します。
rubygem 'unicorn'
その後、bundle install
を実行して Unicorn をインストールします。
次に、Unicorn の設定ファイルを作成します。
bashtouch config/unicorn.rb
config/unicorn.rb
の中身を次のように設定します。
rubyworker_processes 2
working_directory "/var/www/myapp"
listen "/tmp/unicorn.myapp.sock"
pid "/tmp/unicorn.myapp.pid"
stderr_path "/var/www/myapp/log/unicorn.stderr.log"
stdout_path "/var/www/myapp/log/unicorn.stdout.log"
Nginx の設定
Nginx の設定ファイルを作成します。
bashsudo nano /etc/nginx/sites-available/myapp
その中に次の内容を追加します。
nginxserver {
listen 80;
server_name your-server-ip;
root /var/www/myapp/public;
location / {
try_files $uri @app;
}
location @app {
proxy_pass http://unix:/tmp/unicorn.myapp.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
error_log /var/log/nginx/myapp_error.log;
access_log /var/log/nginx/myapp_access.log;
}
Nginx サーバーを再起動して、設定を反映させます。
bashsudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo service nginx restart
5. Git Hooks の設定
5.1 post-receive
フックの設定
サーバー上で自動的にアプリケーションをデプロイするために、Git Hooks の post-receive
フックを設定します。まず、Git リポジトリ内の .git/hooks/
フォルダに移動します。
bashcd /var/www/myapp/.git/hooks
次に、post-receive
フックを作成します。
bashtouch post-receive
chmod +x post-receive
post-receive
ファイルを編集して、以下の内容を追加します。
bash#!/bin/bash
GIT_WORK_TREE=/var/www/myapp git checkout -f
cd /var/www/myapp
bundle install
RAILS_ENV=production rake assets:precompile
sudo service nginx restart
このスクリプトは、git push
が行われるたびに自動的に実行され、以下の作業を行います:
- 最新のコードをサーバーの作業ディレクトリに反映。
- 必要な gem をインストール。
- アセットをプリコンパイル。
- Nginx サーバーを再起動して新しいアプリケーションを反映。
5.2 Git リモート設定
サーバー側の Git リポジトリをリモートとして設定し、ローカルから git push
することで自動デプロイを実現します。
bashgit remote add deploy ssh://user@your-server-ip/var/www/myapp.git git push deploy master
6. テストと確認
すべてが設定できたら、ローカルリポジトリでコードを更新し、サーバーにプッシュしてデプロイが正常に行われるか確認します。
bashgit commit -am "Update application"
git push deploy master
これにより、Git Hooks が自動的に実行され、アプリケーションがサーバーにデプロイされます。
結論
Git Hooks を使用して Ruby on Rails アプリケーションを Ubuntu 14.04 サーバーにデプロイする方法を解説しました。このアプローチにより、デプロイ作業を自動化し、手動での作業を減らすことができます。Git Hooks は非常に強力なツールであり、さまざまなデプロイメント作業を効率化できます。