うちではPHP 7.1が既に入っており、この機会にPHP 7.3に更新したいので7.1を消しておく。
# pkg remove -g php71\* # pkg remove mod_php71
Apacheのインストール。
portmaster www/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 ...
Nextcloudは自前のWebDAVサーバを持っているため、ApacheのWebDAVモジュールは不要。ApacheのWebDAVを使う場合はNextcloudの方は無効にしなければならない。
Nextcloudのサイトの設定を作成。パスは適宜読み替えの事。
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>
# 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
# pkg install lang/php73 # cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
必要なPHPモジュールを入れる。
公式マニュアルを参考に必要なモジュールをphp73-extensions
経由で入れる。
portmaster lang/php73-extensions
デフォルトでチェックが入っているものはそのままに、自分はてんこ盛り仕様で以下のモジュールを追加した。
更にmod_phpを入れる。
# pkg install mod_php73
mod_phpの設定。
... 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を入れる。
# portmaster graphics/ImageMagick7-nox11
PHPのモジュールを入れる。
# pkg install php73-pecl-imagick-im7
サムネイル生成用にFFMpegを入れる。
# portmaster multimedia/ffmpeg
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の設定>管理>概要のセキュリティ&セットアップ警告から、メモリキャッシュ云々の文言が消えているはず。
とりあえず設定はしてみたものの、そこまで劇的に早くなった感じはしないような…
Nextcloudを更新した時に、データベースの不整合警告(主キーやインデックスがないとか)が出ると同時に、occコマンドを使った対処方法が示される。occコマンドは以下のように実行する。
# sudo -u www php /path/to/nextcloud/occ コマンド