#2 Nextcloudを構築して、優雅に暮らしてみる
以前、同じ内容の記事を書いたのですが、かくかくしかじかなことがありまして、Nextcloudを再構築する機会があったので、まとめておきます。
今回の構成
今回は、
- Nextcloud本体
- データベース
を分離して、構築していきます。
分離した理由は
・全体的なパフォーマンスの向上
だけです。それ以外に特に理由はないです。
データベースを構築する
Dockerのmariadb
を利用して、構築していきます。
Dockerのインストールは、下記の記事に書いたので割愛。
Dockerのインストールが終わったら、まずは適当な名前のディレクトリを作成します。
mkdir <適当な名前>
cd <作成したディレクトリ名>
続いて、docker-compose.yml
を作成します。
nano docker-compose.yml
編集画面になるので、内容を記載していきます。
途中の<root用パスワード>
と<nextcloudユーザーのパスワード>
は、自分で決めてください。最後のほうで使います。
version : "3"
services:
db:
image: mariadb
restart: always
ports:
- 3306:3306
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=<root用パスワード>
- MYSQL_PASSWORD=<nextcloudユーザーのパスワード>
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
volumes:
db:
書き込んだら、Ctrl+X
→y
で保存します。
保存したら、起動します。
docker compose up -d
これで、データベースの構築は完了です。
Nextcloud本体の構築
続いて、Nextcloud本体の構築をしていきます。
構築に必要なパッケージのインストール
おまじない。少し時間がかかるけど、気長に待つ。
sudo apt update && sudo apt full-upgrade -y
お約束の大量のパッケージインストール
sudo apt install apache2 php php-xml php-cgi php-cli php-mysql php-mbstring php-gd php-curl php-zip php-imagick php-gmp php-intl php-bcmath php-apcu ffmpeg zip libmagickcore-6.q16-6-extra redis-server php-redis -y
Nextcloudのダウンロード&インストール
Nextcloud本体のダウンロードをします。
wget https://download.nextcloud.com/server/releases/latest.zip
ダウンロードできたら、解凍します。
sudo unzip latest.zip -d /var/www/html/
解凍したフォルダの権限を変更します。
sudo chown -R www-data:www-data /var/www/html/nextcloud/
諸々の設定
PHP
設定ファイルを編集していきます。
sudo nano /etc/php/8.1/apache2/php.ini
変更点:
- memory_limit = 128M
+ memory_limit = 1024M
- post_max_size = 2M
+ post_max_size = 102400M
- upload_max_filesize = 2M
+ upload_max_filesize = 102400M
- output_buffering = 4096
+ output_buffering = Off
変更したら、保存して閉じます。
Nextcloud本体
Nextcloud本体の設定をしていきます。
sudo nano /var/www/html/nextcloud/config/config.php
変更点:
※************
は、パスワードやIPアドレスなので隠してあります。
<?php
$CONFIG = array (
'instanceid' => '************',
'passwordsalt' => '************',
'secret' => '************',
'trusted_domains' =>
array (
0 => '************',
),
'datadirectory' => '/mnt/DISK/nextcloud',
'dbtype' => 'mysql',
'version' => '25.0.2.3',
'overwrite.cli.url' => '************',
'dbname' => 'nextcloud',
'dbhost' => 'xx.xx.xx.xx:3306',
'dbport' => '',
'dbtableprefix' => 'oc_',
'mysql.utf8mb4' => true,
'dbuser' => 'nextcloud',
'dbpassword' => '************',
'installed' => true,
+ 'default_phone_region' => 'JP',
+ 'memcache.local' => '\\OC\\Memcache\\APCu',
+ 'enable_previews' => true,
+ 'enabledPreviewProviders' =>
+ array (
+ 0 => 'OC\\Preview\\Image',
+ 1 => 'OC\\Preview\\Movie',
+ 2 => 'OC\\Preview\\TXT',
+ 3 => 'OC\\Preview\\HEIC',
+ ),
);
Apache2のドキュメントルートの変更(お好み)
必須ではないので、お好みで設定してください。
sudo nano /etc/apache2/sites-enabled/000-default.conf
変更点:
GNU nano 6.2 000-default.conf *
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
- DocumentRoot /var/www/html/
+ DocumentRoot /var/www/html/nextcloud
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
変更したら、保存して閉じます。
設定の反映
sudo systemctl restart apache2
データフォルダの設定
私の環境では、データ本体は外付けHDD(4TB)にしているので変更します。
自動マウント設定
マウントポイントの作成。これをしないとエラーになる。
sudo mkdir -p /mnt/DISK
接続されているディスク情報。
sudo fdisk -l
私の場合は、これがデータフォルダ用のディスク情報
Disk /dev/sdb: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: External HDD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 6E77D684-77EF-4F94-A0F6-557082E0EED9
Device Start End Sectors Size Type
/dev/sdb1 2048 7814035455 7814033408 3.6T Linux filesystem
とりあえず、手動でマウントします。
sudo mount /dev/sdb1 /mnt/DISK
起動時に自動的にマウントされるように設定するために、ディスクのUUIDを調べておきます。
sudo blkid | grep /dev/sdb1
実行結果にある、UUID="******"
の部分をコピーしておきます。
コピーしたら、いよいよ自動マウントの設定をします。
sudo nano /etc/fstab
設定ファイルの末尾に、記載していきます。
UUID="<コピーしたUUIDを貼り付ける>" /mnt/DISK ext4 defaults 0 0
保存して閉じたら、自動マウントの設定は完了。
データフォルダのコピー
Nextcloudのデータフォルダは、/var/www/html/nextcloud/data
が初期位置になっています。
このフォルダを先ほどマウントした外付けHDDにコピーします。
sudo cp -aprvP /var/www/html/nextcloud/data /mnt/DISK/
Nextcloudの初期設定
ここまで来たら、あと少し!
ブラウザで、Nextcloudを開きます。
ユーザー名:<自由に決めてください。>
パスワード:<自由に決めてください。>
データフォルダ:/mnt/DISK/data
データベースのユーザー名:nextcloud
データベースのパスワード:<docker-compose.ymlのMYSQL_PASSWORD>
データベース名:nextcloud
データーベースのホスト名:<データベースのIPアドレス>:<ポート番号>
インストールを押して、しばらく経つとダッシュボードにリダイレクトされます。
そしたら、完了です。
最後に
構築より、記事書くのに疲れた。
スクラップに適当に書いてたのを、記事にしたので、そちらも見てください。
Discussion