野口です。みなさん Rails 使ってますか?
システム再起動したとき Unicorn 毎回 Capistrano つかって起動してますか?
でもみなさん Puma ですかね?
bundle exec cap production unicorn:start
これはあんまり頭使わなくていいのですが、正直だるいです。
プロセス立ち上がっている以上こんなことやらなくてもコマンドだけで起動できるはずです。
毎度これアプリ開発者にもそばにいてもらってインフラ側でやるのは現実的ではないので手動で起動する方法、毎回再起動しても Systemd でよしなに起動してくれる方法をあみだしました。
環境
- rbenv 使用
- Systemd 環境
ps コマンドで見るプロセス構成
だいたいコマンドの組み立てはわかります。
$ ps aux | grep unicorn
fred 309 0.0 0.0 112660 968 pts/3 S+ 19:43 0:00 grep --color=auto unicorn
fred 32743 6.3 2.3 347196 91048 ? Sl 19:42 0:01 unicorn master -c /path/to/railsapp/current/config/unicorn/production.rb -E deployment -D
fred 32746 0.0 2.2 347196 85420 ? Sl 19:42 0:00 unicorn worker[0] -c /path/to/railsapp/current/config/unicorn/production.rb -E deployment -D
fred 32749 0.0 2.2 347196 85420 ? Sl 19:42 0:00 unicorn worker[1] -c /path/to/railsapp/current/config/unicorn/production.rb -E deployment -D
fred 32752 0.0 2.2 347196 85420 ? Sl 19:42 0:00 unicorn worker[2] -c /path/to/railsapp/current/config/unicorn/production.rb -E deployment -D
fred 32755 0.0 2.2 347196 85416 ? Sl 19:42 0:00 unicorn worker[3] -c /path/to/railsapp/current/config/unicorn/production.rb -E deployment -D
fred 32758 0.0 2.2 347196 85420 ? Sl 19:42 0:00 unicorn worker[4] -c /path/to/railsapp/current/config/unicorn/production.rb -E deployment -D
完全手動
sudo -u fred -i
cd /path/to/railsapp/current
export RAILS_ENV=production
/home/fred/.rbenv/shims/bundle exec "unicorn_rails -D -c /path/to/railsapp/current/config/unicorn/production.rb -E production"
Systemd の Unit ファイルにする
/etc/systemd/system/application-unicorn.service
[Unit]
Description=Awesome Unicorn Application Server
Before=nginx.service
[Service]
User=fred
WorkingDirectory=/path/to/railsapp/current
EnvironmentFile=/etc/default/application-unicorn
Environment=RAILS_ENV=production
SyslogIdentifier=application-unicorn
PIDFile=/path/to/railsapp/shared/tmp/pids/unicorn.pid
ExecStart=/home/fred/.rbenv/shims/bundle exec "unicorn_rails -D -c /path/to/railsapp/current/config/unicorn/production.rb -E production"
[Install]
WantedBy=multi-user.target
これを配置したら
sudo systemctl daemon-reload
sudo systemctl enable application-unicorn.service
sudo systemctl start application-unicorn.service
sudo systemctl status application-unicorn.service
投稿者紹介
-
* Bio: Software Engineer, Network and Server Engineer
* Certification:
IPA: FE, AP, Network Specialist
Cisco: CCNA R&S, CCNP R&S
LPI: LPIC Level1, Level2, LPIC-3 Specialty LPI-304 Virtualization &High Availability