Docker部署WordPress

发布于 2023-12-09  19 次阅读


1.本文测试环境:

Debian 11
Nginx 1.24
MySQL 5.7
Docker 24

2.部署MySQL

点击查看

记录Mysql容器的IP,假设为172.18.0.3

3.安装wordpress

#参数说明: # -v /docker/wordpres:/var/www/html :/docker/wordpress宿主机持久化目录
# 8080:80 :将docker 80端口映射到宿主机8080端口

docker run -d --restart always  --name wordpress --net bridge  -v /docker/wordpress:/var/www/html  -p 8080:80 wordpress:latest

3.1不配置SSL直接用http访问:

此时your_domain:5555访问即可。注意在主机商控制台的防火墙开放端口

3.2配置SSL,https访问:

若需要开启SSL,在wordpress配置数据库完成前最好不要开启SSL,原因如下:
wordpress连接数据库后会在wordpress根目录生成wp-config.php配置文件,需要添加一下参数才可以顺利用HTTPS访问,否则会导致静态资源无法加载。
如下所示,样式并没有正确加载。也可以在配置完数据库后再添加参数。

安装过程中填写数据库信息:
数据库名:worpress
用户名:root
密码 :your_passwd
数据库主机:172.18.0.3 (上文提到的要记录的数据库IP)
tips:为什么数据库主机不是127.0.0.1或者localhost?因为wordpress在docker内, 127.0.0.1/localhost是wordpress容器的本机环回地址,并不是宿主机的。

连接好数据库后,在wordpress根目录会生成wp-config.php配置文件,需要添加一下参数才可以顺利用HTTPS访问。在wp-config.php中加入如下代码:

但是要确保你的修改在 require_once(ABSPATH . 'wp-settings.php'); 这一行之前

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';

然后在nginx配置好https,刷新页面,样式即可成功加载

我的nginx配置如下:
注意修改:
两处 server_name your_domain;
SSL证书和私钥的位置
部署wordpress时映射的端口
日志文件名

# HTTP服务器块,对80端口的请求进行重定向到HTTPS
server {
    listen 80 ;
    server_name your_domain;

    # 重定向所有HTTP请求到相同的HTTPS地址
    return 301 https://$host$request_uri;
}

# HTTPS服务器块
server {
    gzip on;
    listen 443 ssl;
    server_name your_domain;

    # SSL证书和私钥的位置
    ssl_certificate /home/SSL/your_domain.pem;
    ssl_certificate_key /home/your_domain.key;

    # SSL会话缓存
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    # SSL协议和密码套件的配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';

    # 优先使用服务器端的密码套件
    ssl_prefer_server_ciphers on;

    # 配置反向代理
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
        proxy_redirect off;
        proxy_pass http://127.0.0.1:8080;   #部署wordpress时映射的端口
        
        # 设置上传文件的最大大小
        client_max_body_size 200m;
    }

    # 访问日志和错误日志的路径
    access_log /var/log/nginx/your_domain.access.log;
    error_log /var/log/nginx/your_domain.error.log;
    
    # 启用OCSP Stapling的相关配置
    ssl_stapling off;
    ssl_stapling_verify off;

    # 启用HTTP严格传输安全性(HSTS)
    add_header Strict-Transport-Security "max-age=31536000" always;
}

4.修改wordpress上传大小

wordpress容器默认上传限制为2M,实在是太太太少啦,修改上传限制。
命令如下:

#进入wordpress容器:

docker exec -it wordpress /bin/bash

 wordpress容器中的这个路径/usr/local/etc/php/,是存放 php.ini 的地方,但是默认是没有 php.ini 这个文件的,所以我们要通过复制一份php.ini-production文件,来生成 php.ini 文件。

cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini

正常情况下,我们就可以使用Vim编辑器编辑php.ini文件了,但是不幸的是,官方的Wordpress容器中并没有预装vim编辑器。更新及安装vim,使用如下代码:

apt-get update
apt-get install vim

安装完成vim,现在就可以对php.ini进行编辑了。

vim /usr/local/etc/php/php.ini

一般情况下我们修改这几个变量,当然根据自己需求修改。

memory_limit = 500M        #内存占用限制
upload_max_filesize = 200M    #文件大小限制
post_max_size = 250M    #post大小限制

退出docker容器

exit

重启容器

docker restart wordpress