Docker compose部署WordPress (Nginx+Mariadb+redis+WordPress)
- 学习笔记
- 19天前
- 113热度
- 0评论
1. 部署环境:
Ubuntu 22.04 server 64bit
2. docker-compose.yml:
#docker-compose.yml
services:
nginx:
depends_on:
- wordpress
image: nginx:latest
container_name: nginx
restart: always
volumes:
- ${PWD}/data/nginx/conf.d:/etc/nginx/conf.d # nginx配置
- ${PWD}/data/nginx/nginx.conf:/etc/nginx/nginx.conf # nginx配置
- ${PWD}/data/nginx/ssl:/etc/nginx/ssl # SSL证书
- ${PWD}/data/nginx/html:/etc/nginx/html
- ${PWD}/data/nginx/logs:/var/log/nginx # 日志
environment:
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
networks:
- wordpress_network
mariadb:
image: mariadb:10
container_name: mariadb
restart: always
volumes:
- ${PWD}/data/mariadb/conf:/etc/mysql/conf.d
- ${PWD}/data/mariadb/logs:/logs
- wordpress-db-data:/var/lib/mysql
environment:
MARIADB_DATABASE: wordpress # 数据库名称
MARIADB_USER: wordpress # 数据库用户名 !建议更改!
MARIADB_PASSWORD: wordpress # 数据库用户密码 !建议更改!
MARIADB_ROOT_PASSWORD: "123456" # 数据库ROOT用户密码 !建议更改!
TZ: Asia/Shanghai
ports:
- "3306:3306"
networks:
- wordpress_network
redis:
image: redis
container_name: redis
restart: always
volumes:
- ${PWD}/data/redis/log/redis.log:/etc/redis.log # redis日志
- ${PWD}/data/redis/conf/redis.conf:/etc/redis/redis.conf # redis配置文件
- ${PWD}/data/redis/data:/data # redis数据
networks:
- wordpress_network
wordpress:
depends_on:
- mariadb
- redis
image: wordpress:latest
container_name: wordpress
restart: always
volumes:
- ${PWD}/data/wordpress/html:/var/www/html # wordpress主目录
- ${PWD}/data/wordpress/php/upload.ini:/usr/local/etc/php/conf.d/upload.ini # PHP配置 用于修改文件上传上限
environment:
WORDPRESS_DB_HOST: mariadb # 目标数据库
WORDPRESS_DB_USER: wordpress # 数据库用户名 !建议更改! 与mariadb块保持一致
WORDPRESS_DB_PASSWORD: wordpress # 数据库用户密码 !建议更改! 与mariadb块保持一致
WORDPRESS_DB_NAME: wordpress # 数据库名称 与mariadb块保持一致
TZ: Asia/Shanghai
networks:
- wordpress_network
networks:
wordpress_network:
volumes:
wordpress-db-data:
3. Nginx配置
3.1 nginx.conf:
#./data/nginx/nginx.conf
user nginx;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
# 事件区块开始
events {
#单个进程最大连接数(最大连接数=连接数*进程数)
#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。
worker_connections 1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
include /etc/nginx/mime.types;
#默认文件类型
default_type application/octet-stream;
#日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#访问记录
access_log /var/log/nginx/access.log main;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
sendfile on;
#tcp_nopush on;
#长连接超时时间,单位是秒
keepalive_timeout 65;
client_max_body_size 100m;
#gzip on;
# 隐藏响应头信息 Nginx版本号 HTTPS相关
server_tokens off;
include /etc/nginx/conf.d/*.conf;
}
3.2 wordpress.conf:
#./data/nginx/conf.d/wordpress.conf
# wordpress server
# HTTPS施工中
server {
listen 443 ssl;
server_name <...>; # 你要配置的域名
# 你的 ssl 证书在 nginx 容器中的路径,一般只需要将最后面的换成你的证书文件名称即可
ssl_certificate /etc/nginx/ssl/<...>.crt;
ssl_certificate_key /etc/nginx/ssl/<...>.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
gzip on; # 默认off,是否开启gzip
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
# 处理静态资源
location / {
proxy_pass http://wordpress; # 需要反向代理的地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header X-Content-Type-Options nosniff;
add_header Content-Security-Policy "upgrade-insecure-requests" always; #将HTTP请求提升为HTTPS请求
client_max_body_size 100m;
}
}
server{
listen 80;
server_name <...>;
# rewrite ^(.*)$ https://$host$1; # 将所有HTTP请求通过rewrite指令重定向到HTTPS。
gzip on; # 默认off,是否开启gzip
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location / {
# add_header Access-Control-Allow-Origin *;
# add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
# add_header Access-Control-Allow-Headers '*';
# if ($request_method = 'OPTIONS') {
# return 204;
# }
proxy_pass http://wordpress; # 需要反向代理的地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 100m;
}
}
注: 需要将./data.nginx/conf.d/default.conf 注释掉,会导致无法访问,怀疑会覆盖掉wordpress.conf中的服务
4. Redis配置
4.1创建日志文件
touch ./data/redis/log/redis.log
4.2 修改redis配置文件
因为docker部署的redis并不自带redis.conf文件,需要自己下载:
# ./data/redis/conf/redis.conf
# 让外部设备连接
bind 0.0.0.0
# 关闭保护模式
protected-mode no
# 关闭后台运行(避坑提示,因为docker运行就已经有后台守护,改为yes会启动不了redis)
daemonize no
# 设置日志文件路径(避坑提示,此路径为容器内的路径,切勿当成宿主路径)
logfile "/etc/redis.log"
# 设置 Redis 的内存上限,防止内存溢出
maxmemory 1gb
# 设置 Redis 的缓存淘汰策略。可以选择 volatile-lru(最近最少使用的键被淘汰)等策略
maxmemory-policy allkeys-lru
# 每900秒内如果至少有1个键被修改,则进行快照
save 900 1
4.3 赋予配置文件和日志文件权限:
chmod 777 ./data/redis/conf/redis.conf ./data/redis/log/redis.log
4.4 wordpress redis插件配置
4.4.1 修改 wp-config.php
在 require_once ABSPATH . 'wp-settings.php'; 之前添加:
// ./data/wordpress/html/wp-config.php
// 启用 Redis 缓存
define('WP_CACHE_KEY_SALT', 'your_domain:'); // 修改为你的域名,以便生成唯一的缓存键
define('WP_REDIS_HOST', 'redis'); // Redis 服务器地址,如果 Redis 在本地运行,保持不变
define('WP_REDIS_PORT', 6379); // Redis 默认端口
define('WP_REDIS_TIMEOUT', 1); // Redis 超时时间设置
define('WP_REDIS_READ_TIMEOUT', 1); // 读超时时间
define('WP_REDIS_DATABASE', 0); // Redis 使用的数据库编号
4.4.2 最后从插件市场下载 Redis Object Cache 插件 并启用
5. HTTPS SSL
施工中...
Really Simple SSL插件
如何追踪混合内容或不安全的内容 - Really Simple Security
6. 解除wordpress文件上传上限:
# ./data/wordpress/php/upload.ini
file_uploads = On
memory_limit = 500M
upload_max_filesize = 100M # 上传最大文件大小
post_max_size = 100M
max_execution_time = 600
7. run/down脚本:
# ./run.sh
docker compose -p wordpress up -d
#./down.sh
docker compose down
8. 插件推荐:
UpdraftPlus-备份/恢复
文派头像 解决头像问题
参考教程:
1.
2.
3.
4.如何更改WordPress站点的域名:完全指南_wordpress更换域名-CSDN博客
5.