概要
Redisサーバと連携させて安定性アップ.
Nextcloud with Apache2(http2) + PostgreSQL on Dockerまで終わっていること.
方針
redisのdocker使用.
redisのdocker準備
Nextcloud with Apache2(http2) + PostgreSQL on Dockerのcomposeファイルに,redis関連を追加.
前からの細かい変更
compose.yml使用が推奨になったのでそちらを利用.version情報はいらなくなった. またrestartをalwaysからunless-stoppedにした.services:
www:
build: ./www
image: nek/www:latest
container_name: www
hostname: www
ports:
- 443:443
restart: unless-stopped
depends_on:
- php-fpm
volumes:
- www_data:/var/www
- socket:/var/run/php-fpm
php-fpm:
build: ./php-fpm
image: nek/php-fpm:latest
container_name: php-fpm
hostname: php-fpm
restart: unless-stopped
volumes:
- www_data:/var/www
- socket:/var/run/php-fpm
- /etc/group:/etc/group:ro
- /etc/passwd:/etc/passwd:ro
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
command: redis-server --save "" --appendonly no
volumes:
socket:
www_data:
driver_opts:
type: nfs
o: "port=2049,addr=192.168.0.2,rw,nfsvers=4"
device: ":/apache2/www"
Apacheの設定
apache2(http2) on Dockerでのsites-available/default-ssl.conf内のSetHandlerをsocketからちゃんとポートに変更.
docker container buildをやってイメージ再作成すること.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName my.domain.name.co.jp
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/conf/ssl.key/server.key
SSLCertificateChainFile /etc/apache2/conf/ssl.crt/nii-hogehogehoge.cer
<FilesMatch "\.(cgi|shtml|phtml|php)$">
# SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
SetHandler "proxy:fcgi://php-fpm:9000"
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
php-fpmの作成
Nextcloud with Apache2(http2) + PostgreSQL on Dockerをベースに.
docker container buildをやってイメージ再作成すること.
Dockerファイルの編集
redius追加.
pcntl周り最適化.
FROM php:8.3-fpm
RUN set -eux && \
apt update && \
DEBIAN_FRONTEND=noninteractive apt install -y \
ffmpeg && \
curl -sSLf \
-o /usr/local/bin/install-php-extensions \
https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions && \
chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions redis apcu bcmath bz2 curl gd gmp exif imagick imap intl ldap mbstring opcache pdo pdo_pgsql pgsql smbclient sysvsem xml zip pcntl
ENV TZ=Asia/Tokyo
# Use the default production configuration
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" && \
sed -i 's/memory_limit = 128M/memory_limit = -1/' "$PHP_INI_DIR/php.ini" && \
sed -i 's/post_max_size = 8M/post_max_size = 20480M/' "$PHP_INI_DIR/php.ini" && \
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 20480M/' "$PHP_INI_DIR/php.ini" && \
sed -i 's/max_execution_time = 30/max_execution_time = 600/' "$PHP_INI_DIR/php.ini" && \
sed -i 's/;max_input_vars = 1000/max_input_vars = 5000/' "$PHP_INI_DIR/php.ini" && \
echo "apc.enable_cli=1" >> "$PHP_INI_DIR/php.ini" && \
echo "opcache.enable = 1" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.enable_cli = 1" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.interned_strings_buffer = 16" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.max_accelerated_files = 10000" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.memory_consumption = 256" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.save_comments = 1" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.revalidate_freq = 600" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.jit = 1255" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
echo "opcache.jit_buffer_size = 256M" >> "$PHP_INI_DIR/conf.d/docker-php-ext-opcache.ini" && \
cp /usr/local/etc/php-fpm.d/www.conf /usr/local/etc/php-fpm.d/zzz-www.conf && \
sed -i 's!pm.max_children = 5!pm.max_children = 10!' /usr/local/etc/php-fpm.d/zzz-www.conf && \
sed -i 's!listen = 127.0.0.1:9000!listen = /var/run/php-fpm/php-fpm.sock!' /usr/local/etc/php-fpm.d/zzz-www.conf && \
sed -i 's!;listen.owner = www-data!listen.owner = www-data!' /usr/local/etc/php-fpm.d/zzz-www.conf && \
sed -i 's!;listen.mode = 0660!listen.mode = 0660!' /usr/local/etc/php-fpm.d/zzz-www.conf
Nextcloud設定
config/config.phpに以下を追加.
...
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
'host' => 'redis',
'port' => 6379,
],
...
再起動
docker composeで再起動.
動作確認
Nextcloud管理画面
管理者設定の概要でメモリキャッシュ関係の警告が出てなかったらok
コマンド on php-fpm
dockerでphp-fpmにログインし,nextcloud/occのある場所で実行
php occ config:system:get memcache.locking
OC\Memcache\Redisと出力されれば有効になっている.
php occ config:system:get redis
設定内容が出てればok.
コマンド on redis
Redisサーバ側から確認
dockerでredisにログイン
redis-cli
INFO clients # connected_clients:2とかで接続が見れる
MONITOR # nextcloud操作するとログが流れる