以前の記事では、HTTP通信でNextCloudへアクセスを行いました。ただ、実際に運用する場合にはHTTPS通信が必須ですので、今回はHTTPS通信を行うためのDockerfileを作成していきます。
独自ドメインを取得済みなことを前提とし、SSL証明書はLet's Encryptを利用して取得します。
前回の記事はこちら。
ディレクトリ構成と環境
実行環境のバージョン情報はこちらです。
- Windows11, WSL2 Ubuntu22.04
- Docker 24.0.2
- Docker Compose 2.18.1
こちらが今回のディレクトリ構成です。
$ tree
.
├── db.env
├── docker-compose.yaml
└── proxy
├── Dockerfile
└── uploadsize.conf
ファイルの作成
公式のサンプルをそのまま利用します。(公式サンプル:https://github.com/nextcloud/docker/tree/master/.examples/docker-compose/with-nginx-proxy/postgres/apache)
docker-compose.yamlの作成
SSL証明書を取得するためにproxy
サービスとletsencrypt-companion
サービスを利用しています。また、上記のapp
サービスで指定するドメインは、自分で取得したドメイン名を指定してください。
version: '3'
services:
db:
image: postgres:alpine
restart: always
volumes:
- db:/var/lib/postgresql/data:Z
env_file:
- db.env
redis:
image: redis:alpine
restart: always
app:
image: nextcloud:apache
restart: always
volumes:
- nextcloud:/var/www/html:z
environment:
- VIRTUAL_HOST=<your domain name>
- LETSENCRYPT_HOST=<your domain name>
- LETSENCRYPT_EMAIL=<your email>
- POSTGRES_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
networks:
- proxy-tier
- default
cron:
image: nextcloud:apache
restart: always
volumes:
- nextcloud:/var/www/html:z
entrypoint: /cron.sh
depends_on:
- db
- redis
proxy:
build: ./proxy
restart: always
ports:
- 80:80
- 443:443
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
volumes:
- certs:/etc/nginx/certs:z,ro
- vhost.d:/etc/nginx/vhost.d:z
- html:/usr/share/nginx/html:z
- /var/run/docker.sock:/tmp/docker.sock:z,ro
networks:
- proxy-tier
letsencrypt-companion:
image: nginxproxy/acme-companion
restart: always
volumes:
- certs:/etc/nginx/certs:z
- acme:/
tc/acme.sh:z
- vhost.d:/etc/nginx/vhost.d:z
- html:/usr/share/nginx/html:z
- /var/run/docker.sock:/var/run/docker.sock:z,ro
networks:
- proxy-tier
depends_on:
- proxy
volumes:
db:
nextcloud:
certs:
acme:
vhost.d:
html:
networks:
proxy-tier:
また、独自ドメインに対してDNSの設定とポートフォワードの設定が事前に必要です。
まず、WSLを起動しているホストのIPアドレスとドメインを結びつけましょう。その後、ルーターで80番と443番ポートに対する通信をホストにフォワーディングする設定を追加します。
※DNSの設定やDDNSの設定をやったことがない方は、下記の記事を参考に実施してみてください。
db.envファイル
docker-compose.yaml
で参照しているdb.env
ファイルはこちらです。
POSTGRES_PASSWORD=<your password>
POSTGRES_DB=nextcloud
POSTGRES_USER=nextcloud
パスワードは適当に修正してください。
proxyサービスのコンテナ
Nginxのイメージを利用したProxyサービスを作成しています。
./proxy/Dockerfile
はこちら。
FROM nginxproxy/nginx-proxy:1.3-alpine
COPY uploadsize.conf /etc/nginx/conf.d/uploadsize.conf
./proxy/uploadsize.conf
はこちら
client_max_body_size 10G;
proxy_request_buffering off;
特に設定を変更する必要がない場合、docker-compose.yamlで直接イメージを指定してもいかもしれませんね。
Dockerの起動
上記の設定ファイルを準備し、DNSとポートフォワーディングの設定が完了したら、下記コマンドでDockerコンテナを起動します。
docker compose up -d
-d
オプションはバックグラウンド実行するためのオプションです。もしエラーをデバックしたい場合、-d
は消して実行したほうが良いかもしれません。
動作確認
ブラウザを起動して、https://<your-domain>
でアクセスしてみましょう。アクセスできれば成功です。
まとめ
この記事では、HTTPS通信が可能なNextCloud実行用のDockerfileの作成方法を紹介しました。
独自ドメインの設定さえできれば、あとはすべて公式のサンプル通りなので、特に難しいことはありません。
次は、USBで繋げた外部ストレージにデータを保存する方法を紹介します。