mac 環境の vagrant で capstrano の rails ( github ) のデプロイを試す
- vagrantbox から Debian の box 取ってきて、rails環境を構築。
- capstrano のインストール
- 簡単なコマンドを実行する capstrano を試してみる
- github のソースをもとにデプロイされることを確認する
- nginx を入れ、rails s しなくてもサイトが確認できるようにする
- 参考にさせていただいたサイト
あるRailsプロジェクトで、 capstrano を使ってRails の本番デプロイをしているとのことだったので、勉強の為、capstranoの実行を試してみました。この記事では、capstranoを詳しく知ることではなく、capstranoを使って、ローカル環境から本番環境にソースをデプロイする方法を書いています。まずは触れてみて、これから勉強していきたいと思います。
Vagrant側 |
---|
Debian GNU/Linux 8 |
rbenv 0.4.0 |
ruby 2.1.0 |
Bundler version 1.10.6 |
git version 2.1.4 |
IP: 192.168.33.10 |
Mac側 |
---|
Vagrant 1.7.4 |
ワークフォルダ |
---|
ローカル環境 railsプロジェクト |
~/work/blog |
リモート環境 vagrant |
~/vagrant/capstrano |
vagrantbox から Debian の box 取ってきて、rails環境を構築。
1. vagrantbox のサイトから取ってきてDebianを設定する
2. git のインストール
vagrant@debian:~$ sudo apt-get install git-core git-doc
Debian での git のインストールは git-core git-doc なのね。sudo apt-get install git じゃない
3. rbenv , ruby-build の設定
こちらを参考にさせていただきました。 Debianでrbenvを使ってRailsの環境を作る。
4. ruby のインストール
vagrant@debian:~$ rbenv install 2.1.0 以下が必要だと怒られる。 ERROR: Ruby install aborted due to missing extensions Try running `apt-get install -y libssl-dev libreadline-dev zlib1g-dev` to fetch missing dependencies.
sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
改めて ruby のインストール
vagrant@debian:~$ rbenv install 2.1.0 ruby を確認すると 以下のように怒られる vagrant@debian:~$ ruby -v rbenv: version `system' is not installed (set by RBENV_VERSION environment variable)
globalを設定
vagrant@debian:~$ rbenv global 2.1.0 vagrant@debian:~$ ruby -v ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
5. rails環境の設定
gem install bundler gem install rails
capstrano のインストール
Mac側の作業 |
---|
ローカル環境 |
1. 適当な rails プロジェクトを準備して github に push
cd ~/work/ rails new blog cd blog rails generate scaffold article title:string text:string mac$ rake db:migrate 動くことを確認 rails s http://localhost:3000/article
github に push
mac$ git init mac$ git add . mac$ git commit -m "first commit" mac$ git remote add origin git@github.com:takanamishi/blog.git mac$ git push -u origin master
2. railsプロジェクトに capstrano 用の gem を記述
blog の Gemfile に以下の3行を追加
gem 'capistrano' gem 'capistrano-rails' # vagrant環境でbundlerを使っている為 gem 'capistrano-bundler'
bundle install を実行してインストールする
簡単なコマンドを実行する capstrano を試してみる
1. Capstrano の設定ファイルの作成
mac$ cap install mkdir -p config/deploy create config/deploy.rb create config/deploy/staging.rb create config/deploy/production.rb mkdir -p lib/capistrano/tasks create Capfile Capified mac$
2. Capstrano が正しく動作するか確認する
Capstrano では、リモート環境にログインして処理を行うため、ssh vagrant@192.168.33.10 でパスワードなしでログインできるように鍵を設定します。ローカルのVM環境なので、 MAC で使っている github 用の鍵を使い回すことにします。
mac$ cp ~/.ssh/id_rsa.pub ~/vagrant/capstrano/ mac$ vagrant ssh vagrant@debian:~$ mv /vagrant/id_rsa.pub ~/.ssh/ vagrant@debian:~$ cd ~/.ssh/ vagrant@debian:~/.ssh$ ls -l total 8 -rw------- 1 vagrant vagrant 389 Nov 12 02:16 authorized_keys -rw-r--r-- 1 vagrant vagrant 402 Nov 12 02:21 id_rsa.pub vagrant@debian:~/.ssh$ cat id_rsa.pub >> authorized_keys vagrant@debian:~/.ssh$ rm id_rsa.pub vagrant@debian:~/.ssh$ exit mac$ ssh -i ~/.ssh/id_rsa vagrant@192.168.33.10 vagrant@debian:~$
3. config/deploy/production.rb を編集する
The server-based syntax can be used to override options: のエリアのコメントアウトは外し、以下のように編集
server '192.168.33.10', user: 'vagrant', roles: %w{web app}, ssh_options: { user: 'vagrant', # overrides user setting above keys: %w(~/.ssh/id_rsa), forward_agent: false, auth_methods: %w(publickey) # password: 'please use keys' }
config/deploy.rb のバックアップと取って、 deploy.rb を以下の内容にする
cp config/deploy.rb.bak config/deploy.rb.org
task :list do on roles(:app), in: :sequence do execute "ls -la" end end
cap production list を実行して以下のように ls の結果が出れば、リモート環境にログインして、処理が行えていることを確認することができます。
mac$ cap production list INFO [8981708f] Running /usr/bin/env ls -la as vagrant@192.168.33.10 DEBUG [8981708f] Command: ls -la DEBUG [8981708f] total 40 DEBUG [8981708f] drwxr-xr-x 5 vagrant vagrant 4096 Nov 12 03:06 . DEBUG [8981708f] drwxr-xr-x 3 root root 4096 Jul 3 10:30 .. DEBUG [8981708f] -rw------- 1 vagrant vagrant 924 Nov 12 03:34 .bash_history DEBUG [8981708f] -rw-r--r-- 1 vagrant vagrant 220 Jul 3 10:30 .bash_logout DEBUG [8981708f] -rw-r--r-- 1 vagrant vagrant 60 Nov 12 02:34 .bash_profile DEBUG [8981708f] -rw-r--r-- 1 vagrant vagrant 3515 Jul 3 10:30 .bashrc DEBUG [8981708f] drwxr-xr-x 3 vagrant vagrant 4096 Nov 12 03:06 .gem DEBUG [8981708f] -rw-r--r-- 1 vagrant vagrant 675 Jul 3 10:30 .profile DEBUG [8981708f] drwxr-xr-x 12 vagrant vagrant 4096 Nov 12 03:02 .rbenv DEBUG [8981708f] drwx------ 2 vagrant vagrant 4096 Nov 12 02:23 .ssh INFO [8981708f] Finished in 2.571 seconds with exit status 0 (successful). mac$
github のソースをもとにデプロイされることを確認する
MAC側 |
---|
ローカル環境 |
github からソースを持ってくるので、ローカルで使っている鍵をコピーする
mac$ cp ~/.ssh/id_rsa ~/vagrant/capstrano/ mac$ cd ~/vagrant/capstrano/ mac$ vagrant ssh vagrant@debian:~$ mv /vagrant/id_rsa ~/.ssh/ vagrant@debian:~$ exit mac$
(本当は鍵を作って、githubに登録した方がいいですね)
Capstrano の設定ファイルを編集する
- 先ほどテストで作った deploy.rb を削除し、デフォルトの deploy.rb に戻して編集
- Capfile に最低限の変更を加える
# config valid only for current version of Capistrano lock '3.4.0' set :application, 'blog' set :repo_url, 'git@github.com:takanamishi/blog.git' # Default branch is :master # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp # Default deploy_to directory is /var/www/my_app_name set :deploy_to, '/home/vagrant/projects/blog' # Default value for :scm is :git set :scm, :git # Default value for :format is :pretty # set :format, :pretty # Default value for :log_level is :debug # set :log_level, :debug # Default value for :pty is false # set :pty, true # Default value for :linked_files is [] # set :linked_files, fetch(:linked_files, []).push('config/database.yml', 'config/secrets.yml') # Default value for linked_dirs is [] # set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system') # Default value for default_env is {} # set :default_env, { path: "/opt/ruby/bin:$PATH" } # Default value for keep_releases is 5 # set :keep_releases, 5 namespace :deploy do after :restart, :clear_cache do on roles(:web), in: :groups, limit: 3, wait: 10 do # Here we can do anything such as: # within release_path do # execute :rake, 'cache:clear' # end end end end
Capfile の中身(必要あれば)
Capistano の実行
mac$ cap production deploy
ソースが配置されているかリモート環境に入って確認する
vagrant@debian:~$ ls -la projects/blog/ total 24 drwxr-xr-x 5 vagrant vagrant 4096 Nov 12 05:22 . drwxr-xr-x 3 vagrant vagrant 4096 Nov 12 05:22 .. lrwxrwxrwx 1 vagrant vagrant 51 Nov 12 05:22 current -> /home/vagrant/projects/blog/releases/20151112042229 drwxr-xr-x 3 vagrant vagrant 4096 Nov 12 05:22 releases drwxr-xr-x 7 vagrant vagrant 4096 Nov 12 05:22 repo -rw-r--r-- 1 vagrant vagrant 74 Nov 12 05:22 revisions.log drwxr-xr-x 2 vagrant vagrant 4096 Nov 12 05:22 shared
railsプロジェクトが動くか確認
vagrant@debian:~$ cd ~/projects/blog/current vagrant@debian:~/projects/blog/current$ rails s -b 0.0.0.0 以下怒られる Could not find rake-10.4.2 in any of the sources Run `bundle install` to install missing gems. vagrant@debian:~/projects/blog/current$ bundle install
bundle install をしろとのことなので、bundle installを実行。が、以下怒られる
An error occurred while installing sqlite3 (1.3.11), and Bundler cannot continue. Make sure that `gem install sqlite3 -v '1.3.11'` succeeds before bundling.
sqlite3 が必要なので、sqlite3をインストールする
vagrant@debian:~/projects/blog/current$ sudo aptitude install libsqlite3-dev
sudo aptitude install sqlite3 ではないんですね。再度 rails s -b 0.0.0.0 でサイトが立ちがることを確認。が、以下怒られる。
/home/vagrant/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/execjs-2.6.0/lib/execjs/runtimes.rb:48:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
rails server 時に `autodetect': Could not find a JavaScript runtime が出たら。
- Gemfileを修正して、bundle installして、再度 rails s -b 0.0.0.0 で確認
- rake db:migrateをしていなかったので、実行して、再度 rails s -b 0.0.0.0
- http://192.168.33.10:3000/articles/ を確認
これで、githubにあるコードをリモート環境に設置するところまで完了しました。
nginx を入れ、rails s しなくてもサイトが確認できるようにする
vagrant@debian:~/projects/blog/current$ sudo aptitude install nginx
お任せrubyでunicornとnginxをセットアップする
現在やり方調査中
参考にさせていただいたサイト
全体的に参考に http://qiita.com/ea54595/items/12ab7b3a8213b35cca10
Capistranoのテストに http://qiita.com/mosson/items/1a4cfd01cb538f2d8f0e