概要
先日ROCK64というメディアサーバに特化したシングルボードコンピュータコンピュータを購入しました。
用途は外付けHDDを繋げてメディアサーバとして用いることですが、その際にDocker使ってNextcloud立てられれば幸せだなぁと思ったのでやりました。
ARM64のOSが動いているものならRaspberry pi3とかでも動くと思います。
NextcloudのDBはMysqlが推奨なのでMariaDBのDockerImageを使いました。
※既にデータがある状態で使用する時はバックアップを取るなど十分注意して下さい。マウント先を間違えるなどするとデータが消えます。
→現在はOfficalでRaspberry Pi等のシングルボードコンピュータをサポートしているようです。
https://ownyourbits.com/nextcloudpi/
必要なもの
- 64BitのOS (ROCK64の場合は公式のDebianでは動かないのでubuntu minimalを入れました)
- ドメイン(外部から接続する場合)
- Docker環境(docker-compose)
- git(docker-composeのリポジトリを取ってくるのに使う)
手順
dockerの構築は以下のリポジトリに置いてあるのでcloneしてきます。
$git clone https://github.com/Khromium/NextCloudARM64.git
対象リポジトリに入ってdocker-compose.yml
を書き換えます。
#の部分を主に書き換えて下さい。下の実装ではmysqlのrootアカウントをそのまま使っています。
version: '2'
services:
nextcloud:
depends_on:
- db
build:
context: "./nextcloud"
args:
domain: "your.domain.com" #ドメイン設定
extra_hosts:
- "your.domain.com:172.18.0.2" #ドメイン設定
ports:
- "80:80"#ドメイン設定
environment:
MYSQL_USER: root #MYSQLのユーザ
MYSQL_PASSWORD: foo #MYSQLのパスワード
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
volumes:
- "/mnt/usbhdd:/var/www/html/data" #データのマウント先。外付けHDDに指定しておくと便利
links:
- db
db:
build: "./maria"
environment:
MYSQL_ROOT_PASSWORD: foo #MYSQLのルートのパスワード
volumes:
- "./data/maria:/config/databases" #Mysqlのデータ保存先
設定し終わったらdocker-compose.yml
のあるディレクトリ上で
$docker-compose up --build
して一度Dockerを動かします。
問題なく起動すればサーバのipにブラウザから接続するだけでNextcloudが表示されます。初回はadminアカウントの設定があります。
上記コマンドで起動した際はCtrl+C
で停止できます。
これ以降にdockerを起動させる場合は--build
を外して-d
を引数に付けて下さい。バックグラウンドで起動するようになります。停止の際は
$docker-compose stop
で止めます。
外部接続する場合
初回起動でadminのアカウントを設定後、dockerコンテナ内の/var/www/html/config/config.php
にドメインを設定します。
デフォルトではnano等のエディタが無いので入れてから行う必要があります。
$docker exec -it docker_nextcloud_1 /bin/bash #dockerコンテナに接続
$apt-get update; apt-get -y install nano; export TERM=xterm #nanoのインストール&設定
$nano /var/www/html/config/config.php #編集
...
'trusted_domains' =>
array (
0 => '192.168.1.23',
1 => 'your.domain.com' #ドメインを設定する
),
...
所感とか
ROCK64のRAMが4GBあるせいか、かなり快適でした。
HDDもUSB3.0対応していたのでダウンロードスピードは20~30MB/sぐらい出ました。
しばらく様子見で使ってみようと思っています。
2018/01/13追記
鯖が飛んだので再構築しようと思って最初からdocker-composeにhddのマウント設定を間違って書いたまま動かした。そしたら初期設定でrsyncが走っているようでHDDのマウント先のデータが消えた\(^o^)/オワタ
HDDマウントする際は慎重に...
おまけ SSL化
Nextcloudはデフォルトではapacheで動いているので設定ファイルを書き換える。
# VirtualHost内に Let's encrypt等で作った証明書を入れる。
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/privkey.pem
SSLCertificateChainFile /path/to/chain.pem
# を設定
リダイレクト設定
# VirtualHost内
<ifModule mod_rewrite.c>
RewriteEngine On
LogLevel alert rewrite:trace3
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</ifModule>
設定関連を反映させる
$ a2enmod ssl
$ a2ensite sslconfigname