目次

FreeBSD 12でNextcloud 16サーバを作る

試した環境

必要なソフトのインストールと設定

うちではPHP 7.1が既に入っており、この機会にPHP 7.3に更新したいので7.1を消しておく。

# pkg remove -g php71\*
# pkg remove mod_php71

Apache 2.4

Apacheのインストール。

portmaster www/apache24

必要なモジュールは以下の通り。

必須

  • REWRITE

推奨

  • ENV
  • DIR
  • HEADERS
  • MIME

必要なモジュールが読み込まれるようにhttpd.confを編集。

/usr/local/etc/apache24/httpd.conf
NameVirtualHost *:80
 
...
LoadModule mime_module libexec/apache24/mod_mime.so
LoadModule env_module libexec/apache24/mod_env.so
LoadModule headers_module libexec/apache24/mod_headers.so
LoadModule dir_module libexec/apache24/mod_dir.so
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
...

WebDAVについて

Nextcloudは自前のWebDAVサーバを持っているため、ApacheのWebDAVモジュールは不要。ApacheのWebDAVを使う場合はNextcloudの方は無効にしなければならない。

Nextcloudのサイトの設定を作成。パスは適宜読み替えの事。

/usr/local/etc/apache24/Includes/nextcloud.conf.inc
Alias /nextcloud "/usr/home/www/nextcloud/"
<Directory "/usr/home/www/nextcloud">
 
Options +FollowSymlinks
AllowOverride All
 
<IfModule mod_dav.c>
  Dav off
</IfModule>
 
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
 
SetEnv HOME /usr/home/www/nextcloud
SetEnv HTTP_HOME /usr/home/www/nextcloud
</Directory>

サイト設定を行っている設定ファイルの中で忘れずにインクルードする。この辺の作法は各々の環境に合わせてください。

<VirtualHost _default_:443>
....
Include etc/apache24/Includes/nextcloud.conf.inc
</VirtualHost>

MariaDB 10.3

# pkg install mariadb103-server mariadb103-client

バイナリログ形式、トランザクション分離レベル、文字コード等を変更する。DB全体に影響するので、他のサービスを動かしてたり既存のデータがある場合は要注意。

/usr/local/etc/my.cnf
[client]
default-character-set = utf8mb4
 
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
transaction_isolation = READ-COMMITTED
binlog_format = ROW
innodb_file_per_table=1

PHP 7.3

# pkg install lang/php73
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

必要なPHPモジュールを入れる。

公式マニュアルを参考に必要なモジュールをphp73-extensions経由で入れる。

portmaster lang/php73-extensions

デフォルトでチェックが入っているものはそのままに、自分はてんこ盛り仕様で以下のモジュールを追加した。

必須

  • CTYPE
  • CURL
  • DOM
  • GD
  • ICONV
  • JSON
  • XML
  • MBSTRING
  • OPENSSL
  • POSIX
  • SESSION
  • SIMPLEXML
  • XMLREADER
  • XMLWRITER
  • ZIP
  • ZLIB
  • PDO_MYSQL

推奨

  • FILEINFO
  • BZ2
  • INTL

オプション

  • FTP
  • EXIF
  • GMP
  • PCNTL

更にmod_phpを入れる。

# pkg install mod_php73

mod_phpの設定。

/usr/local/etc/apache24/httpd.conf
...
LoadModule php7_module        libexec/apache24/libphp7.so
...
 
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

PHPのメモリ制限を増やす。Nextcloud 16の推奨値は512MB以上となっている。 <file ini /usr/local/etc/php.ini> memory_limit = 1G </code>

ImageMagick

サムネイル生成用にImageMagickを入れる。

# portmaster graphics/ImageMagick7-nox11

PHPのモジュールを入れる。

# pkg install php73-pecl-imagick-im7

FFmpeg

サムネイル生成用にFFMpegを入れる。

# portmaster multimedia/ffmpeg

Nextcloudのインストール

Nextcloudのzipを取ってきて展開する。

$ cd /usr/home/www
$ sudo fetch https://download.nextcloud.com/server/releases/nextcloud-16.0.3.zip
$ sudo unzip nextcloud-16.0.3.zip
$ sudo chown -R www:www nextcloud

ブラウザでNextcloudを置いたURLにアクセスするとセットアップ画面になる。

管理者アカウント

Nextcloudの管理者アカウント名とパスワードを入れる。

このアカウント名を元にNextcloud用のDB接続ユーザーも作られるため、普段使いのアカウント名とは別のものにした方が無難かなと。

データフォルダー

データ置き場をフルパスで指定する。後から変更するのは困難だそうなので熟考のこと。

指定フォルダは予め存在していなければならず、所有者はWebサーバのユーザーの必要がある。

データベース設定

MySQLの管理者アカウント、Nextcloud用のDB名、DBのホストを指定する。

Nextcloud用に適切な権限を持った専用ユーザー(oc_管理者アカウント名)と専用のDBが自動的に作られる。

「セットアップを完了します」ボタンを押し暫く待つと、Nextcloudのトップ画面が開く。

プレビューの文字化け対応

標準ではテキストファイルのプレビューが文字化けするので、core/fonts/Nunito-Regular.ttf を日本語グリフを含むフォントに置き換えて対処する。詳細→Nextcloudのプレビューの文字化けを直す

ユーザー追加

普段使いのユーザーを追加する。初期管理者でログインしている状態で、左上のアカウントマークをクリック→ユーザーを選択する。

「+新しいユーザー」をクリックするとリストに新規ユーザーが追加されるので、項目を埋め、右端のチェックボタンを押す。その後、現在の管理者ユーザーのパスワードを入力するとユーザーが追加される。

バックグラウンドジョブの設定

定期的にジョブを動かす必要があるっぽいので、Apacheの実行ユーザーwww権限でcronを設定する。

# crontab -u www -e
*/5     *       *       *       *       /usr/local/bin/php -f /usr/home/www/nextcloud/cron.php

5分ほど待って、Nextcloudの設定>管理>基本設定のバックグラウンドジョブに「最終ジョブ実行: ○分前」といった表示があればOK。

メモリキャッシュの設定

性能向上のため、メモリキャッシュを設定してみる。

キャッシュ機構はAPCu, Redis, Memcachedの3つから選べる。寡聞にしてそれぞれの違いは分からないのだけど、Redisが一番良さそうな気がするものの設定が面倒くさそうなので、何となくナウくてよさげな気がするAPCuを使ってみる。

インストールしてapacheを再起動。

# pkg install php73-pecl-APCu
# service apache24 restart

nextcloud/config/config.phpにメモリキャッシュの設定を追加。

'memcache.local' => '\OC\Memcache\APCu',

うまく設定できれば、Nextcloudの設定>管理>概要のセキュリティ&セットアップ警告から、メモリキャッシュ云々の文言が消えているはず。

とりあえず設定はしてみたものの、そこまで劇的に早くなった感じはしないような…

occコマンド

Nextcloudを更新した時に、データベースの不整合警告(主キーやインデックスがないとか)が出ると同時に、occコマンドを使った対処方法が示される。occコマンドは以下のように実行する。

# sudo -u www php /path/to/nextcloud/occ コマンド