Skip to content

Instantly share code, notes, and snippets.

@yu0819ki
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yu0819ki/731c92b62e603504fdb7 to your computer and use it in GitHub Desktop.
Save yu0819ki/731c92b62e603504fdb7 to your computer and use it in GitHub Desktop.
Vagrant+Ansible+git-hooks+foreverでNodejsの開発環境作った話

Vagrant+Ansible+git-hooks+foreverでNodejsの開発環境作った話

Vagrant

利用しているのは、CentOS 6.4 の、64bit版です。

Vagrantfile

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "centos64-x86_64"
  config.vm.define :node01 do |vm_config|
    vm_config.vm.network :private_network, ip: "192.168.33.31"
    vm_config.vm.host_name = "node01.local"
    vm_config.vm.provider "virtualbox" do |v| 
      v.customize ["modifyvm", :id, "--memory", 1024] 
    end 
  end
end

Ansible

バージョン1.4.3で動作確認してます。

hosts

[nodejs]
node01.local

[all:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=/home/inori/.vagrant.d/insecure_private_key

playbook.yml

- hosts: nodejs
  user: vagrant
  sudo: no
  vars: 
    homedir: /home/vagrant/
    nodejs:
      version: v0.11.13
    nvm:
      version: v0.5.1
  tasks:
    - name: install nvm
      git: repo=https://github.com/creationix/nvm.git
           dest=~/.nvm
           version={{ nvm.version }}
    - name: nvm enabled
      lineinfile: dest={{ homedir }}.bashrc
                  regexp="^source.*nvm.*" 
                  line="source ~/.nvm/nvm.sh"
                  insertafter=EOF
    - name: nvm install nodejs
      raw: nvm install {{ nodejs.version }};nvm alias default {{ nodejs.version }}
    - name: npm install forever globally 
      npm: name=forever
           global=yes
           executable={{ homedir }}.nvm/v0.11.13/bin/npm

実行はまぁ、普通にこんな感じ。

ansible-playbook -i hosts playbook.yml

nvm経由でNodejsをインストールし、foreverをグローバルインストールする。

リポジトリの準備

nodejs-app

適当なNodejsアプリを作る。このとき、起動を簡単にするため、package.jsonに以下の記述を入れる。
-c \"node --harmony\"は、koa.jsとか使うときだけ書く。

{
  "scripts": {
    "start": "forever -w -c \"node --harmony\" index.js",
    "stop": "forever stop index.js",
    "restart": "forever restart index.js"
  }
}

@GuestOS

上記nodejs-appが、git@github.com:user/nodejs-app.gitにホスティングされているとしたとき、
vagrant sshで、ゲストOSに入ったところから

  1. git clone git@github.com:yu0819ki/git_dev_tools.git
  2. git_dev_tools/git_bare.sh git@github.com:user/nodejs-app.git /home/vagrant/bare/nodejs-app.git /home/vagrant/nodejs-app
  3. cd /home/vagrant/hodejs-app;npm install

git_dev_tools/git_bare.shの詳細は以下を参照
https://github.com/yu0819ki/git_dev_tools/blob/master/readme.md

@HostOS

ホストOSでは、ゲストOSのベアリポジトリからクローンしてきて、プッシュするだけ。

  1. git clone vagrant@node01.local:bare/nodejs-app.git
  2. git commit -a -m "--";git push

foreverで動かす

package.jsonにstart, stop, restartを書いてあるので、 npm start npm stop npm restartで制御できる。

npm startするだけで、ファイルの変更をウォッチするようにしてあるので、foreverが勝手に再起動してくれて便利。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment