LoginSignup
0
0

More than 5 years have passed since last update.

CentOS(nginx)でDockerのcloud9をサブディレクトリに

Last updated at Posted at 2018-06-24

最近デスクトップクラウド化計画の一環でクラウドエディタを試しています。でもVSCodeの快適さに慣れてしまうとなかなかエディタを移れませんね……

そんな中cloud9を試してみようとDockerHubからkdelfour/cloud9-dockerを落としてみたのですが、普通に使う分には問題なさそうでしたがリバースプロキシを通してhttp://hostname:port/subdir/とアクセスすると、http://hostname:port/ide.htmlに飛ばされちゃって、うまくいかないわけです(´・ω・`)

じゃぁってhttp://hostname:port/subdir/ide.htmlでアクセスすると、
image.png
みたいなチップス表示がでて先に進みません。

「cloud9 subdirectory」で検索してもissueは上がっているものの「それが、何か?」みたいな感じになってて修正が期待できない感じなのですが、英語弱者なのでいまいちよくわかりません。コードを眺めて/ide.htmlの部分を/subdir/ide.htmlのように書き換えてみても、いまいち動きが変わらず力尽きました。

そんな中「参照先をリバースプロキシで書き換える方法があるよ」的な書き込みを見かけたので試してみたらうまく言った感じがするので、共有してみようと思います。

参考になったのはこちら。
https://github.com/c9/core/issues/237

1.nginxでsub_folderを使えるようにする

CentOSのnginxはそのまま入れるとsub_folderが使えないようで、confに記述するとエラーがでます。なのでモジュールを入れるべきなのですが、どれ入れたらいいのかわからなかったので全部パックを入れました。

sudo yum install nginx-all-modules

さすがに全部入りだと一発で動きました。

2.nginxにコンフィグを追加

http://hostname:3080/ide/ide.htmlでアクセスしてきたのをdocker(localhost:8080)に回します。

proxy_set_headerはいつものセットで、sub_filterのところを参考リンクから拾ってきました。結構書き換えが必要だったんですね。

/etc/nginx/conf.d/ide.conf
server{
    listen 3080;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location /ide/ {
        proxy_pass http://localhost:8080/;

        sub_filter_types        txt/html txt/css application/javascript;
        sub_filter              "/configs" "/ide/configs";
        sub_filter              '"/static' '"/ide/static'; #note the single and
        sub_filter              '"/vfs' '"/ide/vfs';
        sub_filter              '"/_ping' '"/ide/_ping';
        sub_filter_once         off;
    }
}

書き換え終わったらsudo systemctl reload nginxして有効化しておきます。

3.dockerを立ち上げて動作確認

kdelfour/cloud9-dockerが☆が多かったので使ってみました。使ってみた時点では最終ビルドが4ヶ月前なのでそこまで古くなかったです。代替で使おうとしていたcodeboxが3年前とかなので(´・ω・`)

sudo docker run -it -d -p 8080:80 -v /home/my_user/workspace:/workspace kdelfour/cloud9-docker

立ち上がったら、ブラウザでアクセスしてみます。

http://hostname:3080/ide/ide.html

ide.htmlまで必要です。http://hostname:3080/ide/で止めるとhttp://hostname:3080/ide.htmlにリダイレクトされてうまく動きません。

次のような画像が表示されたら成功です。
image.png

ユーザー/パスワードは設定できないみたいなので、nginxのconfの設定に特定IPのみ許可とか入れておくと良さそうですね。

/etc/nginx/conf.d/ide.conf
  location /ide/ {
    # 追加
    allow xxx.xxxx.xxx.xxx;
    deny all;
  }

認証をつける

コンテナ内の/etc/supervisor/conf.d/cloud9.confの中に起動コマンドがあるので、コマンドの最後に

--auth ユーザー名:パスワード

をつけてやれば認証が入ります。

認証が必要な場合はイメージをそのまま使うのでなく、Dockerfileでsedあたりで起動コマンドを書き換えて使うと良さそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0