cloud9をdockerで導入し、NginXでリバースプロキシをかけてサブディレクトリでアクセスする


前提

  1. dockerdocker-composeはインストールされているものとします。
  2. 作業フォルダとファイル構成は以下ファイルツリーの通りです。
  3. docker-compose.ymlconfig/nginx.confは下記の通りあらかじめ用意しておきます。
ファイルツリー
workdir
│ └ docker-compose.yml
│
└─config
  └─ nginx.conf

docker-compose.yml
version: '2'

services:
  nginx-proxy:
    container_name: nginx
    image: nginx
    prots:
      - 80:80
    volumes:
      - ./config/nginx.conf:/etc/nginx/conf.d/default.conf
    links:
      - c9:c9

c9:
  container_name: c9
  image: sshinya/alpine-cloud9
  environment:
    USERNAME: user # 任意のBASIC認証ユーザ名
    PASSWORD: pass # 任意のBASIC認証パスワード

config/nginx.conf
server {
  listen 80;
  server_name _;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  location /c9/ {
    rewrite /c9/(.*)$ /$1 break;
    proxy_pass http://c9:8080;
  }

  location ~ /(configs/|static/|vfs/|_ping)(.*)$ {  # _pingの後ろに'/'は無いよ!
    proxy_pass http://c9:8080$request_body;
  }
}

コンテナの作成

cd workdir
sudo docker-compose up -d

nginxコンテナとc9(cloud9)コンテナが作成され、バックグラウンドで起動します。

http://<物理サーバIP>/c9/ide.htmlにアクセスするとcloud9が起動します。
<物理サーバIP>192.168.0.32など、適宜インストールしたサーバのものと読み替えてください。

おわりに

VPSのWebシェルを利用しているため、コピペが簡単にできず手打ちで記事を書きました。
おそらくtypoのひとつやふたつあると思われますので、動かない等不具合がありましたら、編集リクエストまたはコメントでお知らせください。