WSL上でNextCloudをDockerで実行する-HTTPS通信-

以前の記事では、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で繋げた外部ストレージにデータを保存する方法を紹介します。

  • この記事を書いた人

たかさん

犬と暮らすクラウドエンジニア。GCPが好きだけど良く触るのはAWSとAzureです。

-NextCloud
-, ,