etc.imo-tikuwa.comを主にjavascriptやphpの実験スペースのような用途で使用しています。
今回このetcサブドメインの特定のパスへのアクセスが来たときだけrubyのWebアプリにプロキシするという設定を行ってみました。
公開するアプリケーションについて
GitHub:thinreports-line-maker
thinreportsというrubyの帳票出力ライブラリで使用するtlfファイルをブラウザ上で作成するツールです。
PDFダウンロード機能以外はrubyを必要としないため、rubyを使わなくても動作確認が可能な状態にはしています。
先日までは以下のような手順でetcサブドメイン配下で公開していました。
cd /var/www/etc/ git clone https://github.com/imo-tikuwa/thinreports-line-maker cd thinreports-line-maker/ rm -fR .bundle/ rm -fR .git/ rm -fR .settings/ rm -fR output/ rm -fR server/ rm -f .buildpath .gitignore .project README.md Gemfile Gemfile.lock .ruby_version app.rb mv public/* . rm -fR public/ npm ci
gitクローンした後、プロジェクト内の不要なファイルをすべて消しています。
また、/thinreports-line-makerへのアクセスでindex.htmlを表示したいのでpublicディレクトリの中身を1つ上のディレクトリに移動しています。
前述の通りrubyは使わないためbundlerによるライブラリのインストールなどは行っていません。
sinatraアプリの起動スクリプトについて
前回と同様ruby標準のwebrickのサーバーを使用しています。
前回のふるさと納税に関わる申請書を出力するWebアプリを3000番で動かしているのでこちらは3001番にしてみました。
#!/bin/bash APP_ROOT=$(dirname $(cd $(dirname $0); pwd)) cd $APP_ROOT start() { bundle exec ruby app.rb -o 0.0.0.0 -p 3001 >> $APP_ROOT/log/application.log 2>&1 & } stop() { killall -9 ruby } case "$1" in start) start ;; stop) stop ;; *) echo $"Usage: ./server.sh {start|stop}" esac
このブログ書いてる最中に気が付きましたがstop関数の処理を修正しないとこのスクリプトでサーバーを停止したときに両方のアプリが落ちてしまう(^q^
rubyと名の付くプロセスではなくポート番号を元にプロセスを取得してkillすればいいような気がする。
2020/01/23追記
起動スクリプト内の停止処理を以下のように修正しました。
アプリケーションを稼働させる
git clone https://github.com/imo-tikuwa/thinreports-line-maker cd ruby-onestop-tokurei-gen/ bundle install --path vendor/bundle cd public/ npm ci cd .. chmod +x ./server/server.sh ./server/server.sh start
nginxに設定を追記
/thinreports-line-makerへリクエストがあった時、3001番ポートで待機しているsinatraアプリケーションへプロキシする設定を追記しています。
server { ~~~省略~~~ + # display thinreports-line-maker + location /thinreports-line-maker/ { + rewrite /thinreports-line-maker/(.*) /$1 break; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://localhost:3001; + } }
動作確認
https://etc.imo-tikuwa.com/thinreports-line-maker/にアクセス。
「Load tlf」で作成済みのtlfファイルをロード→「Download pdf」でpdfファイルをダウンロードできることを確認。
「Load tlf」で作成済みのtlfファイルをロード→「Download tlf」でtlfダウンロード→Loadの際に指定したtlfファイルと差分ツールで比較を行い同一であることを確認。
その他
サブディレクトリに設置するためjavascriptやcssファイル、ajaxリクエストなどのサブリクエストをすべて相対パスで書かないといけない点は注意が必要。ちょこちょこ直しが発生してしまった(^q^