SinatraアプリをCentOSで動かす(2)

前のエントリで、単純に動かすことには成功したので、今度はデーモンとして動かすことにチャレンジする。一部内容が重複するけど御勘弁。

まずは専用のユーザーを作る。

[takatoh@aybesea ~]$ sudo useradd sombrero
[sudo] takatoh のパスワード:
[takatoh@aybesea ~]$ sudo passwd sombrero
ユーザー sombrero のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードには一部に何らかの形でユーザー名が含まれています。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[takatoh@aybesea ~]$ sudo usermod -G wheel sombrero
[takatoh@aybesea ~]$ sudo usermod -aG staff sombrero

よくないパスワードと言われてるけど無視。
ここで新しいユーザーでログインし直す。

アプリの clone から セットアップまで。

[sombrero@aybesea ~]$ git clone https://github.com/takatoh/sombrero.git
[sombrero@aybesea ~]$ cd sombrero

と思ったら bundler のインストールでつまづいた。

[sombrero@aybesea sombrero]$ gem install bundler
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0 directory.

指摘されているディレクトリのパーミッションを見てみると、bill のものになっている。

[sombrero@aybesea sombrero]$ ls -l /usr/local/rbenv/versions/2.4.3/lib/ruby/gems
合計 0
drwxr-xr-x. 8 bill bill 100  1月  2 10:11 2.4.0

これは bill で rbenv global したせいだろうけど、このパーミッション設定は良くないよな。
変えてしまえ。

[sombrero@aybesea sombrero]$ sudo chgrp -R staff /usr/local/rbenv/versions/2.4.3
[sombrero@aybesea sombrero]$ sudo chmod -R 775 /usr/local/rbenv/versions/2.4.3

これでどうか。

[sombrero@aybesea sombrero]$ gem install bundler
Fetching: bundler-1.16.1.gem (100%)
Successfully installed bundler-1.16.1
Parsing documentation for bundler-1.16.1
Installing ri documentation for bundler-1.16.1
Done installing documentation for bundler after 5 seconds
1 gem installed

OK。つづき。

[sombrero@aybesea sombrero]$ bundle install
[sombrero@aybesea sombrero]$ cp config.yaml.example config.yaml
[sombrero@aybesea sombrero]$ rake setup

ここでいったん起動してみる。

[sombrero@aybesea sombrero]$ bundle exec rackup config.ru

OK。

unicorn のインストール。

[sombrero@aybesea sombrero]$ bundle exec gem install unicorn

unicorn の設定ファイル unicorn.conf を書く。

listen "9000"
worker_processes 2
pid "./unicorn.pid"
stderr_path "./unicorn.log"
stdout_path "./unicorn.log"

もう一度、今度は unicorn で起動。

[sombrero@aybesea sombrero]$ bundle exec unicorn -c unicorn.conf
bundler: failed to load command: unicorn (/usr/local/rbenv/versions/2.4.3/bin/unicorn)
Gem::Exception: can't find executable unicorn for gem unicorn. unicorn is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
  /usr/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/bundler-1.16.1/lib/bundler/rubygems_integration.rb:458:in `block in replace_bin_path'
  /usr/local/rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/bundler-1.16.1/lib/bundler/rubygems_integration.rb:478:in `block in replace_bin_path'
  /usr/local/rbenv/versions/2.4.3/bin/unicorn:23:in `'

あれ?Gemfile に書き足さなきゃいけないのか。じゃ、そうしてからもう一度。

[sombrero@aybesea sombrero]$ bundle update
[sombrero@aybesea sombrero]$ bundle exec unicorn -c unicorn.conf

今度はOK。

UNIT ファイルを書く。

[sombrero@aybesea sombrero]$ sudo vim /etc/systemd/system/sombrero.service
[Unit]
Description=Sombrero service

[Service]
Type=forking
PIDFile=/home/sombrero/sombrero/unicorn.pid
ExecStart=/usr/local/rbenv/shims/bundle exec unicorn -c unicorn.conf -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
WorkingDirectory=/home/sombrero/sombrero
User=sombrero
Group=sombrero

[Install]
WantedBy=multi-user.target

これでいってみよう。

[sombrero@aybesea sombrero]$ sudo systemctl start sombrero

ブラウザで確認……OK!!!!!
start したり stop したりしてもちゃんと動いていることが確認出来た。

最後は、自動起動するようにして、外部からもアクセスできるようにポートを開ければ完了。

[sombrero@aybesea sombrero]$ sudo systemctl enable sombrero
Created symlink from /etc/systemd/system/multi-user.target.wants/sombrero.service to /etc/systemd/system/sombrero.service.
[sombrero@aybesea sombrero]$ sudo firewall-cmd --add-port=9000/tcp --zone=public --permanent
success

これでマシンを再起動してみよう。

他のマシンから確認。ちゃんと動作していることが確認出来た。これで完了。

SinatraアプリをCentOSで動かす

ImageMagick を使うのでインストール。

[takatoh@aybesea ~]$ sudo yum install ImageMagick

GitHub から clone。

[takatoh@aybesea ~]$ cd w
[takatoh@aybesea w]$ git clone [email protected]:takatoh/sombrero.git

依存するライブラリをインストール。bundler はインストール済み。

[takatoh@aybesea w]$ cd sombrero
[takatoh@aybesea sombrero]$ bundle install

設定ファイルを作る。実験なのでデフォルトのまま。

[takatoh@aybesea sombrero]$ cp config.yaml.example config.yaml

アプリのセットアップ。データベースや必要なディレクトリなど。

[takatoh@aybesea sombrero]$ rake setup

これで一応の準備は済んだはず。rackup してみる。

[takatoh@aybesea sombrero]$ bundle exec rackup config.ru

これで localhost:9292 で待ち受ける。ブラウザで確認したら OK だった。

外部からアクセスするにはポートを開けてやる必要がある。

[takatoh@aybesea sombrero]$ sudo firewall-cmd --add-port=9292/tcp --zone=public --permanent
[sudo] takatoh のパスワード:
success

さらにアプリを起動するときにも -o 0.0.0.0 オプションが必要。これは Sinatra の仕様。

[takatoh@aybesea sombrero]$ bundle exec rackup -o 0.0.0.0 config.ru

これでアクセスできるはず……できないな。
firewalld をリスタートさせてみる。

[takatoh@aybesea sombrero]$ sudo systemctl restart firewalld
[sudo] takatoh のパスワード:
[takatoh@aybesea sombrero]$ sudo firewall-cmd --list-ports
9292/tcp

今度は大丈夫。外部からもアクセスできて、期待どおりに動作していることが確認出来た。