自分でしか使わない、外部には公開できないような gem がいくつかあるので、gem サーバをたてることにした。Gem in a Box (geminabox)は、プライベートな gem サーバだ。gem コマンドでインストールして、ちょっと設定ファイルを書くだけで使えるようになる。
じゃ、いってみよう。
環境
- Ubuntu 16.04 LTS
- Ruby 2.3.1p112
インストールと設定
前述したように gem コマンドでインストールできる。
takatoh@wplj $ sudo gem install geminabox
~/geminabox ディレクトリを作って、設定ファイルを書く。
takatoh@wplj $ mkdir ~/geminabox
takatoh@wplj $ cd ~/geminabox
takatoh@wplj $ vim config.ru
設定ファイルはこんな感じ、っていうかこれだけ。
require "geminabox" Geminabox.data = "/home/takatoh/geminabox/data" run Geminabox::Server
gem ファイルが格納される data ディレクトリを作る。
takatoh@wplj $ mkdir data
これで Gem in a Box 自体のインストールと設定は完了。
Supervisord で管理
さて、これをデーモンにする必要があるんだけど、昨日 Supvervisord を試したので今日も同じようにしてみる。設定ファイル /etc/supervisord.d/geminabox.ini をつぎのように書いた。
[program:geminabox] command=/usr/local/bin/rackup -p 9999 process_name=geminabox user=takatoh directory=/home/takatoh/geminabox autostart=true autorestart=true stdout_logfile=/home/takatoh/geminabox/geminabox.log stdout_logfile_maxbytes=1M stdout_logfile_backups=7 stdout_capture_maxbytes=1M redirect_stderr=true
これで OK のはず。動かしてみよう。
takatoh@wplj $ supervisorctl reload
Restarted supervisord
takatoh@wplj $ supervisorctl status
geminabox RUNNING pid 26835, uptime 0:00:08
sulaiman RUNNING pid 26836, uptime 0:00:08
ちゃんと動いてるようだ。
Nginxのバーチャルホスト設定
gembox というホスト名でアクセスできるように Nginx を設定する。/etc/nginx/sites-available/gembox が設定ファイルだ。
upstream geminabox { server 127.0.0.1:9999; } server { # port listen 80; # server name server_name gembox; # document root root /home/takatoh/geminabox; # index #index index.php index.html index.htm; # log files access_log /var/log/nginx/gembox/access.log combined; error_log /var/log/nginx/gembox/error.log warn; keepalive_timeout 60; proxy_connect_timeout 60; proxy_read_timeout 60; proxy_send_timeout 60; location / { proxy_set_header Host $http_host; proxy_pass http://geminabox; } }
/etc/nginx/sites-enabled/gembox にリンクをはる。
takatoh@wplj $ sudo ln -s /etc/nginx/sites-available/gembox sites-enabled/gembox
ログファイル用のディレクトリを作成。
takatoh@wplj $ sudo mkdir /var/log/nginx/gembox
そして、Ngixn をリロード。
takatoh@wplj $ sudo systemctl reload nginx
これで完了。ほかのマシンからブラウザで http://gembox/ にアクセスすると、期待どおり Gem in a Box のページにアクセスできた。
[追記]
アクセスはできたけど、試しに gem ファイルを1つアップロードしてみたら「uninitialized constant Gem::Util」というエラーが出てしまった。なんだこりゃ?
[追記2]
解決編。rubygems 自体が古いのが原因だったようだ。
takatoh@wplj $ sudo gem update --system
takatoh@wplj $ gem -v
3.0.1
念のため、データ置き場を作りなおす。
takatoh@wplj $ cd ~/geminabox
takatoh@wplj $ rm -rf data
takatoh@wplj $ mkdir data
リスタート。
takatoh@wplj $ supervisorctl restart geminabox
geminabox: stopped
geminabox: started
これで無事、オレオレgemをアップロードできるようになった。