Unicorn 手動起動完全マニュアル

Pocket

野口です。みなさん Rails 使ってますか?
システム再起動したとき Unicorn 毎回 Capistrano つかって起動してますか?
でもみなさん Puma ですかね?

bundle exec cap production unicorn:start

これはあんまり頭使わなくていいのですが、正直だるいです。
プロセス立ち上がっている以上こんなことやらなくてもコマンドだけで起動できるはずです。
毎度これアプリ開発者にもそばにいてもらってインフラ側でやるのは現実的ではないので手動で起動する方法、毎回再起動しても Systemd でよしなに起動してくれる方法をあみだしました。

環境

  1. rbenv 使用
  2. 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

投稿者紹介

Wataru Noguchi
* 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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください