TOC
NextcloudはSnapパッケージもあるがDocker(docker-compose)で運用
GNU AGPLv3+で提供されるNextcloudですが、簡便なインストール手順を検討するとsnap
とDocker
がオフィシャルで用意されています。
Ubuntuで使う場合は個人的にsnap
を使うことが多いですが、オンラインストレージという特性から、MicroSDで運用するには無理があり1、ストレージの保存場所はHDDにしたいところ。
snap板のNextcloudはストレージの保存場所をsnapパッケージ単位で設定するのではなく、環境変数SNAP_DATA
を参照することから、全snapパッケージで同じ場所を使う必要が出てくることと、snapパッケージをハンドリングする際に動的に環境変数を変更する方法が恐らくないため、今回はsnapパッケージではなくDockerを使って(起動・停止はdocker-composeを使用)、Nextcloudを構築します。
Docker, docker-composeをセットアップ
今回はインストールするDockerはUbuntuのdocker.io
パッケージにします。docker-compose
もUbuntuのパッケージをそのままインストールします。環境はUbuntu 20.10です。
# apt-get install docker.io docker-compose
Dockerで使うストレージをUSB接続のHDDに変更
Dockerをそのまま使うとSDカードがあっという間になくなるので、イメージの格納先をUSB接続のHDDに変更します。
NanoPi M4V2にdockerを仕込む(microSD運用で乗り切る)
ストレージの自動マウントをSystemdで行う(AutoFSではなく))
HDDのマウントポイントは/mnt/usbhdd1/
なので、変更方法は以下のようになります。
格納先ディレクトリを作成します。
# mkdir /mnt/usbhdd1/var/docker-image
systemdのサービス定義ファイルを変更用にコピーします。
# cp /lib/systemd/system/docker.service /etc/systemd/system/
/etc/systemd/system/docker.service
の[Service]
のExecStart行の末尾に-g /mnt/usbhdd1/var/docker-image
を追加します。また、OSの起動時にUSB接続のHDDのマウントが終わってからサービスを起動するようにします。
該当する変更行は以下の通りです。
--- /lib/systemd/system/docker.service 2020-12-05 08:02:49.000000000 +0900
+++ /etc/systemd/system/docker.service 2021-01-26 00:24:24.084517108 +0900
@@ -1,7 +1,7 @@
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
-After=network-online.target firewalld.service containerd.service
+After=network-online.target firewalld.service containerd.service mnt-usbhdd1.automount
Wants=network-online.target
Requires=docker.socket
Wants=containerd.service
@@ -11,7 +11,7 @@
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
-ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
+ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -g /mnt/usbhdd1/var/docker-image
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
変更を反映します。
# systemctl daemon-reload
# systemctl restart docker
格納場所が変更されていることを確認します。
# docker info | grep Root
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No kernel memory TCP limit support
WARNING: No oom kill disable support
Docker Root Dir: /mnt/usbhdd1/var/docker-image
docker-compose.ymlを作成
NextcloudのDockerイメージはDockerHubでARM64のイメージが配布されているので、Dockerfileからイメージをビルドすることなくそのままdocker pull
するだけでコンテナを起動できます。
docker-composeで運用するので、任意のディレクトリを作成します。
$ mkdir ~/nextcloud
$ cd ~/nextcloud
docker-compose.ymlを以下の内容を作成します( https://github.com/nextcloud/docker にあるまま)MYSQL_ROOT_PASSWORD
とMYSQL_PASSWORD
は任意の値を使います。
version: '2'
volumes:
nextcloud:
db:
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
restart: always
ports:
- 8080:80
links:
- db
volumes:
- nextcloud:/var/www/html
environment:
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
2021/11/21追記 rootless-dockerに移行した後にもう一度セットアップしようとしたら、管理者アカウントの作成時に
Error while trying to initialise the database: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.
というエラーが発生したため、services/db/commandを以下のように変更しています。(–innnodb-file-per-table=1以降を追加)
--- docker-compose.yaml.org 2021-01-25 22:24:43.832358223 +0900
+++ docker-compose.yaml 2021-11-21 19:25:25.845339027 +0900
@@ -8,7 +8,7 @@
db:
image: mariadb
restart: always
- command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
+ command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
volumes:
- db:/var/lib/mysql
environment:
docker-composeで起動
docker-compose.yml
があるディレクトリでrootユーザーになって、起動します。
# docker-compose up -d
問題なく起動したら、ブラウザからhttp://192.168.1.210:8080/
へ接続します(192.168.1.210は実行しているIPアドレス)
ということでNextcloudを使い始めることができるわけです。管理者アカウントを作成する作業に進みます。
Nextcloudのセットアップ
管理者アカウントの作成画面で「☑推奨アプリをインストール」で進むと、中でなにやら設定が終わった後にこんな画面が出て推奨アプリのインストール作業に進みます。これはこれで時間がかかります(通信速度の所以かもしれませんが)
終わったらこんな感じになるので進めていきます。
ログイン直後の画面です。ストレージにいくつかサンプルファイルが置かれていて、下にトークのメンションの有無、重要メール、カレンダーが見れるようになっています。
今回やりたいことは、手元にストレージとしてのWebDAVサーバーがなかったことなので、NASとは違った高機能ストレージとしてWebDAVサーバを構築することとスケジュールの管理を予定しています。
WebDAV接続
左上のメニューの右側にファイルマネージャのリンクがあるので、そこをクリックするとストレージの画面になります。
ストレージ画面になったら、左下の⚙設定をクリックするとWebDAV用のリンクが表示されます。これがWebDAVクライアントからアクセス先になります。
このURLは http://IPアドレス:8080/remote.php/dav/files/ユーザー名/ です。
試しにCaja2から接続してみます。
ファイル→サーバへ接続
接続先のサーバーの種類をWebDAV(HTTP)に変更します。
サーバーの接続先は接続先のURLをIPアドレス、ポート番号、接続先URLのパスに分解して設定、ユーザー名とパスワードはNextcloudのものを設定します。
全て入力したら「接続する」ボタンで接続します。
Nextcloudのストレージのファイルが表示されました。ファイル操作もここから行えます。処理のオーバーヘッドは多少ありますが、常に同期して動作していることを考えると使う分には問題ないかなという感触です。
カレンダーの設定についてはやってみたらすごく大変だったので別記事に纏めます。
スポンサーリンク
comments powered by Disqus