概要
Docker起動したらNextcloud動くようにしたもの.
「Nextcloud with Apache2 + PostgreSQL on Docker」をベースに「Apache2 on Docker + php-fpm on Docker」のphp-fpmを組み合わせたもの.
そのまま動くかと思ったのだけど,ドハマリ.分かればすぐ.
ハマりポイント
「Nextcloud with Apache2 + PostgreSQL on Docker」でインストールしたphpモジュールをphp-fpmでインストールし,設定すればそのまま動く...かと思いきや,pdo-pgsqlでハマる.
- 「Nextcloud with Apache2 + PostgreSQL on Docker」ではphp-pgsqlのインストールで,pdo-pgsql, pgsqlがインストールされていた?(とりあえず入れていなくてもpdo-pgsqlがあった)
- php-fpmではpdo-pgsqlを明示的に入れないといけなかった.
設定
apache2
~/Docker/www/Dockerfile
にてphp-*
を全削除.php
自体もいらない気がするが...
sed
やecho
で/etc/php/以下
に書き込んでいた部分を全部削除.
FROM ubuntu:22.04
RUN set -x && \
apt update && apt upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt install -y \
apache2 \
ffmpeg \
libmagickcore-6.q16-6-extra \
locales \
php && \
locale-gen ja_JP.UTF-8
ENV TZ=Asia/Tokyo LANG=ja_JP.UTF-8 LANGUAGE=ja_JP:ja
ARG HOSTNAME=www
COPY ./conf /etc/apache2/conf
COPY ./sites-available /etc/apache2/sites-available
RUN echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf && \
/usr/sbin/a2enconf fqdn && \
/usr/sbin/a2dismod php8.1 && \
/usr/sbin/a2enmod proxy_fcgi && \
/usr/sbin/a2enmod setenvif && \
/usr/sbin/a2dissite 000-default && \
/usr/sbin/a2ensite default && \
/usr/sbin/a2ensite default-ssl && \
/usr/sbin/a2enmod ssl && \
/usr/sbin/a2enmod authnz_ldap && \
/usr/sbin/a2enmod rewrite && \
/usr/sbin/a2ensite nextcloud && \
/usr/sbin/a2enmod headers \
EXPOSE 80
EXPOSE 443
CMD ["apachectl","-D","FOREGROUND"]
php-fpm
必要なphpモジュールをインストール.あとffmpegも入れておく(nextcloudのメディア変換を使うので.
...
apt update && apt upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt install -y ffmpeg && \
...
install-php-extensions apcu bcmath bz2 curl gd gmp exif imagick imap intl ldap mbstring opcache pdo pdo_pgsql pgsql smbclient sysvsem xml zip
...
ビルド&起動
~/Docker/docker-compose.yml
に~/Docker/www
と~/Docker/php-fpm
の情報が入っているので,これを使用(Apache2 on Docker + php-fpm on Docker).
cd ~/Docker
docker compose up -d --build
運用
起動
cd ~/Docker
docker compose up -d
cronについて
php-fpmに任せることになるので,Nextcloud with Apache2 + PostgreSQL on Dockerの「cronについて」にある/etc/cron.d/nextcloud
を書き換え.
*/5 * * * * root docker container exec --user www-data php-fpm /usr/local/bin/php -f /var/www/nextcloud/cron.php