このシリーズではRuby on Railsと他いくつかのライブラリーを用いたウェブ開発の全プロセスを扱っていきます。
以前の内容( https://avinton.com/academy/ruby-on-rails-set-up-with-mysql/ )でapt-getを用いてRubyをインストールしました。しかしながら実際にリリースするものを開発する際は保守性・再現性の観点からバージョンマネージャーを用いてインストールすることが一般的です。今回はrvmでRubyをインストールします。
既にrubyをapt-getでインストールしている場合
[code lang=bash]
sudo apt-get autoremove ruby
[/code]
rvmをインストールします。
[code lang=bash]
gpg –keyserver hkp://keys.gnupg.net –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable
[/code]
PATHはrvmのインストーラが自動でbash_profileに書き込んでくれますので読み込みましょう。
[code lang=bash]
source /home//.bash_profile
[/code]
確認します。
[code lang=bash]
rvm -v
[/code]
Rubyをバージョン指定してインストールします。
[code lang=bash]
rvm install 2.3.1
ruby -v
[/code]
Rubyをバージョンマネージャーrvmによってインストールできました。
これで、他のバージョンのRubyを動作させる場合にも簡単に切り替えることができます。
Railsの新しいプロジェクトを作り、何かしらのページを作って動作させてみましょう。
編集の際、テキスト編集ソフトがあると便利です。
その一つ、Github製のAtomは以下の手順でインストールできます。
[code lang=bash]
sudo add-apt-repository ppa:webupd8team/atom
sudo apt-get install atom
[/code]
そして、プロジェクトのルートディレクトリにいる状態で、
[code lang=bash]
atom ./
[/code]
と打つとプロジェクト全体を編集することが可能です。
現在、多くのソフトウェア開発は外部のソースコード管理システムを介在させて行われています。
そのうちでも非常に多くの人に使われているGithubを使って今回は進めます。
新しいアカウントを取得すると、新しいレポジトリを作れます。
“Your Profile”から新しいレポジトリ(後でつけるプロジェクト名と同じにしましょう)を作ります。
先ほど作ったプロジェクトディレクトリをgit化します。
[code lang=bash]
git init
[/code]
gitの基本的なコマンド, pull/add/commit/push/merge について調べ、今作ったプロジェクトをGithubのレポジトリにアップロードしましょう。
ローカルとリモートのレポジトリーを作ったので、次はプロダクションを想定したサーバーをセットアップをします。
プロダクションサーバーはローカルで作ったものがWebサーバーを通してしっかり動くかどうか確認するためのものです。
ubuntu server をダウンロードしましょう。
https://www.ubuntu.com/download/server
Virtualboxで新しく仮想マシンを作ります。
ubuntu-serverのディスクイメージを使って作りましょう。
起動するとこんな画面になるかと思います。
OSをアップデートします。
[code lang=bash]
sudo apt-get update
[/code]
後でひとつ目の開発用VMから今つくったプロダクションVMへデプロイするためにsshをインストールしておきましょう。
[code lang=bash]
sudo apt-get install ssh
[/code]
[code lang=bash]
sudo service ssh status
[/code]
次は接続の設定をしましょう
ubuntu-server の画面でメニューから, Devices – > Network setting を選び
Advanced を開きます。
その中のPort Forwardingに進みます。.
この画面で、ホストマシンと仮想マシンのポートを紐付けることができます。今回は3022を22と繋げます。
また、VirtualBoxのホストマシンはデフォルトで10.0.2.2と設定されているので、設定が済むと
[code lang=bash]
ssh -p 3022 username@10.0.2.2
[/code]
で開発VMから接続できるようになります。
※また、Virtualbox Guest Addition という追加ディスクをVM上でマウントすることで、Virtualboxを便利に使用することが出来るようになります。( Devices – > Insert guest additions CD image )
次に実際にサーバーをセットアップしていきます。
ウェブアプリケーションは多くの場合ウェブサーバーとアプリケーションサーバーを必要とします。
今回は Nginx と Phusion Passenger を使います。
こちら にubuntu(debian)向けのガイドがあります。
確認します。
[code lang=bash]
sudo service nginx status
[/code]
これでサーバーが起動しました。
ウェブページはたいていポート80で稼働しています。確認してみてください。
確認できたら、sshと同じようにこれをホストマシンのポートに紐付けましょう。
Railsアプリケーションを作るにあたってmysql, rvm, ruby, bundlerがサーバーにも必要になります。
セットアップしてみましょう。
デプロイに必要な役者が揃いました。
RailsではデフォルトでCapstranoというgemが推奨されていますが、今回はminaを使ってデプロイします。
official page
Gemfile に追加してインストールしましょう。
minaにはデプロイ用スクリプトのテンプレートを用意してくれるコマンドがついています。
[code lang=bash]
mina init
[/code]
そして deploy.rb を適宜編集します。
[code lang=ruby]
set :user, 'deployer'
set :domain, '10.0.2.2'
set :port, '3022'
set :deploy_to, '/var/www/html'
set :keep_releases, 1
set :rails_env, ENV['RAILS_ENV'] || 'production'
set :shared_dirs, ['log']
set :shared_files, ['.env']
set :repository, 'https://github.com/yourname/yourproject.git'
set :branch, 'master'
set :execution_mode, :system
task :environment do
command %[source ˜/.bash_profile]
command %[rvm use 'ruby-2.3.1']
end
task :setup1 do
command %[sudo mkdir -p /var/www]
command %[sudo mkdir -p /var/www/html]
command %[sudo chown deployer /var/www/html]
command %[mkdir -p "/var/www/html/shared/log"]
command %[chmod g+rx,u+rwx "/var/www/html/shared/log"]
command %[touch "/var/www/html/shared/.env"]
end
desc "Deploys the current version to the server."
task :deploy do
deploy do
# Put things that will set up an empty directory into a fully set-up
# instance of your project.
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
#command %{rails db:migrate RAILS_ENV=production} #no migrations now
command %{rails assets:precompile RAILS_ENV=production}
invoke :'deploy:cleanup'
on :launch do
in_path(fetch(:current_path)) do
command %{mkdir -p tmp/}
command %{touch tmp/restart.txt}
end
end
end
end
[/code]
‘setup’ という単語はminaに組み込まれていて、sudoの無いコマンドでセットアップしてくれるのですが今回はsudoが必要なため setup1 という名前を代わりに使います。
ではプロダクションサーバーをセットアップしましょう。
(–verbose をつけると実行されている詳細なコマンドを見ることができます。)
[code lang=bash]
mina setup1
[/code]
ファイルを編集したので、リモートレポジトリーにコミットします(今はブランチのことは気にしなくて構いません)
[code lang=bash]
git add .
git commit -m "mention what your change about"
git push
[/code]
実際にデプロイしましょう。
[code lang=bash]
mina deploy –trace (–verbose)
[/code]
デプロイ先に指定したディレクトリを見てみましょう。
minaによって行われたことを確認してみてください。
[code lang=bash]
cd /dir/you/deplyoed/to
[/code]
最後に、nginxの設定をして、デプロイした内容が公開されるようにします。
/etc/nginx/sites-available/default
[code lang=c]
…
root /var/www/html/current/public;
…
server_name _;
passenger_enabled on;
rails_env production;
#location / {
…
#
#}
[/code]
開発用VMからページを見てみましょう。
どうやら secret_key_base が必要なようですので作りましょう。
通常このような鍵・パスワードのような機密事項または環境によって異なる値(IPなど)は環境変数によって管理するのが便利です。railsには’dotenv-rails’というgemがあるので使ってみましょう。
プロジェクトのルートディレクトリで、
touch .env
として環境変数を保存する隠しファイルを作ります。
次にsecret keyを生成します。
rake secret
これを”.env” のなかにsecrets.ymlに指定されている変数として書き込みます。
いい機会ですのでデータベースのパスワードも環境変数に置き換えてしまいましょう。
当然ですが、これらの値はリモートレポジトリにコミットすべきではありません。
gitにはgitignoreという機能があります。
.gitignore ファイルに .env を追加しましょう。
ここまでできたら、変更をgithubにプッシュしてから、デプロイし直します。
そして.envの内容をプロダクションサーバーにも書き込みます。(sshでログインするか、scpを使いましょう)
もう一度開発用VMからページを見てみましょう。
これで一通りの環境構築が完了しました。
デプロイする度にパスワードを要求されていると思います。
Password Authentication から Publickey Authentication に変えることでこれを不要にできます。