mysql 8.4.5 准备
1.创建目录
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
[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'
配置文件赋权
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/
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
WORKDIR /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
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
创建、删除、重启
docker-compose up -d
docker-compose down
docker-compose restart
宿主机配置nginx
wordpress.conf
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,使配置生效
systemctl reload nginx