環境
- Apache 2.2.22
- Passenger 4.0.48
- Ruby 2.1.1p76
- Rails 4.1.4
- RVM 1.25.28
- MySQL 5.5.38
Ruby development stack の準備
(参考)Ruby development stack on Google Compute Engine
(参考)Deploying a Rack-based Ruby application
GCEのRubyスタックを作成する。(パスワードなどは例ですので適宜変更してくださいね)
- パスワード:mysqlrootpassword
- ゾーン:asia-east1-a
手順
- まず「プロジェクト/概要」ページ右下の「その他」をクリックする。
- 次に表示されたページの「Deploy the Ruby Stack on Compute Engine」をクリックする。
- パスワードを入力し「詳細」をクリックする。
- お好みのゾーンを選びましょう。
- 5〜10分待つとインスタンスが生成される。
- 「View your Ruby stack in the Developers Console」をクリックする。
- VM インスタンスのページに遷移する。
- 「SSH」をクリックすると・・・
- コマンドラインの文字列が表示される。
WEBrick
development環境
開発用にTCP 3000番のポートを通す。
gcloud compute firewall-rules list
gcloud compute firewall-rules create rails --allow tcp:3000
サーバーにログインする。
gcloud compute --project FOO ssh --zone "asia-east1-a" BAR
サンプルのRailsアプリとMySQLのテーブルを作成する。
- therubyracer gemを有効にする。
- パスワードを設定する。
mkdir webapps && cd webapps
rails new -B -d mysql blog && cd blog
sed -i -e "s/# gem 'therubyracer'/gem 'therubyracer'/" Gemfile
rvmsudo bundle
rails g scaffold Post title body:text
sed -i -e "s/password:$/password: mysqlrootpassword/" config/database.yml
rake db:create
rake db:migrate
rails s
ウェブブラウザで http://<<外部IP>>:3000/posts
を開いて動作を確認する。
mysql -uroot -pmysqlrootpassword -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| blog_development |
| blog_test |
| mysql |
| performance_schema |
+--------------------+
mysql -uroot -pmysqlrootpassword -e "drop database blog_development;"
mysql -uroot -pmysqlrootpassword -e "drop database blog_production;"
mysql -uroot -pmysqlrootpassword -e "flush privileges;"
production環境
データベースを作成すると、MySQLのrootユーザーのパスワード入力を促される。
rake db:create RAILS_ENV=production
> mysqlrootpassword
rake db:migrate RAILS_ENV=production
mysql -uroot -pmysqlrootpassword -e "select Host, User from mysql.user;"
+-------------------------+------------------+
| Host | User |
+-------------------------+------------------+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | blog |
| localhost | debian-sys-maint |
| localhost | root |
| rubystackbox-cb293-grbj | root |
+-------------------------+------------------+
mysql -uroot -pmysqlrootpassword -e "drop user blog@localhost;"
mysql -uroot -pmysqlrootpassword -e "flush privileges;"
production環境用にassetsをコンパイルして、config.serve_static_assetsをtrueに変更する。
rake assets:precompile RAILS_ENV=production
sed -i -e "s/config.serve_static_assets = false/config.serve_static_assets = true/" config/environments/production.rb
SECRET_KEY_BASE='secret' rails s -e production
Apache
Passenger
アプリを sub URI(/subapp)でデプロイする。
アプリ用の設定ファイルを作成する。
cd /etc/apache2/sites-available
ls -la
sudo cp default blog
sudo vi blog
環境変数 SECRET_KEY_BASE を設定する。
アプリのパスは適宜変更してください。echo $HOME/webapps/blog/public
echo $HOME/webapps/blog
<VirtualHost *:80>
SetEnv SECRET_KEY_BASE secret
Alias /subapp /home/usutani/webapps/blog/public
<Location /subapp>
PassengerBaseURI /subapp
PassengerAppRoot /home/usutani/webapps/blog
</Location>
<Directory /home/usutani/webapps/blog/public>
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
config.serve_static_assets を false(デフォルト値)に戻す。
cd ~/webapps/blog
sed -i -e "s/config.serve_static_assets = true/config.serve_static_assets = false/" config/environments/production.rb
設定ファイルを有効にする。
sudo a2dissite default
sudo a2ensite blog
sudo apache2ctl -t
sudo service apache2 reload
ウェブブラウザで http://<<外部IP>>/subapp/posts を開いて動作を確認する。
cd ~/webapps/blog
tail -f log/production.log
assets に変更があるなら(ある度に)コンパイルする。
デプロイし直す。
cd ~/webapps/blog
rake assets:precompile RAILS_ENV=production
touch tmp/restart.txt