TL;DR
IP制限がかかっている環境にherokuからリクエストを送りたい場合に、
固定IPが必要になるケースにて、proximoが役に立つという話
環境
- rails '5.2.3'
- ruby '2.5.2'
Setupドキュメント
本家を参考にすすめる、以下必要な手順をピックアップして記載する
https://devcenter.heroku.com/articles/proximo
Addonをとりこむ
$ heroku addons:create proximo:development
planは5ドルからスタートする
登録後に、herokuの環境変数PROXIMO_URLが追加されており、PROXYにつづく数字が固定IPとなっている
PROXYのURLは コンソールからも確認できる
$ heroku config | grep PROXIMO_URL
http://proxy:d898e01dc292431cbbbf3c79993de7d9@proxy-54-83-47-xx.proximo.io
この場合は、54.83.47.xx
が固定IPとなる
ProximoWrapperをRailsにとりこむ
Railsで使えるように、以下のようにcurlでファイルを取得する
$ cd ~/myapp
$ curl http://downloads.proximo.io/proximo-stacklet.tgz | tar xz
ここでCommitしろとマニュアルにはかいているのだが、
vendor/dante
が、herokuにpushするとき、
私の環境だけかもしれないが、以下のようなエラーがでたので、vendor配下を使わないようにする。
unexpected token at 'ERROR: ld.so: object 'libdl.so' from LD_PRELOAD
$ mv vendor/dante proximo/dante
としてpathを変更した。
それに伴い、bin/proximo内のvendorパスを上記で変更したパスに変更してCommitした
Procfileを作成
bin/proximoを頭につける。
web: bin/proximo bin/rails server -p $PORT -e $RAILS_ENV
別途workerが必要な場合は同じように対応する
固定IP確認
検証方法はなんでもよいのだが、簡易的にダミー環境を作成してそこにhttpリクエストをとばすことで確認する
require "rest-client" # gemで追加する
desc "Test static ip"
task :dummy_request, :environment do
RestClient.proxy = ENV["PROXIMO_URL"] if ENV["PROXIMO_URL"]
RestClient.get(ENV["PROXIMO_REQUEST_TEST_URL"])
end
PROXIMO_REQUEST_TEST_URL
には、例えば、ngrokなどをつかって外部エンドポイントをローカルにとりこむのが
はやいだろう。さらにそのエンドポイントにbinding.pryを仕込めば、requestをデバッグできる。
- ダミーリクエスト実行
$ heroku console rake dummy_request
- リクエスト受け先のRails
homeコントローラのtopをルートにしている
class HomeController < ApplicationController
def top
binding.pry
end
end
- 無事固定IPにてリクエストしていることを確認
$ request.remote_ip
=> "54.83.47.xx"