利用docker和nginx配置wordpress服务器

Huan Lee Lv5

故事的开始

之前服务器因为redis配置失误,遭到挖矿木马的攻击,整个瘫痪掉了。不得已狠下心来,重装系统,从头开始配置服务器上的环境。
机缘巧合,了解倒了docker这个牛哄哄的部署神器。于是想着使用docker来进行配置wordpress。

那么我们的目标就定了:使用docker配置mysql和wordpress容器,nginx因为需要频繁使用,就直接使用yum下载;配置博客的https。

参考资料

一开始配置,走了许多弯路,docker容器删删改改浪费了好多时间,最后还是通过多个优质博客成功了:

  1. https://blog.jimmytinsley.com/2020/06/10/%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95-docker%E9%83%A8%E7%BD%B2wordpressnginx%E5%B9%B6%E5%90%AF%E7%94%A8ssl/
  2. https://www.yuribacciarini.com/set-up-docker-wordpress-behind-docker-nginx-with-ssl/
  3. https://www.idc1680.com/1320.html
    不知道为什么,明明几乎照着实现,但还是会有一些问题,好在最后还是成功了。

配置容器

编写docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: '3'
services:
wordpress-db:
image: mysql:5.6
volumes:
- db_data:/var/lib/mysql
ports:
- 13306:3306
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wp
MYSQL_PASSWORD: wppwd

my-wordpress:
depends_on:
- wordpress-db
image: wordpress:latest
volumes:
- ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
- ./wp-app:/var/www/html # Full wordpress project
ports:
- 13080:80
restart: always
environment:
WORDPRESS_DB_HOST: wordpress-db:3306
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: wppwd
WORDPRESS_DB_NAME: wordpress

volumes:
db_data: {}
  • 服务名称可以修改;
  • ports部分的左边端口号为本地监听的端口,可以根据自己的喜好or需要进行修改;
  • environment中的变量,根据自己的需要进行修改即可,但是改完之后要保持两个容器中变量的一致性;

编写php.conf.uploads.ini

1
2
3
4
5
file_uploads = On
max_execution_time = 600
memory_limit = 512M
post_max_size = 32M
upload_max_filesize = 32M

配置WORKSPACE

根据自己的习惯,设置一个wordpress的workspace;我个人的话就是把/usr/wp-blog作为WORKSPACE。

  1. 在该目录下新建两个目录wp和nginx, 用来存放相关的配置文件;
  2. 在wp目录下新建一个wp-app文件夹用来存放映射的WordPress程序文件,把之前的docker-compose.yml放在wp目录下,php.conf.uploads.ini放在wp-app目录下;

打工告成cd WORKSPACE/wp; docker-compose up -d启动镜像
在浏览器上输入you_ip_address:13080, 如果能够显示wordpress初始化界面,就成功了一大半。但是先不急着初始化。

配置nginx和ssl证书

通过各种渠道申请到ssl证书后,就可以通过nginx进行配置啦。
假设nginx的配置都是最初始的,那么首先在nginx目录下创建一个cert文件夹用来存放证书文件.
然后设置nginx.conf,关键部分如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name blog.muzi.fun;
#证书文件名称
ssl_certificate cert/blog.muzi.fun_bundle.crt;
#私钥文件名称
ssl_certificate_key cert/blog.muzi.fun.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

location / {
proxy_pass http://127.0.0.1:13080;
# proxy_ssl_server_name on;
proxy_redirect off;
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-Host $server_name;
}
}
server {
listen 80;
server_name blog.muzi.fun;
location / {
return 301 https://blog.muzi.fun$request_uri;
}
}

注意,具体的ssl配置规则以发放ssl证书厂商为准,可以灵活修改。
在启动nginx镜像前, 请先确保80和443端口没有被占用, 再确保WordPress在http协议下的ip:port的访问是否正常, 再再确保你的WordPress是全新的或做好了资料备份的. 一切OK的话, 前往WordPress的设置->常规中把站点地址和WordPress地址都改成https://your_domain.com . 这一步有风险, 请不要在WordPress有资料且未备份的情况下执行操作!
然后启动nginx。
这时尝试https://your_domain.com , 如果能够显示主页,就接近成功啦!为什么是接近呢?因为wordpress的镜像在配置ssl证书之后可能存在一些问题,所以我们需要修改一下内容。

修改wp-config.php

打开WORKSPACE/wp/wp-app,在最上面(<?php下边)添加三行即可,注意要加到上面,我之前尝试过加到文件最后面,就无效了,大概这几个变量在该文件中的几个函数里就被重复使用了。

1
2
3
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

至此,我的wordpress就部署好了,等待大家的好消息!

  • Title: 利用docker和nginx配置wordpress服务器
  • Author: Huan Lee
  • Created at : 2022-06-18 14:14:20
  • Updated at : 2024-02-26 04:53:15
  • Link: https://www.mirthfullee.com/2022/06/18/利用docker和nginx配置wordpress服务器/
  • License: This work is licensed under CC BY-NC-SA 4.0.