Docker でインストールした Nextcloud のバージョンアップ

Nextcloud のコンテナとボリューム

以前 (Nextcloud の docker を使ったインストールと設定) に Ubuntu 18.04 に Nextcloud をインストールした。 今回は、Ubuntu を 22.04 にバージョンアップして、以下の作業を行った。

Nextcloud のコンテナは本体の nextcloud_app_1 と MariaDB の nextcloud_db_1 だった。 まず

docker stop nextcloud_app_1
docker stop nextcloud_db

でコンテナを止めた。データは Docker のボリューム nextcloud_nextcloud と nextcloud_db に保存されていた。

docker volume inspect nextcloud_nextcloud
docker volume inspect nextcloud_db

を見ると /var/lib/docker/volumes/ 以下に保存されていたので

tar cvJf docker_volume_nextcloud_20220307.tar.xz /var/lib/docker/volumes/nextcloud_*

でバックアップを取った。 https://qiita.com/nishina555/items/bebcf76ca7890f257530 の方法の方が良かったかもしれない。

Nextcloud のバージョンアップ

Nextcloud のコンテナを変えるだけでよいが、バージョンは1つずつ上げていかないといけない。 Nextcloud のバージョンは 16 だったので、まず、17にする。

docker pull nextcloud:17.0

でイメージを取得する。

version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=ROOTPASSWORD
      - MYSQL_PASSWORD=MYSQLPASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    ports:
      - 127.0.0.1:8080:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    restart: always
    environment:
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=MYSQLPASSWORD
      - MYSQL_DATABASE=nextcloud
      - MYSQL_HOST=db:3306

という docker-compose.yml で以前にインストールした。docker-compose.yml のあるディレクトリで

docker-compose stop

とするとコンテナが停止する。down を実行するとコンテナやボリュームなどが削除されるので注意する。 docker-compose.yml の

app:
  image: nextcloud

のところを

app:
  image: nextcloud:17.0

に変更して

docker-compose up -d

を実行する。コマンドの実行直後は PHP や MariaDB が動いていて、バージョンアップのための処理が行われているのか、 Nextcloud にしばらく接続できなかった。 バージョンを1つずつ上げて 22.0 にし、最後に 22.2.5 にした。

バージョン 18 に上げたときに、Nextcloud の「管理」のところに2つのコマンドを実行するように書いてあったので

docker exec --user www-data nextcloud_app_1 php occ db:add-missing-indices
docker exec --user www-data nextcloud_app_1 php occ db:convert-filecache-bigint

を実行した。バージョン 19 への更新時は

docker exec --user www-data nextcloud_app_1 php occ db:add-missing-indices
docker exec --user www-data nextcloud_app_1 php occ db:add-missing-columns

を実行した。バージョン 20 への更新時は

docker exec --user www-data nextcloud_app_1 php occ db:add-missing-indices
docker exec --user www-data nextcloud_app_1 php occ db:add-missing-primary-keys
docker exec --user www-data -it nextcloud_app_1 php occ db:convert-filecache-bigint

を実行した。最後のコマンドは yes no を聞いてくるので、オプション -it をつけてある。 バージョン 20 へ更新時に

vim /var/lib/docker/volumes/nextcloud_nextcloud/_data/config/config.php

として

'default_phone_region' => 'JP',

を追加した。

Nextcloud の overwriteprotocol の設定 (2022-04-28)

Nextcloud の Android のクライアントをバージョンアップしたときに overwriteprotocol の設定が必要になった。 docker-compose.yml で NEXTCLOUD_OVERWRITEPROTOCOL=https を追加すれば良さそうなのだが、 うまくいかなかったので、コンテナの中のファイルを直接、編集した。 以下は docker で Nextcloud 23.0.3 にアップグレードした後に行った。 まず、エディタがインストールされていないようなので

docker exec --user root -it nextcloud_app_1 bash

として

apt update
apt install nano

として、bash を終了する。

docker exec --user www-data -it nextcloud_app_1 bash

nano config/config.php

として開き、最後のあたりに overwriteprotocol の行を追加した。

  'loglevel' => 2,
  'default_phone_region' => 'JP',
  'overwriteprotocol' => 'https',
);

Android のクライアントで使えるようにはなったが、 https://[Nextcloud のドメイン]/settings/admin/overview にアクセスすると、 「リバースプロキシヘッダーの構成が正しくないか、信頼できるプロキシからNextcloudにアクセスしています。」という 警告が残っていたので、次の nginx の設定ファイルにも修正が必要なのかもしれない。

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl_certificate     /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;

    location = /.well-known/carddav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
        return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location / {
        proxy_pass    http://localhost:8080/;
        proxy_redirect http:// https://;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Real-IP    $remote_addr;
        proxy_set_header    X-Forwarded-Host       $host;
        proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        client_max_body_size 0;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
        add_header Referrer-Policy "same-origin";
    }
}

Tags of current page

,