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";
}
}