119
143

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Rails】本番環境デプロイでよく使うコマンド集!AWS/unicorn/nginx/Capistrano使用

Last updated at Posted at 2019-09-24

#はじめに
自分用のメモです。
設定や詳細は省き、コマンドのまとめにフォーカスしました。
起こりがちなエラーと併せて記載しております。

##環境

  • Rails 5.2.1
  • ruby 2.5.1
  • capistrano 3.11.1
  • AWS(EC2)
  • Web Server Nginx
  • Application Server Unicorn

##目次

  • よく使う(分類なし)
  • 環境変数関連
  • capistrano関連
  • unicorn関連
  • nginx関連
  • MySql関連

#コマンド集
##よく使う(分類なし)

# ワーキングプロセス(pid)を確認
$ ps ax -H

# 容量確認
$ df -h

# EC2再起動(再起動後はサーバの起動も忘れずに行う)
$ sudo reboot

# 起動状況の確認、再起動(hogeにはmysqldやnginx)
$ sudo service hoge status
$ sudo service hoge restart

# EC2インスタンス接続時
$ ssh -i hoge.pem ec2-user@123.456.789※ElasticIP

# 自動デプロイを行う(以下ローカル環境、Appディレクトリで)
$ bundle exec cap production deploy

##環境変数関連
本番環境でも~/.bash_profileで環境変数設定できるが、Capistrano使用時は注意。
Capistranoは、実行時に~/.bash_profileを参照しないようにプログラムされているのでetc/envを使う。

# 環境変数書き込み(ローカル)
vim ~/.bash_profile
# 環境変数適用(ローカル)

source ~/.bash_profile

# 環境変数書き込み(Capistranoを使用する本番環境は特にこちら使用)
$ sudo vim /etc/environment
# 環境変数書き込み反映のため一度切る
$ exit
# 再度EC2インスタンスに接続
$ ssh -i xxxx....
# 環境変数が設定できているか確認
$ env | grep xxxxxx

# credentials.yml.enc(rails5.2)を編集(詳細は別記事にメモ)
$ sudo EDITOR=vim rails credentials:edit

##capistrano関連

# ログ確認
$ less log/capistrano.log
# ログファイルの内容全て表示
$ tail log/capistrano.log 

##unicorn関連
基本的にユニコーン起動のエラーはログを見に行くと解決の糸口が見つかる。
S3を設定してCapistranoで自動デプロイを行っても、なぜかS3に画像が保存されないことがあるが、その時は最新の起動時刻に違和感が無いかチェック。
実際に起動させたつもりの時間よりかなり前の記録しかなければ、killして再度自動デプロイかけてみる。

# 自動デプロイ設定前の起動コマンド
$ unicorn_rails -c config/unicorn.rb -E production -D
# 自動デプロイ設定前、アセットコンパイル後の起動
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

# ユニコーン停止
$ kill -QUITcat tmp/pids/unicorn.pid`

# ユニコーンのプロセス確認
$ ps aux | grep unicorn
# プロセス強制終了
$ kill -9 xxxxx

# ログ確認(current下など最新のlogの場所注意)
$ cat log/unicorn.stderr.log
$ cd current/log
$ cat unicorn.staderr.log
# 最新10行ログが見れる
$ tail unicorn.staderr.log 

# ルート権限使って不要なメモリ解放(ページキャッシュ・dentry・inode)
$ sudo su -
$ sync
$ echo 3 > /proc/sys/vm/drop_caches

##nginx関連
Nginxを介した処理を行う設定はunicorn.rbにも。

# rails.confでnginxの設定を修正する
$ sudo vim /etc/nginx/conf.d/rails.conf

# Nginxの設定を変更したら、忘れずに再読込・再起動
$ sudo service nginx reload
$ sudo service nginx restart

# 本番環境のホームディレクトリでlog見れる
$ sudo less /var/log/nginx/error.log 

##MySql関連
EC2を一度落とすとMySQLは落ちるのでmysql.sockがないというエラーに遭遇しやすい。
起動させると直るので要チェック!
また、mysql.socklogの記述は/etc/my.cnfで確認&修正!

my.cnfについて

my.cnf関連
# 場所を調べる(表示されたファイルは左から順に読み込まれている)
$ mysql --help | grep my.cnf

# ない場合は下記で作られる※中身については本稿では省略
$ sudo vi /etc/my.cnf

# ログ確認のためにファイルを作る場合はmy.cnfの記述とディレクトリを合わせる。
$ sudo touch /var/log/mysqld.log
$ sudo chown ユーザー名:wheel /var/log/mysqld.log

基本の操作コマンド

# 状態を確認する
$ sudo service mysqld status

# 起動コマンド
$ mysql.server start
$ sudo service mysqld start
$ sudo service mysqld restart

# ソケットファイル(mysql.sock)のディレクトリ確認
$ mysql_config --socket

# ルート権限で起動
$ mysql -u root -p  
Enter password: 設定したパスワード入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
~~~中略~~~~
mysql>

データベースの確認

ちなみにmysql>を起動させて本番環境のデータベースを確認する際は、下記の通り。

# データベース一覧を表示
mysql>show databases;
+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| hogehoge              |
| mysql                 |
| performance_schema    |
+-----------------------+
4 rows in set (0.00 sec)

# 使用するデータベースを選択
mysql> use hogehoge

# テーブルを表示
mysql> show tables;
+---------------------------------+
| Tables_in_hogehoge              |
+---------------------------------+
| ar_internal_metadata            |
| brands                          |
| categories                      |
| images                          |
| items                           |
| schema_migrations               |
| users                           |
+---------------------------------+
7 rows in set (0.00 sec)

# テーブルの定義の表示
mysql> describe categories;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | NO   |     | NULL    |                |
| ancestry   | varchar(255) | YES  | MUL | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

# テーブルの中身の確認
mysql> select * from images;
+----+---------------------+---------+---------------------+---------------------+
| id | image               | item_id | created_at          | updated_at          |
+----+---------------------+---------+---------------------+---------------------+
|  1 | hoge.jpg            |       1 | 2019-09-24 04:27:03 | 2019-09-24 04:27:03 |
|  2 | hoge2.jpg           |       2 | 2019-09-24 04:37:37 | 2019-09-24 04:37:37 |
|  3 | hoge3.jpg           |       2 | 2019-09-24 04:37:37 | 2019-09-24 04:37:37 |
+----+---------------------+---------+---------------------+---------------------+
3 rows in set (0.00 sec)

# データベースの確認終了
mysql> exit
Bye

マイグレーションについて

EC2インスタンス内でのrake db:migrateは環境指定をしてあげる必要あり。
基本的には、自動デプロイで最新のマイグレーションファイルが反映されるが、

  • seedを使用していて、ファイルを追記・編集したものを反映させたい
  • 大幅な変更があったので本番環境のデータベースの中身を一度消したい

といった場合に使える手順がこちら。

EC2/appname/current
# まずは環境指定しつつドロップで丸ごと削除
$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

# データベースを作成
$ rake db:create RAILS_ENV=production

# ここで一度自動デプロイをかけて、db:migrateに当たる操作を完了
# 無事作成されたら、再度EC2のcurrentディレクトリでseedを反映させる
$ rake db:seed RAILS_ENV=production

# もちろん必要に応じてリセット(drop・create・migrate)とかも使える
$ rake db:reset RAILS_ENV=production

##その他:vimの超基本操作
本番環境でエディタvimを操作する際、超最低限知っておくべき操作。

操作     意味
esc インサートモード/コマンドモード終了(ノーマル)
i インサート(挿入)モード(カーソル位置から)
a インサート(挿入)モード(カーソル後から)
: コマンドモード
:q 閉じる
:wq 保存して閉じる
:q! 強制的に閉じる
:wq! 強制的に保存して閉じる
119
143
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
119
143

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?