hidao’s blog

IT系とか読書ログとか。

nextCloudとcloud9をdockerで導入し、NginXでリバースプロキシをかけてサブディレクトリで切り替える

拙作nextCloudをdockerで導入し、NginXでリバースプロキシをかけてサブディレクトリで動かす cloud9をdockerで導入し、NginXでリバースプロキシをかけてサブディレクトリで動かす の合体技です。ほんとはこれがやりたかった!

概要

2019-04-30 045124.jpg

前提

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

version: '2'

volumes:
  nc:
  db:

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

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

nc:
  container_name: nc
  image: nextcloud

db:
  container_name: nc_db
  image: mariadb
  volumes:
    - db:/var/lib/mysql
  environment:
    - MYSQL_ROOT_PASSWORD=root   #
    - MYSQL_PASSWORD=root        # 左記のままでは防御力弱そうなので、
    - MYSQL_DATABASE=nextcloud   # ユーザ名とパスワードは変えましょう
    - MSYQL_USER=nextcloud       #

server {
  listen 80;
  server_name _;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

  location /core/ {
    proxy_pass http://nc$request_body;    
  }

  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コンテナとnc(nextCloud)コンテナ、nc9(cloud9)コンテナ、nc_db(mariadb)コンテナが作成され、バックグラウンドで起動します。

nextCloudサーバの設定

本来ならdocker-compose.ymlファイルから設定できないとあまり意味がないのですが、今回は解決方法がわからなかったので手動で直しました。😅 きれいな解決方法でないので、うまいやり方がわかり次第、記事を更新します。

# 上記 docker-compose の続きとします
sudo docker exec -it nc /bin/bash
# 以下は nc コンテナの内部での作業です
apt update && apt install vim
cp config/config.sample.php config/config.php
vi config/config.php
$CONFIG = array(
  ...
  // この中に値を追記する
  // ほかにも変数が登録されているけど、さわらない
'overwritehost' => '<物理サーバIP>',
'overwritewebroot' => '/nc',
);
# 手順2 の続き
exit

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

おわりに

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