💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。
後でデプロイは自動化するが,ひとまず正しく動くことを手動で確認する
git の登録
-
すでに Rails により .gitignore が設定されている.macOS, Vim, Rails の .gitignore を追加しておく.被るものがあるが気にしないことにする.ちなみに,gibo は homebrew でインストールできる.
gibo update; gibo dump macOS Vim Rails >> .gitignore
- 現在のファイルを全てコミット・プッシュしておく.慣れないうちは SourceTree などの GUI アプリを使うとよい
デプロイサーバでの Rails 設定
デプロイサーバではすでに nginx がインストールされており,他の Rails アプリはリバースプロキシとして利用している. 今回は,Rails 側の production 設定を行なった後に,リバースプロキシの設定を追加する.
- リポジトリを pull し,bundle install, yarn, webpack などの設定は開発環境と同様に設定しておく.
-
config/database.yml の production の設定を行う.production については,デフォルトでパスワードの設定があるが,ホスト名とポート番号を追加しておく.パスワードは環境変数 ATTENDANCE_DATABASE_PASSWORD で設定するようになっている.
production: <<: *default database: attendance_production username: attendance password: <%= ENV['ATTENDANCE_DATABASE_PASSWORD'] %> host: localhost port: 5432
-
PostgreSQL には attendance というユーザが必要となる.postgres ユーザとなり,ユーザ作成およびユーザの設定を行う.
# postgres ユーザになる sudo su postgres # attendance ユーザを PostgreSQL に作成 createuser attendance # psql で attendance ユーザの設定を追加 (2行目以降は psql でのコマンド) psql template1 template1=# alter user attendance createdb; template1=# alter user attendance encrypted password '設定したいパスワード';
-
/etc/postgresql/9.5/main/postgresql.conf にて listen_addresses を localhost にしておく(デフォルトだから書かなくていいのかもしれないが).
listen_addresses = 'localhost'
-
/etc/postgresql/9.5/main/pg_hba.conf にて attendance_production の設定を追加しておく
local attendance_production attendance md5
-
postgresql サービスを再起動する
sudo service postgresql restart
-
今回のサーバはサーバ直下ではなく,サブディレクトリで運用する.このため,production 環境のみ prefix を追加するように設定する.このため,config.ru に以下の設定を追加する.この結果,環境変数 RAILS_RELATIVE_URL_ROOT が設定されている時のみ,map を追加することになる.
if ENV['RAILS_RELATIVE_URL_ROOT'] map ENV['RAILS_RELATIVE_URL_ROOT'] do run Rails.application end else run Rails.application end
-
puma は sock 経由でリバースプロキシにデータを転送する.このため,config/puma.rb に以下の設定を追加する
_proj_path = "#{File.expand_path('../..', __FILE__)}" _proj_name = File.basename(_proj_path) _home = ENV.fetch('HOME') { '/home/hkob' } pidfile "#{_home}/run/#{_proj_name}.pid" bind "unix://#{_home}/run/#{_proj_name}.sock" directory _proj_path
-
この設定では $HOME/run の下に pid ファイルと sock ファイルを作成するため,事前にディレクトリを作成しておく
mkdir ~/run
-
サーバを起動する前に production のデータベースを作成しておく
env ATTENDANCE_DATABASE_PASSWORD='設定したデータベースパスワード' RAILS_ENV=production bin/rails db:create
- サーバを起動する.このためには,RAILS_MASTER_KEY が必要となる.Rails new した時に,config/master.key が作成されているので,その内容をメモしておく.
-
とりあえずテストでサーバが起動することを確認する
env RAILS_MASTER_KEY='config/master.key の内容' RAILS_RELATIVE_URL_ROOT=/attendance ATTENDANCE_DATABASE_PASSWORD='設定したデースベースパスワード' RAILS_ENV=production bin/rails s
-
とりあえずテスト用の reboot スクリプトも作っておく.パスワードなども書かれているので,リポジトリ外に設置しておくこと.
#!/bin/sh kill -KILL `cat ~/run/attendance.pid` cd /home/hkob/attendance bin/webpack RAILS_RELATIVE_URL_ROOT=/attendance ATTENDANCE_DATABASE_PASSWORD='設定したデータベースのパスワード' RAILS_MASTER_KEY='config/master.key の内容' RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production bundle exec puma -w 2 -d
-
このスクリプトを実行すると既存の puma プロセスを止め,新しいサーバを起動する
../reboot.sh
nginx の設定
-
nginx はリバースプロキシとして設定する.ここでは今回の設定部分のみを記載する./etc/nginx/sites-available/default の関係部分を示す./attendance は upstream で sock を参照するように設定しているだけである.
server { listen 443 ssl; (中略) location /attendance { proxy_pass http://attendance; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; root /var/www/html/attendance/public; } (中略) } upstream attendance { server unix:/home/hkob/run/attendance.sock fail_timeout=0; }
-
設定が終わったら nginx を restart する
sudo service nginx restart
-
該当サーバの /attendance をブラウザでアクセスし,クライアントと同じ表示がでればデプロイ完了である.
長くなったので今日はここまで