一、全局配置
name: lnmp
services:
caddy:
image: caddy:latest
volumes:
- ./www:/var/www/html
- ./caddy/etc:/etc/caddy
- ./caddy/data:/data
- ./caddy/config:/config
ports:
- 80:80
- 443:443/tcp
- 443:443/udp
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: 3
restart: always
redis:
image: redis:latest
volumes:
- ./redis/config:/etc/redis
- ./redis/data:/data
restart: always
command: /etc/redis/redis.conf
mysql:
image: mysql:latest
volumes:
- ./mysql/config:/etc/mysql
- ./mysql/data:/var/lib/mysql
- ./mysql/mysql-files:/var/lib/mysql-files
cap_add:
- SYS_NICE
security_opt:
- seccomp:unconfined
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- 3306:3306
restart: always
php:
build: ./php
volumes:
- ./php/config:/usr/local/etc
- ./php/logs:/var/log/php
- ./www:/var/www/html
depends_on:
- caddy
- mysql
- redis
cap_add:
- SYS_PTRACE
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: 3
restart: always
imaginary:
image: nextcloud/aio-imaginary:latest
restart: always
command: -concurrency 2 -enable-url-source
environment:
- PORT=9000
二、PHP镜像
PHP官方的镜像启用和安装的扩展比较少,直接使用会导致WordPress和Nextcloud的健康检查一堆信息,所以使用Dockerfile来基于官方镜像构建一个专用的镜像,需要的扩展主要包括:
- gd(png/jpeg/gif/webp/avif)
- imagick(高性能图片处理)
- opcache(考虑性能)
- apcu(Nextcloud的本地缓存)
- zip(影响WordPress插件安装)
- redis(WordPress的对象缓存和Nextcloud的分布式缓存)
- gmp(加密相关)
- intl(PHP的国际化扩展)
FROM php:8.2-fpm-alpine
# 配置国内镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装构建扩展相关依赖
RUN apk add --no-cache --update --virtual .build-deps $PHPIZE_DEPS
# MySQL
RUN docker-php-ext-install pdo_mysql mysqli \
&& docker-php-ext-enable pdo_mysql mysqli
# 常用扩展
RUN docker-php-ext-install pcntl exif bcmath sysvsem \
&& docker-php-ext-enable opcache exif bcmath pcntl sysvsem
# apcu
RUN pecl install apcu && docker-php-ext-enable apcu
# zip扩展
RUN apk add --no-cache --update libzip=1.11.2-r0 libzip-dev=1.11.2-r0 unzip \
&& docker-php-ext-install zip \
&& docker-php-ext-enable zip
# redis
RUN pecl install https://pecl.php.net/get/redis-6.0.2.tgz \
&& docker-php-ext-enable redis
# intl
RUN apk add --no-cache --update icu icu-dev \
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl \
&& docker-php-ext-enable intl
# imagick
RUN apk add --no-cache --update imagemagick-dev imagemagick-svg
RUN pecl install https://pecl.php.net/get/imagick-3.7.0.tgz
RUN docker-php-ext-enable imagick
# gd
RUN apk add --no-cache --update libpng libpng-dev libavif-dev libjpeg-turbo-dev freetype-dev freetype libjpeg-turbo libavif \
&& docker-php-ext-configure gd \
--with-freetype \
--with-jpeg \
--with-avif \
&& docker-php-ext-install gd \
&& docker-php-ext-enable gd
# ffmpeg nextcloud需要视频转码时启用
# RUN apk add --no-cache ffmpeg
# gmp nextcloud使用加密时使用
# RUN apk add --no-cache --update gmp-dev \
# && docker-php-ext-install gmp \
# && docker-php-ext-enable gmp
# pgsql
# RUN apk add --no-cache --update libpq-dev postgresql-dev \
# && docker-php-ext-install pdo_pgsql \
# && docker-php-ext-enable pdo_pgsql
# 删除构建依赖
RUN apk del --no-network .build-deps
发表回复