使用Docker Compose部署NextCloud和WordPress

一、全局配置

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来基于官方镜像构建一个专用的镜像,需要的扩展主要包括:

  1. gd(png/jpeg/gif/webp/avif)
  2. imagick(高性能图片处理)
  3. opcache(考虑性能)
  4. apcu(Nextcloud的本地缓存)
  5. zip(影响WordPress插件安装)
  6. redis(WordPress的对象缓存和Nextcloud的分布式缓存)
  7. gmp(加密相关)
  8. 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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注