ownCloud のパフォーマンスをチューニングする
以前、紹介した記事で、自宅のパソコンに ownCloud を利用したクラウドストレージの構築手順を解説いたしました。
その記事では、パフォーマンスに触れることができませんでしたので、今回は ownCloud のパフォーマンスチューニング方法を解説したいと思います。
なお、上記の記事で利用した OS は Raspberry Pi Desktop(Debian Buster) でしたが、訳あって、同じ Debian 系の Ubuntu にクラウドストレージを再構築しています。
チューニングメニュー
以下が、ownCloud のチューニングメニューです。
- ジョブの変更
- トランザクション分離レベルの変更
- キャッシュの利用
- セッション管理の変更
- ownCloud の設定変更
Cron ジョブの変更
「ownCloud Documentation」の「Background Jobs」を見ると、「デフォルトの方法は Ajax ですが、推奨される方法は Cron を使用すること」と説明されています。
よって、Ajax から Cron に変更いたします。
トランザクション分離レベルの変更
「ownCloud Documentation」の「Database Configuration on Linux」を見ると、以下のように説明されています。
「ownCloud のトランザクション分離レベルは TRANSACTION_READ_COMMITTED を使用しています。」
「一部のデータベースの構成で他のトランザクション分離レベルが適用されることがある。」
「その場合は、トランザクション分離レベルを変更する必要がある。」
MariaDB のデフォルトのトランザクション分離レベルは REPEATABLE-READ ですので、READ-COMMITED に変更します。
キャッシュの利用
キャッシュの利用に関しては、OPcache と APCu を利用します。
これは、PHP アクセラレータと呼ばれる PHP を高速化するための拡張機能です。
PHP はプログラムをコンピュータが実行するたびに、毎回、1行ごとに機械語に解析するインタプリタ言語と呼ばれる言語です。キャッシュを使うと、1度解析したプログラム(バイトコード)をキャッシュし、機械語に解析する処理を省きアプリケーションを高速化します。
また、プログラムを実行するためにはデータが必要になりますが、PHP にはデータをキャッシュする機能がありません。これについても拡張機能をインストールすることでキャッシュが可能になります。
ちなみに、OPcache はコードキャッシュ機能で、APCu はデータキャッシュ機能となります。
セッション管理の変更
セッション管理に関しては、redis を利用します。
1台の Web サーバーで運用している場合、それほど恩恵を受けることはないかもしれませんが、セッション情報をファイルに蓄積するよりもメモリに蓄積した方がアクセスが早いのでセッション管理方法も変更します。
ownCloud の設定変更
ownCloud の設定ファイルを変更し、キャッシュ情報などを設定します。
チューニング
「チューニングメニュー」に沿って、パフォーマンスチューニング手順を解説していきます。
Cron ジョブの変更
はじめに、Cron ジョブの変更です。
Ubuntu の cron から起動されるように、以下のコマンドを実行します。
sudo crontab -u www-data -e
なお、ジョブの実行ユーザーには、Apache の実行ユーザー「www-data」を指定します。
次に、スケジュールを追加するため、以下を入力します。
*/5 * * * * /usr/bin/php -f /var/www/html/owncloud/occ system:cron
5分毎に、ジョブが実行されます。
次に、バックグラウンドジョブを cron に設定するため、以下のコマンドを実行します。
sudo -u www-data /var/www/html/owncloud/occ background:cron
crontab
フリー百科事典ウィキペディアより引用
crontab(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドはUnix系オペレーティングシステム (OS) において、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。標準入力からコマンド列を読み取り、crontabと呼ばれるファイルにそれを記録する。この記録を元に定時になると、その命令内容を読み取り、実行が行われる。cronという名称はギリシア語のクロノス (χρόνος) に由来するという説がある(Command Run ON の略という説も)。日本語ではクーロンという読みが慣習的に広く用いられているが、英語では通常クロンまたはクローンと発音する。
トランザクション分離レベルの変更
続いて、トランザクション分離レベルの変更です。
MariaDB の設定ファイルを開くため、以下のコマンドを実行します。
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
次に、トランザクション分離レベルを変更します。
[transaction-isolation] を [READ-COMMITTED] に変更します。
次に、MariaDB を再起動するため、以下のコマンドを実行します。
sudo systemctl restart mysql
キャッシュの利用
続いて、キャッシュを利用するための設定を追加します。
OPcache と APCu をインストールするため、以下のコマンドを実行します。
sudo apt install php7.4-opcache php7.4-apcu
次に、OPcache と APCu の設定を追加するため、以下のコマンドを実行します。
sudo vi /etc/php/7.4/apache2/php.ini
次に、OPcache の設定を変更します。
OPcache 用の設定項目は、既存の状態で存在しますので、コメントの解除や設定を変更します。
以下は、OPcache の設定例です。
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=3000
opcache.revalidate_freq=600
次に、APCu の設定を追加します。
APCu 用の設定項目は、一番下に追加します。
以下は、apc の設定例です。
apc.enabled = 1
apc.enable_cli = 1
apc.shm_size = 64M
apc.ttl=7200
以下は、phpinfo から設定を確認したイメージです。
どちらも、設定が反映されていることがわかります。
セッション管理の変更
続いて、セッション管理を変更します。
PHP から redis を呼び出すためのパッケージをインストールするため、以下のコマンドを実行します。また、php.ini にセッションで redis を使う設定を追加します。
以下は、php.ini の設定例です。
max_execution_time = 60
memory_limit = 512M
session.save_handler = redis
session.save_path = “tcp://localhost:6379”
次に、redis の安定版をダウンロードするため、以下のコマンドを実行します。
wget http://download.redis.io/releases/redis-stable.tar.gz
なお、公式サイトでは、ベータ版ではありますが Ubuntu の場合、redis のパッケージリポジトリからインストールすることもできると説明されています。
ベータ版ですので、今回は、make します。
次に、ダウンロードした圧縮ファイルを解凍するため、以下のコマンドを実行します。
tar xf redis-stable.tar.gz
次に、解凍したディレクトリに移動し、redis を make するため、以下のコマンドを実行します。
sudo make
次に、redis をインストールするため、以下のコマンドを実行します。
sudo make install
次に、redis 用のユーザーを作成するため、以下のコマンドを実行します。
sudo adduser --system --group --no-create-home redis
次に、redis で使用するディレクトリの作成と権限を付与します。
sudo mkdir /etc/redis
sudo mkdir /var/log/redis
sudo mkdir /var/lib/redis
sudo chown redis:redis /etc/redis
sudo chown redis:redis /var/log/redis
sudo chown redis:redis /var/lib/redis
sudo chmod 770 /var/lib/redis
次に、redis.conf をコピーし、そのファイルに設定を追加します。
sudo cp redis.conf /etc/redis
以下は、redis.conf の設定例です。なお、[save] はすべてコメントにしています。
dir /var/lib/redis/
logfile /var/log/redis/redis.log
次に、redis 自動起動用の設定ファイルを作成します。
sudo vi /etc/systemd/system/redis.service
以下は、redis.service の設定例です。
[Unit]
Description=Redis
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
次に、redis を開始します。また、redis のステータスを確認します。
sudo systemctl enable redis
sudo systemctl daemon-reload
sudo systemctl start redis
sudo systemctl status redis
ownCloud の設定変更
続いて、ownCloud の設定を変更します。
ownCloud の設定ファイルを変更するため、以下のコマンドを実行します。
sudo vi /var/www/html/owncloud/config/config.php
以下は、ownCloud への設定追加例です。
config.php の一番下、” ); ” の前に追加しています。
‘default_phone_region’ => ‘JP’,
‘memcache.distributed’ => ‘\OC\Memcache\Redis’,
‘memcache.locking’ => ‘\OC\Memcache\Redis’,
‘memcache.local’ => ‘\OC\Memcache\APCu’,
‘redis’ =>
array (
‘host’ => ‘localhost’,
‘port’ => 6379,
),
‘htaccess.RewriteBase’ => ‘/’,
変更内容を反映するため、以下のコマンドを実行します。
sudo systemctl restart apache2
まとめ
以上が、ownCloud のパフォーマンスチューニングとなります。
いかがでしたでしょうか?
色々なサイトの情報を参考にしながらパフォーマンスチューニングを施してみましたが、実際は、身近の人のみが利用するために構築したクラウドストレージなので、そこまでパフォーマンスにこだわる必要はなかったかと思います。
ですが、パフォーマンスチューニングができるとわかればやってみたいと思いますよねー
身近の人にパフォーマンスが遅いって言われるのも嫌だし。
まー、不慣れな筆者でも、なんとかパフォーマンスチューニングが施せましたので、もし、自宅にクラウドストレージを構築した場合、パフォーマンスチューニングにもチャレンジしてみてはいかがでしょうか。
ちなみに、redis も元気に動いております。
redis を停止した状態では、Internal Server Error になります。
redis を開始した状態では、クラウドストレージが利用できるようになります。
次は、ownCloud のセキュリティ対策方法を解説したいと思います。
最後までお読みいただきありがとうございました。
では。