前回: Rails5.1.2 + Webpacker + ReactをCapstranoでデプロイする手順書をCapstranoでデプロイする手順書①
前書き
前回の続きになります。
前回はローカルでの作業
今回は、サーバ側の作業からデプロイまでを記載します。
サーバ手順
サーバ側にてデプロイ受けの設定を行います。
主にNginxの設定です。
Nginx設定
手順
- Nginxインストール
- 設定ファイル作成
Nginxインストール
WEBサーバである、Nginxをサーバへインストールします。
# Nginxのインストール
$ sudo yum install nginx
# Nginxの設定ファイル作成(conf.dまでディレクトリはNginxインストールで作成されます。)
$ sudo vim /etc/nginx/conf.d/アプリ名.conf
設定ファイルの内容は以下の通りです。
# log directory
error_log /var/www/rails/アプリ名/current/log/nginx.error.log; #ログ
access_log /var/www/rails/アプリ名/current/log/nginx.access.log; #ログ
# max body size
client_max_body_size 2G;
upstream unicorn {
# for UNIX domain socket setups
server unix:/var/www/rails/アプリ名/current/tmp/unicorn.sock;
}
server {
listen 80;
server_name サーバのIP;
keepalive_timeout 5;
root /var/www/rails/アプリ名/current/public;
try_files $uri/index.html $uri.html $uri @unicorn;
location @unicorn {
# HTTP headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://unicorn;
}
}
ざっくり解説すると
log directoryは、Capistranoが作成するcurrentの中を指定します。
ここは制約がないため、自由です。
upstream unicornには、Unicornのsockファイルを指定します。
サーバ上でUnicornが起動すると作成されるファイルです。
作成場所は前述したUnicornの設定ファイルで指定されたディレクトリです。
以上までできればあとは、もう少しです。
ディレクトリ作成
サーバ上にて、アプリケーションのディレクトリを作成します。
場所は基本自由ですが、Capistranoの設定ファイルに合わせた場所にしておきましょう
$ mkdir /var/www/rails/アプリ名
デプロイ
設定ファイルお疲れ様でした!
ここまでこれば、あとはデプロイを試すだけです。
まずは今までの設定ファイルをGit pushします(CapistranoがDeployするブランチを確認)
masterが最新になり、masterにUnicornやCapistranoの設定があることを確認したら
早速、ローカルで以下のコマンドを実行します。
$ bundle exec cap production deploy
設定ファイルに問題がなければ、続々とターミナルでDeployのコマンドが流れると思います。
その中で、Git cloneしたり、bundle installしたり、Webpacker compileしたり、migrateしたり云々
ちなみに
今更感ありますが
WebpacerのCompileで、例えば**manifest.jsonがない!!**といったエラーが出る場合
ほとんどが、サーバのスペック不足になります。
サーバと接続しながら、それでいてデプロイのコマンドを流して、それのログをローカルへ送ってなどしているためかと思います(ざっくり)
現に、最初はt2.microで作業していたのですが、Webpackerでよく転けるため、一度、t2.smallへ変更したところ
何事もなかったかのようにデプロイができました。
一度、ご確認を!
デプロイが正常に終了すると、deploy log_revisionと表示されターミナルが帰ってきます。
一度、サーバへSSHで入ってもらうと、作成した/var/www/rails/アプリ名の中にcurrentフォルダとreleasesフォルダが作成できていると思います。
フォルダ作成が確認できたら、Nginxを起動します。
sudo service nginx start
正常に起動したら、
ブラウザで接続し、アプリが表示されれば、Capistranoのデプロイ完成になります。
後書き
サーバ系を本格的に触るのは初めてでしたが、思ったよりも簡単にCapistranoでのデプロイが出来ました。
ReactをフロントとしたRailsのアプリは今、かなりキテいる構成だと思いますので、
今後の新規サービスデプロイのため、この手順は大切に覚えていこうと思います(笑)