Docker-composeによるNextCloudのインストール

2022年9月28日



NextCloudをDockse-composeでインストールした。

NextCloudのインストール

NextCloudのバージョンは、24.0.5を使った。NextCloudはバージョンによって異なるバグがあるようなので注意(経験上)。

version: '3'

services:
  nextcloud:
    image: nextcloud:24.0.5
    container_name: nextcloud
    volumes:
      - ./data:/var/www/html
    environment:
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=***
      - MYSQL_PASSWORD=***
      - MYSQL_HOST=mariadb
      - PHP_UPLOAD_LIMIT=16G
# port 3000
    restart: always
networks:
  default:
    external:
      name: common-network

common-network上にmariadbがあり、そちらでnextcloudというDBを作成済。注意点としてPHP_UPLOAD_LIMITを入れておかないと、デフォルトでは512Mまでしかアップロードできない。

https-portalの設定

httpsの処理をさせるには、https-portalを使用している。

version: '3'

services:
  https-portal:
    image: steveltn/https-portal:1
    container_name: https-portal
    ports:
      - '80:80'
      - '443:443'
    restart: always
    volumes:
      - ./ssl_certs:/var/lib/https-portal
    networks:
      - default
    environment:
      CLIENT_MAX_BODY_SIZE: 16G
      DOMAINS: >-
        example.com -> http://wordpress:80
        ,nodebb.example.com -> http://nodebb:4567
        ,nc.example.com -> http://nextcloud:80
      STAGE: 'production' # Don't use production until staging works
networks:
  default:
    external:
      name: common-network

注意点として、CLIENT_MAX_BODY_SIZE: 16Gを入れておかないと、デフォルトでは1Mまでしかアップロードできない。ただし、ここにこの設定をしてしまうと、他のすべてのウェブ画面でのユーザ入力に効いてしまうため、不特定多数が不特定の長さの入力ができる場合には注意する。

Windowsデスクトップクライアントからの接続

NextCloudは常にトラブルを起こす。ウェブ上でのログインに問題があるバージョンもあったが、今回は、Windows用クライアントからの接続に難があった。

「ログインURLがHTTPSで始まっているにもかかわらず、ポーリングURLがHTTPSで始まっていません。セキュリティ上の問題がある可能性があるため、ログインできません。管理者に連絡してください」

これは以下で解決されていた。

The polling url does not start with https despite the login url started with https

データ領域のconfig/config.phpに一行書き込めばよい。

  'trusted_domains' => 
  array (
    0 => 'domain.ltd',
  ),

  'overwrite.cli.url' => 'https://domain.ltd',
  'overwriteprotocol' => 'https',

※ブラウザ画面によるインストール操作後にconfig.phpが作成されるので、それ以前には編集できない。あるいは、そもそもconfig.sample.phpをもとにしてあらかじめconfig.phpを書いておいても良いのかもしれない。