5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Herokuみたいにデプロイしたくて

Last updated at Posted at 2013-12-15

デプロイは神経を使う作業です、安全なはずのコマンドでも結構ドキドキしながら実行するはず。

Capistranoとかfleetとか使ってデプロイされている方にはこの記事は読む価値がないかもしれないです、

リモートサーバに入ってgit pullとか、ましてやローカルで色々前処理した上でrsyncでリモートにデプロイしている方にはこの記事は価値あるかもしれません。

要は手元のPCから、

$ git push production master

の1コマンドでデプロイを実現してみようってはなしです。

Node.jsアプリベースで記述していますが、RubyでもPHPでも何でも読み替えられると思います

デプロイの構成

デプロイの構成は下図です、

Untitled drawing.png

デプロイ先のサーバにはpost-receiveフックを仕掛けたbareリポジトリを用意しておきます。post-receiveフックの中身は同じサーバ内のpublicディレクトリでのチェックアウト + 前処理 + アプリの再起動です。ローカルのPCからgit pushするとpost-receiveフックにより最新の状態でアプリが動き出します。(Upstart使っていますが、pm2とかでも同じ話です)

サンプルアプリ

以下に今回のサンプルアプリをおいてあります:

このアプリは/にアクセスすると「Hello, world」と環境依存の変数を出力してみる素敵にシンプルなアプリですが、幾つかのモジュールに依存しており、またbootstrapを利用していてlessのコンパイルの作業を踏まないと正常に動きません、ローカルでの開発はこんなかんじです:

$ cd ~/git
$ git clone https://p_baleine@bitbucket.org/p_baleine/sample-app.git
$ cd sample-app
$ npm install # 依存関係ある(npmとbowerの)モジュールをインストール
$ grunt less  # lessのコンパイル
$ npm start   # 起動

デプロイ時もこの作業を繰り返す必要があります。

リモートでの準備

リモートサーバにてbareリポジトリを作成します、

$ mkdir ~/git/sample-app.git && cd ~/git/sample-app.git
$ git init --bare

さらに実際にアプリのソースを置くディレクトリを作成します、

$ mkdir /var/www/sample-app

Upstartスクリプトを作成します、

$ cat /etc/init/sample-app.conf
author "Tajima Junpei"
description "sample-app"
setuid "nonrootuser"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown

respawn
console log
env NODE_ENV=production

chdir /var/www/sample-app
exec npm start

post-receiveフックを作成します、チェックアウト、lessのコンパイル、サーバの再起動を行なっています、

$ cat hooks/post-receive
#!/bin/sh
export SAMPLE_APP_DIR=/var/www/sample-app
GIT_WORK_TREE=$SAMPLE_APP_DIR git checkout -f
(cd $SAMPLE_APP_DIR; npm install && grunt less && sudo restart sample-app)
$ chmod a+x hooks/post-receive

いざデプロイ

リモートのbareリポジトリを追加します、

$ cd ~/git/sample-app
$ git remote add production <リモートリポジトリ>

実際のデプロイは(ローカルPCより)以下コマンドで行います、

git push production master # パスワードを求められたら入力
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?