1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nextcloud with Apache2(http2) + PostgreSQL + redis on Docker

1
Posted at

当研究室のシステム

概要

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にした.
~/Docker/compose.yml
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をやってイメージ再作成すること.

~/Docker/www/sites-available/default-ssl.conf
<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周り最適化.

~/Docker/php-fpm/Dockerfile
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に以下を追加.

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操作するとログが流れる
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?