Sakuraがやっているからそのreverse spellingだというArukas、 docker hostingをやっていて、 credit card登録は強制されますが1 containerなら無料というので、 専用SSH machine作ってJHipsterの開発/buildに使おうと企みました。
無料枠ではDocker Hubにあるものしか使えないとはいえ、
SSH serverの入ったdocker imageなんて色々あります。
でも使ってみると、基本的にはrootでlogin、
当然root loginをpermitしていて、
securityを維持するにはrootのpasswordを変える、
userを作って.ssh/authorized_keys
を作る、
とかなわけですが、けどroot loginのpermissionを切って
sshdをrestartすると、docker終わっちゃうんですよね当たり前ですが。
何かもっとこう、最初からUser作ってrootは禁止して、
とかっていうの無いかなー、
と物色していると、どれだったか忘れましたがgithub.comから
自分が登録したkeyをADD
してるものがあって、
あーなるほどー、と思って。
ADD https://github.com/$GITHUB_USER.keys /home/$GITHUB_USER/.ssh/authorized_keys
ということですね。
で、結局どうしても自分の欲しいものがなかったので、
Dockerfile
自作することにしました。
元になるimageはDocker Hub上になければいけないので、
Docker Hubを使ってGitHubにあるDockerfileからimageを自動生成するを参考に、
Github → Docker Hub → Arukasという流れになるように、
自分のGithub repository
→ 自分のDocker Hub repository
→ 自分のArukas App
と繋げて、
回るようにします。
Arukasでは変数定義が出来るというのでDockerfile
でGithub user名をENV
定義して、
でもそうするとDocker HubではbuildにコケるのでENV
には何かdefault値がないとダメで、
でもdefault値を付けちゃうとそのdefault値がArukas Appまで残っちゃうんですよね。
Docker コンテナの動作に必要な設定を起動時に渡すなどを見て、
え、shell script内じゃないとダメ?
じゃぁっていうんでentrypoint.sh
作って試してみたんですけど、
Arukasで起動に失敗しました。Docker Hubではbuild通ったのに。
Arukasでは起動時のmessageとかは出ないので、何が悪いのか分かりません。
困り果ててArukasのchatで相談投げると、翌営業日にはすぐreplyをくれて、
動作確認のためということでpull requestまで作ってくれました。
まずは早速そのまま取り込んで起動してみたんですが、
やはり起動に失敗。
けれども、別のaccountの方でENV
を編集することで再起動させてみたところ
うまく行ったので、何だったんでしょう?
結局今はどちらでも上手く立ち上がるようになりました。
ありがとうございました。
他、Arukasでハマったのは、開放するPort、 後で色々service立ち上げようと思って3000番とか8080番とか色々書いておいたら、 Endpointが有効にならないんですね。 これもArukasのchatで聞いて教えてもらったんですが、 確かによく読むと、「Docker image立ち上がった時点で 書いたPortが全て開いてないとEndpointが有効にならない」 と書いてありますね。 「一番上に書いたPortだけEndpointに繋がる」というのは 「アプリ編集」画面のEndpointのinfoに書いてあるからわかったんですが。
baseとなるdistributionは、
軽いというAlpine Linuxに。
アプリの管理もapk add ...
コマンドで出来ますし、
packageもscreen
やらopenjdk8
やらgradle
やら
結構色々あってびっくりです。
何かubuntuじゃなくてalpineで十分な気がしてきました。
目的としていたjhipster applicationのbuildは失敗しました。
specがしょぼい(128MB memory)のか通信量に制限があるのか、
jhipster
コマンドの途中で止まり、
applicationのscaffoldingが出来ません。
まー、無料枠なのでmachine specについては文句言えませんから、
しょーがないのかなーと。
ただ、Endpointがhttps
で手に入るので、
Nginxによるリバースプロキシの設定方法を参考に、
nginxによるreverse proxyとして使おうかなー、
と思っています。
custom domainも使えるとのことですが、
CDNと同じくDNSを自分でcontrol出来ねばならないので、
dynamic DNSでは使えず、custom domainは諦めました。
- docker hubの成果物(といってもpull requestくれた山田さんのおかげモノですが。山田さんありがとうございます!)
Githubにkeyを登録してあれば、Arukas AppでImageにこれ↑を指定し、
ENV
でGITHUB_USER
をGithubのuser名、
PROXY_PASS
をreverse proxyしたいURL、
にして立ち上げると、
当該hostにssh出来、
またEndpointで指定したURLでreverse proxy出来ます。
1 2 |
|
こんな技があるんですねーなるほどー。