2019年02月14日

RailsアプリをAWSでデプロイする③(デプロイ編)

前回は各種の設定ファイルの記述が終わりました。
今回は、ついにデプロイ作業に移ります。
終わりまであと少しなので頑張りましょう。

この記事の目次

  • 1.MySQLのセットアップ
  • 2.Railsのセットアップ
  • 3.Unicornのセットアップ
  • 4.エラー時の確認
  • 5.まとめ

MySQLの準備と起動

MySQLの文字コード設定

MySQLファイルで文字コードを設定します。
設定ファイルは/etc/my.confにあります。

/etc/my.conf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 以下追記
[client]
port=3306

[mysqld]
port=3306
character-set-server = utf8

データベースにデータが格納される際に文字コードの記述がないとエラーが発生します。

ユーザーとデータベースの作成

前回、config/database.ymlに記述した内容をMySQLに登録します。

MySQLにログインします。

commandline
$ mysql -u root

データベースとユーザーを作成して、権限を付与するコマンドを実行します。

mysql
mysql> create database {database-name};
mysql> create user '{user-name}'@'localhost' identified by '{password}';
mysql> grant all privileges on *.* to '{user-name}'@'localhost';
mysql> quit

データベースとユーザーが作成できたら先ほど設定したユーザーでパスワードを入力してログインしてみましょう。

commandline
$ mysql -u {user-name} -p
Enter password:

ログインができたら登録完了です。

Railsのセットアップ

プロダクション環境のDB構築

アプリのルートディレクトリ
$ bundle exec rake db:migrate RAILS_ENV=production

環境変数を本番環境に指定してデータベースを作成します。
MySQLが起動されていないか、ユーザーとデータベースが登録できていないと起動しません。

アセットのプリコンパイル

アプリのルートディレクトリ
$ bundle exec rake assets:precompile RAILS_ENV=production

assetファイルをプリコンパイルします。

この作業で本番用のCSSや画像を作成します。

Unicornのセットアップ

pidファイルの権限の編集

server root
$ pwd
/
$ sudo chown -R ec2-user var/run/

出力先のファイルが作成できないと起動時にエラーが発生します。

各種起動

Nginxの起動

commandline
$ sudo service nginx restart

MySQLの起動

commandline
$ sudo service mysqld start

Unicornの起動

アプリのルートディレクトリ
$ bundle exec unicorn_rails -c /var/www/project/アプリ名/config/unicorn.rb -D -E production

全てにエラーが発生せずに起動できたらアプリのURLにアクセスしてみてください。

もし画面がみられない場合や途中でエラーが発生した場合は下にログファイルの位置を書いておくので参考にしてください。

エラー時の確認

ログファイルの位置はこの記事を①から参考にした場合です。

Unicornのログファイルの位置

/var/run/unicorn.log

Nginxのログファイルの位置

/var/log/nginx/access.log

MySQLのログファイルの位置

/var/log/mysqld.log

アプリのログファイルの位置

/var/www/project/{app-name}/log/production.log

Unicornのプロセスの確認コマンド

$ ps -ef | grep unicorn | grep -v grep

Unicornの停止コマンド

server root
kill -QUIT `cat /var/run/unicorn.pid`

エラーの勘所

各種サービスがエラー発生なく起動した場合は、AWSのセキュリティーグループかNginxの設定が怪しいです。

Unicornは起動時にMySQLのファイルが作成されないと起動できません。

その他のエラーはログファイルをみて修正してください。

まとめ

大きくデプロイまで3回にまとめました。

エラーなしで完了するのは難しいと思います。
今後のためにもログファイルの見方に慣れておきましょう(笑)
ありがとうございました!