TL;DR
- 高機能なクラウドストレージNextCloudを,オンプレミス環境にセットアップする方法を紹介します
- NextCloud用のdocker-compose.ymlを作ったので,これを使います
- docker-composeで,稼働に必要なコンテナ群をまとめて稼働させます
- https接続して通信の安全性を向上させます
- Let's Encryptで発行してもらった証明書を組み込みます
- httpsを使用しない方法についても合わせて記載します
構成
- docker-composeで,下図の3つのコンテナを立ち上げて運用します
- NextCloud本体
- nginx
- MariaDB
- NextCloudコンテナ
- 80/TCPでアクセスを受け付けます(Dockerでローカルホストからの接続しか受付ません)
- MariaDBコンテナ
- NextCloudがメタ情報の保存のために使用するコンテナです
- (任意) nginxでリバースプロキシする
- https(443/TCP)で受け付けたリクエストを,NextCloudコンテナにフォワードします
- リバースプロキシが別の場所にある場合は,docker-compose.ymlを編集して不使用にします
最も簡単な使い方
- HTTPS用の認証キーファイルを,
git clone
してきたディレクトリのkeys内に格納して,docker-compose up
します
git clone https://github.com/myoshimi/nextcloud-docker-compose
cd nextcloud-docker-compose
cp <Directory Path>/fullchain.pem ./keys/
cp <Directory Path>/privkey.pem ./keys/
docker-compose up -d
docker-compose.ymlでの作業の解説
- 3つのコンテナ(app, rev, db)を立ち上げます
- appコンテナ: NextCloud本体のコンテナ
- volumeとして,コンテナの
/var/www/html
を,ローカルディレクトリ(nextcloud-docker-compose)にマウントします - 環境変数
MYSQL_*
によって,同じdocker-composeのdbコンテナに接続します -
ports
ディレクティブで,ローカルホストからのみアクセス許可(3040/TCP)をしています
- volumeとして,コンテナの
- revコンテナ: リバースプロキシ用のコンテナ
- 443/TCP(https)を外部からのアクセス許可しています
- ローカルディレクトリのnginx.conf,およびkeysディレクトリの認証用鍵ファイル(fullchain.pem, privkey.pem)をマウントしています
- dbコンテナ: MariaDBコンテナ
- volumeとして,コンテナの
/var/lib/mysql
を,ローカルディレクトリにマウントします - 環境変数
MYSQL_*
で初期設定をしています -
expose
ディレクティブで,appコンテナからのみからのアクセス許可(3306/TCP)をしています
- volumeとして,コンテナの
- appコンテナ: NextCloud本体のコンテナ
- 不揮発化ボリュームについて
- コンテナが落ちたり消えたりしてもデータが飛ばないように,不揮発化領域を各コンテナがマウントしています
-
docker-compose up -d
したときに作られるディレクトリは,nextcloud-docker-compose内の以下のものです.これらが残っていれば,NextCloudの環境を復元できます-
/data
: NextCloudが持つデータ(プラグインアプリなど) -
/db
: MariaDBのデータ
-
リバースプロキシをしない場合
- 別の既存のリバースプロキシでNextCloudへ接続する場合,または,ローカルネットワークで運用してHTTPS接続が不要な場合
- インターネットから接続できる環境での運用はセキュリティ上問題になるのでご注意ください
- docker-compose.ymlを2箇所修正して,
docker-compose up -d
します.
1. リバースプロキシを使用しないようにする
- revコンテナ(nginx)に関する記述をdocker-compose.ymlから削除します
- rev:
- image: nginx:1.15
- network_mode: "host"
- ports:
- - "443:443"
- volumes:
- - ./nginx.conf:/etc/nginx/nginx.conf:ro
- - ./keys/fullchain.pem:/etc/nginx/keys/fullchain.pem:ro
- - ./keys/privkey.pem:/etc/nginx/keys/privkey.pem:ro
2. nextcloudのアクセス許可の変更
- docker-compose.ymlのnextcloudに関する記述を変更し,外部から80/TCPでのアクセスを許可します
- 以下の記述は,外部から3040/TCPでの接続を許可しています
- IPアドレス制限や,ポート番号は別のものを使用することができます
app:
image: nextcloud:15-apache
restart: always
ports:
- - "127.0.0.1:3040:80"
+ - "3040:80"
depends_on:
- db