はじめに
NextCloud
セキュアでLineチックなOSSを探ししていて、NextCloudを知りました。
NextCloudはownCloudからフォークしたプロジェクトでその後も拡張を加えられているプロジェクトです。
具体的な機能として、
・ファイル共有
・メールクライアント
・カレンダー
・チャット
・Web会議
があり、グループウェアとしても使用可能です。
特にweb会議の機能は昨今のコロナ禍もあり、注目されている機能ではないでしょうか。
社内のLAN上にNextCloud環境を構築することにより、セキュアなWeb会議環境が作れるのが魅力だと感じています。
https-portal
https-portalはDockerで起動する、httpsリバースプロキシになります。
既存のwebページに特に手を加えることもなく、httpsリバースプロキシを立てられるという便利なコンテナです。
https-portalのDockerイメージはIntel系のみ動作するようです。
Raspberry Pi等、AMD系のCPUでは動かないようですので注意が必要です。
https-portalが必要となった理由は、NextCloudでWeb会議を行う場合、https接続が必須との条件によるものです。
#この投稿をした理由
タイトルのDocker+NextCloud+https-portalの構成例がネット上に見つからなかったので投稿しました。
興味はあるので試したい。でも環境は汚したくない。って人をターゲットにしています。
参考URL
非常に参考になりました。秀逸な記事をありがとうございました。
NextcloudをDockerで構築する手順
NextCloudをDockerでデプロイする(SMB対応)
https-portalで簡単https対応!
環境
CentOS Linux release 7.7.1908 (Core)
Docker version 1.13.1, build cccb291/1.13.1
docker-compose version 1.22.0, build f46880fe
NextCloud 19.0.0
https-portal 1.11.0
構築手順
といってもDockerなので・・・
適当なディレクトリを掘って、docker-composeで起動します。
(丁寧に説明しても、みんな結論だけ知りたいのだろうし・・・)
# mkdir NextCloud
# cd NextCloud
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password # 適当なパスワードを設定
- MYSQL_PASSWORD=password # 適当なパスワードを設定
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
# ports:
# - 80
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
https-portal:
image: steveltn/https-portal:1
ports:
- "80:80"
- "443:443"
depends_on:
- app
restart: always
environment:
# DOMAINS: 'localhost.example.com -> http://app:80'
DOMAINS: 'litmus.local -> http://app:80'
# DOMAINS: 'litmus.local'
STAGE: local
# volumes:
# - ./org-chimata-ssl-certs:/var/lib/https-portal
STAGE は local,staging,productionのいずれかが指定できます。
Let's encryptを使用することができますが、今回はお試しですので、
オレオレ証明書になるlocalを指定しています。
app:のportのところにコメントがありますが、あえて残してます。
不要ですよ。という意味です。
https-portalのvolume:にもコメントを残しています。
この部分は作成した証明書を保存する場合の記述方法とのことでしたが、
当方の環境ではpermisson deniedでうまく動いてくれませんでした。
必要に応じてポートを開けます。
# firewall-cmd --add-port=80/tcp --zone=public --permanent
# firewall-cmd --add-port=443/tcp --zone=public --permanent
# firewall-cmd --reload
success
# docker-compose up -d
(省略)
Starting nextcloud_db_1 ... done
Starting nextcloud_app_1 ... done
Starting nextcloud_https-portal_1 ... done
今回はDNSに登録せず、hostsファイルの登録で対応します。
ip a s などでサーバ側のIPアドレスを確認します。
また、hostnameなどで、自ホストネームを確認します。
[root@litmus NextCloud]# hostname
nextcloud.local
[root@litmus NextCloud]# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:02:94:07 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.174/24 brd 192.168.2.255 scope global noprefixroute dynamic eth0
valid_lft 19064sec preferred_lft 19064sec
inet6 fe80::5b0e:38df:1ea7:53b2/64 scope link noprefixroute
valid_lft forever preferred_lft forever
クライアント側をwindowsとして、hostsファイルを設定します。
メニュー>Windows システムツール>コマンド プロンプト>(右クリック)>その他>管理者として実行
c:\WINDOWS\system32
notepad drivers\etc\hosts
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
192.168.2.174 nextcloud.local # <-確認したIPアドレス、hostnameを追加
クライアント側のWindowsでブラウザを起動します。
起動したらアドレスバーに、https://nextcloud.local とタイプし、接続できれば成功です。
接続出来たらDBの設定をします。
画面に、「SQLiteを選択しました・・・」というメッセージが出力されますのでDBを指定します。
画面中央の「ストレージとデータベース▼」をクリックします。
出てきた項目の「データベースを選択してください」で「MySql/MariaDB」を選択します
データベースのユーザ名:nextcloud <-docker-compose.ymlで指定したMYSQL_USER(ごめん。MYSQL_ROOT_PASSWORDかも。)
データベースのパスワード:nextcout <-docker-compose.ymlで指定したMYSQL_PASSWORD
データベース名:nextcloud <-docker-compose.ymlで指定したMYSQL_DATABASE
localhost:db:3306 <-mariadbのデフォルトポート。「db」はdocker-compose.ymlの指定情報
「セットアップを完了します」をクリックします。
※管理者アカウントのユーザ/パスワードは任意です。
デバッグ
うまくつながらない場合もあるかもしれませんのでデバッグ方法をメモします。
##https-portalを外してやり直します。
とりあえずコンテナの停止
# docker-compose down
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=password # 適当なパスワードを設定
- MYSQL_PASSWORD=password # 適当なパスワードを設定
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
ports:
- 80:80
# ↑コメント外れてます
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
# https-portal:
# image: steveltn/https-portal:1
# ports:
# - "80:80"
# - "443:443"
# depends_on:
# - app
# restart: always
# environment:
# # DOMAINS: 'localhost.example.com -> http://app:80'
# DOMAINS: 'litmus.local -> http://app:80'
# # DOMAINS: 'litmus.local'
# STAGE: local
# volumes:
# - ./org-chimata-ssl-certs:/var/lib/https-portal
起動します。
# docker-compose up -d
上記はhttps-portalを除外しています。
ブラウザでhttp://nextcloud.local で接続してください。 <- http sではなくhttpであることに注意
NextCloudの画面が出れば、NextCloud側には問題がないということになります。
##https-portalだけにして確認します。
とりあえずコンテナの停止
# docker-compose down
https-portalだけにします。
https-portal:
image: steveltn/https-portal:1
ports:
- "80:80"
- "443:443"
depends_on:
- app
restart: always
environment:
# DOMAINS: 'localhost.example.com -> http://app:80'
DOMAINS: 'litmus.local -> http://app:80'
# DOMAINS: 'litmus.local'
STAGE: local
volumes:
- ./org-chimata-ssl-certs:/var/lib/https-portal
起動します。
# docker-compose up -d
ブラウザでhttp s://nextcloud.local で接続してください。 <- http ではなくhttp sであることに注意
nginxの初期画面が表示されるようであればhttps-portalは正常に動いています。
それでもダメな時
まずdocker logs で各コンテナのログを確認してください。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc73024b476b steveltn/https-portal:1 "/init" 45 minutes ago Up 43 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp nextcloud_https-portal_1
75eee3b780e3 nextcloud "/entrypoint.sh ap..." 2 days ago Up 43 minutes 80/tcp nextcloud_app_1
d4bd53696f14 mariadb "docker-entrypoint..." 2 days ago Up 43 minutes 3306/tcp nextcloud_db_1
# docker logs -f --tail="20" nextcloud_https-portal_1
# docker logs -f --tail="20" nextcloud_app_1
# docker logs -f --tail="20" nextcloud_db_1
エラーメッセージが出ていないか確認して下さい。
##Raspberry Piでお試しになっている場合は注意してください。
https-portalはRaspberry Piでは動かないようです。
vmware、Hyper-V等でwindows上に仮想環境を用意し、Intel系のCPUで再度お試しください。