hidao’s blog

IT系とか読書ログとか。

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

前提

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

version: '2'

volumes:
  nc:
  db:

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

  nc:
    container_name: nc
    image: nextcloud
    links:
      - db
    volumes:
      - nc:/var/www/html

  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 / {
    rewrite /nc/(.*)$ /$1 break;
    proxy_pass http://nc;
  }
}

コンテナの作成

cd workdir
sudo docker-compose up -d

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

nextCloudサーバの設定

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

# 上記 docker-compose の続きとします
docker-compose exec nc bash

# 以下は nc コンテナの内部での作業です
# 仮想端末を使っているのなら5行まとめてコピペでOK
cp /usr/src/nextcloud/config/config.sample.php /usr/src/nextcloud/config/config.php 
sed -i -e "s/'dbuser' => ''/'dbuser' => 'nextcloud'/" /usr/src/nextcloud/config/config.php
sed -i -e "s/'dbpassword' => ''/'dbpassword' => 'nextcloud'/" /usr/src/nextcloud/config/config.php 
exit
;

http://<物理サーバIP>/nc/にアクセスするとnextCloudが起動します。 <物理サーバIP>192.168.0.32(docker toolbox for windows の場合は192.168.99.100)など、適宜インストールしたサーバのものと読み替えてください。

初期セットアップ

http://<物理サーバIP>/nc/にアクセスすると、データベースの初期設定を終えるまでは以下の画面が表示されます。 設定内容は、docker-compose.ymlに合わせて入力して下さい。

「ユーザー名」と「データベースのホスト名」に割と引っかけなプレースホルダが表示されていますが、画像の下の説明を見ながら入力して下さい。

image.png

  • ユーザー名:admin (公開サーバの場合は、安全のため別のものにすること)
  • パスワード:admin (公開サーバの場合は、安全のため別のものにすること)
  • データフォルダー:/var/www/html/data (デフォルトのまま)
  • データベースのユーザ名;rootMYSQL_ROOT_PASSWORDで指定したもの。公開サーバの場合は、安全のため別のものにすること)
  • データベースのパスワード:rootMYSQL_PASSWORDで指定したもの。公開サーバの場合は、安全のため別のものにすること)
  • データベース名:nextcloudMYSQL_DATABASEで指定したもの)
  • データベースのホスト名(localhost):db:3306docker-comopse.ymlで指定したものにポート番号を指定する)

おわりに

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

2019.12.07 追記:

docker toolbox for Windows 用に手順を変更しました。docker ならどの環境でもいけると思いますが。