開発運用

Git Hooks を使ったデプロイ

Ruby on Rails アプリケーションを Git Hooks を使用して Ubuntu 14.04 にデプロイする手順について、以下に完全かつ包括的なガイドを提供します。この記事では、Git Hooks を活用してデプロイ作業を自動化し、Rails アプリケーションを効率的にサーバーにデプロイする方法を説明します。

1. 前提条件

このガイドでは、以下の前提条件が満たされていることを想定しています:

  • Ubuntu 14.04 がインストールされたサーバーがあること。
  • Git と Ruby on Rails がインストールされていること。
  • デプロイ先のサーバーに SSH アクセスできること。
  • Rails アプリケーションがすでに Git リポジトリとして管理されていること。

もし、まだ必要なソフトウェアがインストールされていない場合は、以下のコマンドでインストールできます。

bash
sudo 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-commitpost-receive などのフックがあります。特に、リモートサーバーにデプロイする際には post-receive フックを使用することが一般的です。

3. デプロイ準備

3.1 Git リポジトリのセットアップ

まず、デプロイする Rails アプリケーションが Git リポジトリとして管理されていることを確認します。まだ Git を使用していない場合、以下のコマンドでリポジトリを初期化します。

bash
cd /path/to/your/rails/app git init git add . git commit -m "Initial commit"

3.2 リモートリポジトリの設定

GitHub や Bitbucket などのリモートリポジトリを利用している場合は、リモートリポジトリを追加します。

bash
git remote add origin [email protected]:yourusername/your-repository.git git push -u origin master

4. サーバー側の準備

4.1 サーバーへの Git リポジトリのクローン

次に、デプロイ先のサーバーでリポジトリをクローンします。SSH を利用してサーバーにログインし、適切なディレクトリに移動します。

bash
ssh 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 を実行します。

bash
gem install bundler bundle install

4.3 Web サーバーの設定

Rails アプリケーションを稼働させるために、Nginx や Apache などの Web サーバーを設定する必要があります。ここでは、Nginx と Unicorn を使用した設定方法を紹介しますが、必要に応じて他の Web サーバーを選択できます。

Unicorn のインストール

まず、Unicorn を Gemfile に追加します。

ruby
gem 'unicorn'

その後、bundle install を実行して Unicorn をインストールします。

次に、Unicorn の設定ファイルを作成します。

bash
touch config/unicorn.rb

config/unicorn.rb の中身を次のように設定します。

ruby
worker_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 の設定ファイルを作成します。

bash
sudo nano /etc/nginx/sites-available/myapp

その中に次の内容を追加します。

nginx
server { 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 サーバーを再起動して、設定を反映させます。

bash
sudo 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/ フォルダに移動します。

bash
cd /var/www/myapp/.git/hooks

次に、post-receive フックを作成します。

bash
touch 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 することで自動デプロイを実現します。

bash
git remote add deploy ssh://user@your-server-ip/var/www/myapp.git git push deploy master

6. テストと確認

すべてが設定できたら、ローカルリポジトリでコードを更新し、サーバーにプッシュしてデプロイが正常に行われるか確認します。

bash
git commit -am "Update application" git push deploy master

これにより、Git Hooks が自動的に実行され、アプリケーションがサーバーにデプロイされます。

結論

Git Hooks を使用して Ruby on Rails アプリケーションを Ubuntu 14.04 サーバーにデプロイする方法を解説しました。このアプローチにより、デプロイ作業を自動化し、手動での作業を減らすことができます。Git Hooks は非常に強力なツールであり、さまざまなデプロイメント作業を効率化できます。

Back to top button