Docker でインストールした Nextcloud のサーバを移転する
Nextcloud の docker-compose.yml
Ubuntu 22.04 のサーバを Ubuntu 24.04 のサーバに移すことにした。 次のような docker-compose.yml の Nextcloud を移転した。
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=[PASSWORD]
- MYSQL_PASSWORD=[PASSWORD]
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
ports:
- 3307:3306
logging:
options:
max-size: 50m
app:
image: nextcloud:30.0.4
ports:
- 127.0.0.1:8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
restart: always
environment:
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=[PASSWORD]
- MYSQL_DATABASE=nextcloud
- MYSQL_HOST=db:3307
- NEXTCLOUD_OVERWRITEPROTOCOL=https
[PASSWORD] には適切なパスワードを入力する。
移転元の Ubuntu 22.04
メンテナンスモードにして、データベースの SQL をテキストに出力、データを tar.gz にする。
docker-compose exec --user www-data app php occ maintenance:mode --on
docker-compose exec db sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --single-transaction --quick --lock-tables=false nextcloud' > nextcloud.sql
docker run --rm -v nextcloud_nextcloud:/src -v "$PWD":/backup alpine sh -c 'cd /src && tar czf /backup/nextcloud_data.tar.gz .'
移転先の Ubuntu 24.04
Docker とデータベースにデータを入れるときに使う mariadb-client をインストールする。
apt install docker.io docker-compose-v2 mariadb-client
SQL を読み込む。
docker compose up -d db
mariadb -h 127.0.0.1 -P 3307 -u root -p"$MYSQL_ROOT_PASSWORD" < nextcloud.sql
カレントディレクトリに nextcloud_data.tar.gz を置き、データを Docker の volume に入れる。
docker run --rm -v nextcloud_nextcloud:/dst -v "$PWD":/backup alpine sh -lc 'cd /dst && tar xzf /backup/nextcloud_data.tar.gz'
Nextcloud を動かす。
docker compose up -d app
次のコマンドなどで Nextcloud が動いていることを確認する。
docker compose logs -f app
docker compose exec --user www-data app php occ status
cron
Nextcloud が cron を使うためには https://transitive.info/2019/05/05/nextcloud-installation-by-docker/ の「Nextcloud での docker の利用」を行う。
nginx
ポート 8080 で Nextcloud が動いている状態になるので、SSL の設定をおこなった nginx などでポート 443 を 8080 につなぐ。
apt install nginx