====== 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 コマンド