剪藏#剪藏

docker-compose部署wordpress-6.8.1(php7.4 swoole_loader mysql-8.4.5),适用ritheme RiPro-V5主题 - 开发调优 - LINUX DO

2025 年 5 月 14 日1 分钟
分享Twitter / XTelegram微博
docker-compose部署wordpress-6.8.1(php7.4 swoole_loader mysql-8.4.5),适用ritheme RiPro-V5主题 - 开发调优 - LINUX DO 封面

mysql 8.4.5 准备

1.创建目录

JAVASCRIPT
mkdir -p /data/wordpress
mkdir -p /data/mysql8/{etc/mysql/conf.d,data,logs,files}
sudo chown -R 999:999 /data/mysql8/data /data/mysql8/logs /data/mysql8/files
sudo chmod -R 755 /data/mysql8/data /data/mysql8/logs /data/mysql8/files

2.创建配置 /data/mysql8/etc/mysql/conf.d/my.cnf

JAVASCRIPT
[mysqld]
user = mysql
secure_file_priv = /var/lib/mysql-files
bind-address = 0.0.0.0
datadir = /var/lib/mysql
pid-file = /var/run/mysqld/mysqld.pid
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_buffer_pool_size = 512M
innodb_redo_log_capacity = 536870912 
default-time_zone = '+8:00'

配置文件赋权

JAVASCRIPT
sudo chown 999:999 /data/mysql8/etc/mysql/conf.d/my.cnf
sudo chmod 644 /data/mysql8/etc/mysql/conf.d/my.cnf

wordpress镜像构建

官方的wordpress默认上传文件大小有限制,且官方wordpress-6.8.1镜像最低版本php8.1, 而安装RiPro-V5主题最好使用php7.4,否则可能版本不兼容,比如图片验证码功能失效,这个主题还依赖swoole_loader, 所以干脆直接重新构建一个镜像,Dockerfile可参考官方链接 GitHub - docker-library/wordpress: Docker Official Image packaging for WordPress swoole-loader下载地址:https://compiler.swoole.com/encryptor/download/

JAVASCRIPT
FROM php:7.4-apache

# Install system dependencies
RUN set -eux; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
        libpng-dev \
        libjpeg-dev \
        libfreetype6-dev \
        libwebp-dev \
        libicu-dev \
        default-libmysqlclient-dev \
        libzip-dev \
        libmagickwand-6.q16-dev \
        curl \
    ; \
    rm -rf /var/lib/apt/lists/*

# Install PHP extensions
RUN set -eux; \
    docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp; \
    docker-php-ext-install -j "$(nproc)" \
        bcmath \
        exif \
        gd \
        intl \
        mysqli \
        opcache \
        pdo_mysql \
        zip \
    ; \
    pecl install imagick-3.4.4; \
    docker-php-ext-enable imagick

# Set recommended PHP.ini settings for Opcache
RUN { \
        echo 'opcache.memory_consumption=128'; \
        echo 'opcache.interned_strings_buffer=8'; \
        echo 'opcache.max_accelerated_files=4000'; \
        echo 'opcache.revalidate_freq=2'; \
    } > /usr/local/etc/php/conf.d/opcache-recommended.ini

# Set custom PHP.ini settings
COPY swoole_loader_74_nts.so /usr/local/lib/php/extensions/no-debug-non-zts-20190902/swoole_loader_74_nts.so
RUN { \
    echo 'file_uploads = On'; \
    echo 'memory_limit = 256M'; \
    echo 'upload_max_filesize = 10M'; \
    echo 'post_max_size = 10M'; \
    echo 'max_execution_time = 600'; \
    echo 'extension=swoole_loader_74_nts.so'; \
    } > /usr/local/etc/php/conf.d/custom.ini

# Install WordPress
ENV WORDPRESS_VERSION=6.8.1
RUN set -eux; \
    curl -o wordpress.tar.gz -SL "https://wordpress.org/wordpress-6.8.1.tar.gz" && \
    tar -xzf wordpress.tar.gz -C /usr/src/; \
    mv /usr/src/wordpress /usr/src/wordpress-${WORDPRESS_VERSION}; \
    rm wordpress.tar.gz; \
    chown -R www-data:www-data /usr/src/wordpress-${WORDPRESS_VERSION}

# Configure Apache
COPY apache.conf /etc/apache2/sites-available/000-default.conf
RUN a2enmod rewrite headers

# Set working directory
WORKDI
JAVASCRIPT
R /usr/src/wordpress-${WORDPRESS_VERSION}

# Expose port
EXPOSE 80

# Set the entrypoint
CMD ["apache2-foreground"]

docker build -t 2011820123/wordpress:6.8.1-php7.4 .

docker-compose启动服务

vi docker-compose.yaml

JAVASCRIPT
version: '3.3'
services:
  wordpress:
    image: 2011820123/wordpress:6.8.1-php7.4
    container_name: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: bbs
      WORDPRESS_DB_PASSWORD: RGVsWi7imyHAen1Y7
      WORDPRESS_DB_NAME: bbsgo_db
      WORDPRESS_TABLE_PREFIX: wp_
    volumes:
      - /data/wordpress:/var/www/html
    depends_on:
      - mysql  
    networks:
      - app_network

  mysql:
    image: mysql:8.4.5
    container_name: mysql
    command: --lower-case-table-names=1
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: RGVsWi7imyHAen1Y7
      MYSQL_USER: bbs
      MYSQL_PASSWORD: RGVsWi7imyHAen1Y7
      MYSQL_DATABASE: bbsgo_db
      TZ: Asia/Shanghai
    volumes:
      - /data/mysql8/etc/mysql/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf
      - /data/mysql8/data:/var/lib/mysql
      - /data/mysql8/logs:/var/log/mysql
      - /data/mysql8/files:/var/lib/mysql-files
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 5s
      retries: 3
    deploy:
      resources:
        limits:
          memory: 4G
    networks:
      - app_network

networks:
  app_network:
    driver: bridge

创建、删除、重启

JAVASCRIPT
docker-compose up -d
docker-compose down
docker-compose restart

宿主机配置nginx

wordpress.conf

JAVASCRIPT
server {
    listen 80;
    server_name www.xuexiemeng.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.xuexiemeng.com;

    ssl_certificate /etc/letsencrypt/live/xueximeng.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xueximeng.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_prefer_server_ciphers on;

    client_max_body_size 50m;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

重启nginx,使配置生效

JAVASCRIPT
systemctl reload nginx

null

不想折腾构建镜像的,可以直接使用 2011820123/wordpress:6.8.1-php7.4

此话题将在最后一个回复的1 个月后关闭。

原文地址: https://linux.do/t/topic/649431

相关文章