wordpress+docker+nginx安装wordpress

之前使用nginx + wordpress搭建过wordpress博客,但是整个过程过于复杂和繁琐,最近开发项目中使用到了docker和docker-compose感觉到项目自动部署和配置的便捷,这次我们选用 docker 和 wordpress 来进行 wordpress 的部署。nginx 作为外围网关,当然你也可以将 nginx 放入 docker 中。

1. docker 和 docker-compose 安装

首先我们准备好 docker 和 docker-compose,docker 直接使用官方的安装脚本进行安装。安装命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

你也可以使用国内一键安装的脚本:curl -sSL https://get.daoclound.io/docker | sh

Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。

运行以下命令以下载 Docker Compose 的当前稳定版本:sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。

将可执行权限应用于二进制文件:sudo chmod +x /usr/local/bin/docker-compose

创建软链:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2. docker-compose.yml 文件的编写

在 docker 中启动 mysql 和 wordpress 两个容器,将 mysql 和 wordpress 的数据挂载在宿主机中方便将来做数据的迁移。具体的配置文件如下:

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
34
version: "3"

services:
mysql-wordpress:
image: mysql:8.0
container_name: wordpress-mysql
volumes:
# mysql 文件夹挂载
- ./data/mysql-wordpress:/var/lib/mysql
restart: always
environment:
# 默认密码配置,后面 wordpress 容器要使用到
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depends_on:
- mysql-wordpress
image: wordpress:latest
container_name: wordpress
volumes:
# wordpress 文件挂载
- ./data/wordpres:/var/www/html
ports:
- "8000:80"
restart: always
environment:
# wordpress 数据库连接
WORDPRESS_DB_HOST: mysql-wordpress:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordprses
WORDPRESS_DB_NAME: wordpress

3. 宿主机 nginx 配置

首先将 nginx 配置使用 http 访问 wordpress,将 wordpress 初始化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
upstream wordpress {
server localhost:8000;
}

server {
listen 80;
server_name blog.wttch.com;

location / {
proxy_pass http://wordpress;
proxy_redirect off;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 转发host信息
proxy_set_header Host $host;
}
}

此时就可以通过 http://blog.wttch.com 访问 wordpress 了。

附加. 配置 https

通过 https://github.com/acmesh-official/acme.sh 你可以配置 https 证书的自动配置,然后将生成的证书配置到 nginx 中。在此之前要记得将 wordpress 的 site_url 和 home 连接修改为 https,不然后面会出现 mixed content 错误。

nginx https 的具体配置如下:

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
34
35
36
37
upstream wordpress {
server localhost:8000;
}

server {
listen 80;
server_name blog.wttch.com;

rewrite ^/(.*?)$ https://blog.wttch.com/$1 permanent;
}

server {
listen 443 ssl;
server_name blog.wttch.com;

location / {
proxy_pass http://wordpress;
proxy_redirect off;

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 转发host信息
proxy_set_header Host $host;
}
# ssl证书地址
ssl_certificate /etc/nginx/https/cert.pem; # pem文件的路径
ssl_certificate_key /etc/nginx/https/key.pem; # key文件的路径

# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
}

wordpress+docker+nginx安装wordpress
https://wttch96.github.io/post/wordpress-docker-nginx安装wordpress.html
作者
Wttch
发布于
2022年3月31日
许可协议