まずは専用のユーザーを作る。
takatoh@nightschool $ sudo adduser sombrero ユーザー `sombrero' を追加しています... 新しいグループ `sombrero' (1001) を追加しています... 新しいユーザー `sombrero' (1001) をグループ `sombrero' に追加しています... ホームディレクトリ `/home/sombrero' を作成しています... `/etc/skel' からファイルをコピーしています... 新しい UNIX パスワードを入力してください: 新しい UNIX パスワードを再入力してください: passwd: パスワードは正しく更新されました sombrero のユーザ情報を変更中 新しい値を入力してください。標準設定値を使うならリターンを押してください フルネーム []: sombrero 部屋番号 []: 職場電話番号 []: 自宅電話番号 []: その他 []: 以上で正しいですか? [Y/n] Y
新しいユーザー sombrero に sudo する権限をつける。
takatoh@nightschool $ sudo gpasswd -a sombrero sudo [sudo] password for takatoh: ユーザ sombrero をグループ sudo に追加
ユーザー sombrero でログインしなおして、Ruby と Git のバージョンを確認。
sombrero@nightschool:~$ ruby -v ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux] sombrero@nightschool:~$ git --version git version 1.9.1
GitHub から Sombrero を clone。
sombrero@nightschool:~$ git clone [email protected]:takatoh/sombrero.git Cloning into 'sombrero'... Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts. remote: Reusing existing pack: 903, done. remote: Total 903 (delta 0), reused 0 (delta 0) Receiving objects: 100% (903/903), 282.66 KiB | 131.00 KiB/s, done. Resolving deltas: 100% (577/577), done. Checking connectivity... done.
必要なライブラリをインストール。
sombrero@nightschool:~$ cd sombrero sombrero@nightschool:~/sombrero$ sudo bundle install [sudo] password for sombrero: Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on this machine. Fetching gem metadata from https://rubygems.org/.......... Fetching additional metadata from https://rubygems.org/.. Resolving dependencies... Installing tilt 1.4.1 Installing haml 4.0.5 Using httpclient 2.4.0 Installing rack 1.5.2 Installing rack-protection 1.5.3 Installing sass 3.3.9 Installing sequel 4.12.0 Installing sinatra 1.4.5 Installing sqlite3 1.3.9 Using bundler 1.6.3 Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. Post-install message from haml: HEADS UP! Haml 4.0 has many improvements, but also has changes that may break your application: * Support for Ruby 1.8.6 dropped * Support for Rails 2 dropped * Sass filter now always outputs <style> tags * Data attributes are now hyphenated, not underscored * html2haml utility moved to the html2haml gem * Textile and Maruku filters moved to the haml-contrib gem For more info see: http://rubydoc.info/github/haml/haml/file/CHANGELOG.md
もともと運用していたディレクトリからアプリの設定ファイルをコピー。
sombrero@nightschool:~/sombrero$ cp /home/takatoh/w/sombrero/config.yaml .
データベースのマイグレーションを実行。
sombrero@nightschool:~/sombrero$ rake db:migrate プログラム 'rake' はまだインストールされていません。 次のように入力することでインストールできます:
rake が入ってなかった。インストール。
sombrero@nightschool:~/sombrero$ sudo gem install rake Fetching: rake-10.3.2.gem (100%) Successfully installed rake-10.3.2 1 gem installed Installing ri documentation for rake-10.3.2... Installing RDoc documentation for rake-10.3.2...
もともとの運用元から、データベースファイルをコピー(上書き)。
sombrero@nightschool:~/sombrero$ sudo cp /home/takatoh/w/sombrero/db/sombrero.db db
ここでいったん、アプリが正常に起動するか確認。
sombrero@nightschool:~/sombrero$ rackup app.ru --port 9000
OK。
Unicorn のインストール。
sombrero@nightschool:~/sombrero$ sudo gem install unicorn [sudo] password for sombrero: Fetching: kgio-2.9.2.gem (100%) Building native extensions. This could take a while... Fetching: raindrops-0.13.0.gem (100%) Building native extensions. This could take a while... Fetching: unicorn-4.8.3.gem (100%) Building native extensions. This could take a while... Successfully installed kgio-2.9.2 Successfully installed raindrops-0.13.0 Successfully installed unicorn-4.8.3 3 gems installed Installing ri documentation for kgio-2.9.2... Installing ri documentation for raindrops-0.13.0... Installing ri documentation for unicorn-4.8.3... Installing RDoc documentation for kgio-2.9.2... Installing RDoc documentation for raindrops-0.13.0... Installing RDoc documentation for unicorn-4.8.3...
いろいろググった結果を見ると Unicorn の前に nginx をたてるのが普通のようだけど、今回は Unicorn のみで行く。公式サイト(?)によれば、アプリのルートディレクトリで unicorn と打てば起動するらしい。
sombrero@nightschool:~/sombrero$ unicorn /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/configurator.rb:659:in parse_rackup_file': rackup file (config.ru) not readable (ArgumentError) from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/configurator.rb:77:in reload' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/configurator.rb:68:in initialize' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:100:in new' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/lib/unicorn/http_server.rb:100:in initialize' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/bin/unicorn:126:in new' from /var/lib/gems/1.9.1/gems/unicorn-4.8.3/bin/unicorn:126:in new' from /usr/local/bin/unicorn:23:in load' from /usr/local/bin/unicorn:23:in main'
あれ、ダメだ。あ、rackup のファイルが config.ru じゃなきゃだめなのか。引数に与えてみるか。
sombrero@nightschool:~/sombrero$ unicorn app.ru I, [2014-07-26T09:26:00.893170 #19156] INFO -- : listening on addr=0.0.0.0:8080 fd=7 I, [2014-07-26T09:26:00.893297 #19156] INFO -- : worker=0 spawning... I, [2014-07-26T09:26:00.893751 #19156] INFO -- : master process ready I, [2014-07-26T09:26:00.894064 #19158] INFO -- : worker=0 spawned pid=19158 I, [2014-07-26T09:26:00.894233 #19158] INFO -- : Refreshing Gem list I, [2014-07-26T09:26:01.337048 #19158] INFO -- : worker=0 ready
今度は無事起動。ポート8080で待機している。今までどおり 9000番ポートで動かすには –port 9000 をオプションとしてつけてやればいいようだ。
Unicorn の設定ファイル unicorn.conf を書く。
listen "9000" worker_processes 1 pid "./unicorn.pid" stderr_path "./unicorn.log" stdout_path "./unicorn.log"
どうも rackup するファイルは設定できないみたいだ。でも、unicorn コマンドの引数に与えてやれば、これで起動してみると、ちゃんと起動しているのが確認できた。
sombrero@nightschool:~/sombrero$ unicorn app.ru -c unicorn.conf
さて、今度はPCを起動したら自動で起動するようにする。それには /etc/init.d 配下に起動用のスクリプトを置く。
#!/bin/sh PATH=/sbin:/usr/local/bin:/usr/bin SOMBRERO_ROOT=/home/sombrero/sombrero case "$1" in start) cd ${SOMBRERO_ROOT} unicorn app.ru -c unicorn.conf -D ;; stop) PID=`cat ${SOMBRERO_ROOT}/unicorn.pid` kill -QUIT ${PID} ;; *) echo "Usage: sombrero {start|stop}" >&2 exit 1 ;; esac exit 0
unicorn についてる -D オプションはデーモン化するためのもの。
で、これをデーモン(サービス)として起動するには、OS のランレベルに応じた /etc/rc?.d フォルダの中に ‘S’ で始まるファイル名でソフトリンクを作ってやればいいらしい。もっとも、この部分は sysv-rc-conf というツールを使うのが通例のようだ。
それじゃ、まずランレベルの確認。
sombrero@nightschool:~$ runlevel N 2
N が以前のランレベルで、2が現在のランレベルを示しているらしい。以前のランレベルってなんだかわからないけど今回はパス。とにかく現在のランレベルが 2 だということがわかった。
つぎ、sysv-rc-conf のインストール。
sombrero@nightschool:~$ sudo apt-get install sysv-rc-conf
で、この sysv-rc-conf を sudo つきで起動すると下のような画面になる。
よくわからないけど、sombrero の行の 2 のカラムのところに X 印をつけて保存して終了。
/etc/rc2.d フォルダを確認してみると、S20sombrero という名前でファイル(ソフトリンク)ができているのが確認できる。
sombrero@nightschool:~$ ls -l /etc/rc2.d 合計 4 -rw-r--r-- 1 root root 677 3月 13 10:42 README lrwxrwxrwx 1 root root 20 7月 5 14:26 S20kerneloops -> ../init.d/kerneloops lrwxrwxrwx 1 root root 15 7月 5 14:26 S20rsync -> ../init.d/rsync lrwxrwxrwx 1 root root 18 7月 26 11:58 S20sombrero -> ../init.d/sombrero lrwxrwxrwx 1 root root 27 7月 5 14:26 S20speech-dispatcher -> ../init.d/speech-dispatcher lrwxrwxrwx 1 root root 15 7月 5 14:26 S50saned -> ../init.d/saned lrwxrwxrwx 1 root root 19 7月 5 14:26 S70dns-clean -> ../init.d/dns-clean lrwxrwxrwx 1 root root 18 7月 5 14:26 S70pppd-dns -> ../init.d/pppd-dns lrwxrwxrwx 1 root root 21 7月 5 14:26 S99grub-common -> ../init.d/grub-common lrwxrwxrwx 1 root root 18 7月 5 14:26 S99ondemand -> ../init.d/ondemand lrwxrwxrwx 1 root root 18 7月 5 14:26 S99rc.local -> ../init.d/rc.local
さあ、これで OK のはずだ。果たして PC を再起動してみると、自動的に起動しているのが確認できた。
今日はここまで。
「Sinatraアプリをunicornで動かす」への1件のフィードバック