====== FreeBSD 12でNextcloud 16サーバを作る ======
===== 試した環境 =====
* FreeBSD 12.0-RELEASE
* Apache 2.4.41
* MariaDB 10.3.16
* PHP 7.3.8
* Nextcloud 16.0.2
* /usr/home/www/nextcoludにインストールする
===== 必要なソフトのインストールと設定 =====
うちでは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を編集。
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のサイトの設定を作成。パスは適宜読み替えの事。
Alias /nextcloud "/usr/home/www/nextcloud/"
Options +FollowSymlinks
AllowOverride All
Dav off
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
SetEnv HOME /usr/home/www/nextcloud
SetEnv HTTP_HOME /usr/home/www/nextcloud
サイト設定を行っている設定ファイルの中で忘れずにインクルードする。この辺の作法は各々の環境に合わせてください。
....
Include etc/apache24/Includes/nextcloud.conf.inc
==== MariaDB 10.3 ====
# pkg install mariadb103-server mariadb103-client
バイナリログ形式、トランザクション分離レベル、文字コード等を変更する。DB全体に影響するので、他のサービスを動かしてたり既存のデータがある場合は要注意。
[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モジュールを入れる。
[[https://docs.nextcloud.com/server/11/admin_manual/installation/source_installation.html#prerequisites-label|公式マニュアル]]を参考に必要なモジュールを''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の設定。
...
LoadModule php7_module libexec/apache24/libphp7.so
...
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php-source
PHPのメモリ制限を増やす。Nextcloud 16の推奨値は512MB以上となっている。
memory_limit = 1G
=== ImageMagick ===
サムネイル生成用にImageMagickを入れる。
# portmaster graphics/ImageMagick7-nox11
PHPのモジュールを入れる。
# pkg install php73-pecl-imagick-im7
=== FFmpeg ===
サムネイル生成用にFFMpegを入れる。
# portmaster multimedia/ffmpeg
===== Nextcloudのインストール =====
{{ :freebsd:nextcloud16_setup.png|}}
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のトップ画面が開く。
{{ :freebsd:nextcloud16_welcome.jpg |}}
==== プレビューの文字化け対応 ====
標準ではテキストファイルのプレビューが文字化けするので、core/fonts/Nunito-Regular.ttf を日本語グリフを含むフォントに置き換えて対処する。詳細→[[blog:2019:2019-12-16]]
==== ユーザー追加 ====
普段使いのユーザーを追加する。初期管理者でログインしている状態で、左上のアカウントマークをクリック→ユーザーを選択する。
{{ :freebsd:nextcloud16_account_menu.png |}}
「+新しいユーザー」をクリックするとリストに新規ユーザーが追加されるので、項目を埋め、右端のチェックボタンを押す。その後、現在の管理者ユーザーのパスワードを入力するとユーザーが追加される。
{{ :freebsd:nextcloud16_add_user.png |}}
==== バックグラウンドジョブの設定 ====
定期的にジョブを動かす必要があるっぽいので、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 コマンド