📂

#2 Nextcloudを構築して、優雅に暮らしてみる

2023/01/04に公開

以前、同じ内容の記事を書いたのですが、かくかくしかじかなことがありまして、Nextcloudを再構築する機会があったので、まとめておきます。
https://zenn.dev/seiwell/articles/019849a67ccbb6

今回の構成

今回は、
 - Nextcloud本体
 - データベース
を分離して、構築していきます。
分離した理由は
 ・全体的なパフォーマンスの向上
だけです。それ以外に特に理由はないです。

データベースを構築する

Dockerのmariadbを利用して、構築していきます。
Dockerのインストールは、下記の記事に書いたので割愛。
https://zenn.dev/seiwell/articles/7ca8a8c4bda10c

Dockerのインストールが終わったら、まずは適当な名前のディレクトリを作成します。

mkdir <適当な名前>
cd <作成したディレクトリ名>

続いて、docker-compose.ymlを作成します。

nano docker-compose.yml

編集画面になるので、内容を記載していきます。
途中の<root用パスワード><nextcloudユーザーのパスワード>は、自分で決めてください。最後のほうで使います。

docker-compose.yml
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+Xyで保存します。
保存したら、起動します。

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

変更点:

/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アドレスなので隠してあります。

/var/www/html/nextcloud/config/config.php
<?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

変更点:

/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アドレス>:<ポート番号>

インストールを押して、しばらく経つとダッシュボードにリダイレクトされます。
そしたら、完了です。

最後に

構築より、記事書くのに疲れた。
スクラップに適当に書いてたのを、記事にしたので、そちらも見てください。
https://zenn.dev/seiwell/scraps/cd860ebd34ba9a

Discussion