#はじめに
自分用のメモです。
設定や詳細は省き、コマンドのまとめにフォーカスしました。
起こりがちなエラーと併せて記載しております。
##環境
- 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.sock
やlog
の記述は/etc/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を使用していて、ファイルを追記・編集したものを反映させたい
- 大幅な変更があったので本番環境のデータベースの中身を一度消したい
といった場合に使える手順がこちら。
# まずは環境指定しつつドロップで丸ごと削除
$ 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! | 強制的に保存して閉じる |