使用 Docker 从零搭建 WordPress 博客

旧服务器到期,没有低价续费的机会了,所以把相关服务迁移到了现在的服务器上,为了方便以后类似的迁移,打算将服务全员容器化。

本篇文章容器化的服务有 MySQL、WordPress、Nginx。

首先安装 Docker 服务,这里参考官方文档

# 初始化 Repository
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 当然,推荐使用阿里的镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker 引擎
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动 Docker
systemctl enable docker
systemctl start docker
# 在家目录创建一个目录,作为 Docker 挂载点
cd ~
mkdir docker_data

然后,创建一个 Docker 网络,将我们需要的服务都纳入到这个网络下,方便容器间通信。

# 创建一个名为 web 的网络,采用桥接模式
docker network create --driver bridge web
# 查看是否创建成功
docker network ls

创建 MySQL 容器

# 拉取 MySQL 镜像
docker pull mysql:5.7

# MySQL~起洞!
docker run \
  -d \
  -p 3306:3306 \
  --name mysql5.7 \
  --network=web 网络 \
  --env MYSQL_ROOT_PASSWORD=自定义密码 \
  --env MYSQL_DATABASE=数据库名称,一般写 wordpress \
  mysql:5.7

创建 WordPress 容器

# 拉取 WordPress 镜像
docker pull wordpress

# WordPress~起洞!
# 这里使用宿主机的 8080 端口,后面 Nginx 使用 80 端口
docker run \
  -d \
  -p 8080:80 \
  --name wordpress \
  --network=web \
  --env WORDPRESS_DB_HOST=mysql5.7 \
  --env WORDPRESS_DB_NAME=wordpress \
  --env WORDPRESS_DB_USER=root \
  --env WORDPRESS_DB_PASSWORD=自定义密码 \
  --volume /root/docker_data/wordpress:/var/www/html \
  wordpress

# 注意,这里的 mysql5.7 实际上是上面创建的 MySQL 容器名,因为他们都在同一个网络下,可以通过容器名通信

创建 Nginx 容器

# 拉取 Nginx 镜像
docker pull nginx

# Nginx~起洞!
# Nginx 的配置麻烦一些,因为涉及到各种配置文件
# 需要一步一步将文件 copy 出来,直接挂载空目录会报错

# 先去挂载点创建好目录
cd ~
mkdir -p docker_data/nginx/html
mkdir -p docker_data/nginx/conf
mkdir -p docker_data/nginx/log
cd docker_data/nginx

# 创建一个临时的 Nginx 容器,用于 copy 文件
docker run -d --rm --name nginx-tmp -p 80:80 nginx
# 将容器中的 /usr/share/nginx/html 下面的所有文件拷贝到挂载点(不能用*,要用.) 
docker cp nginx-tmp:/usr/share/nginx/html/. ./html
# 将容器中的 /etc/nginx 下面所有的文件拷贝到挂载点
docker cp nginx-tmp:/etc/nginx/. ./conf
# 将容器中 /var/log/nginx 下面的文件拷贝到挂载点
docker cp nginx-tmp:/var/log/nginx/. ./log

# 所有挂载点都设置好后,就可以创建真正的 Nginx 容器了,删掉之前临时的容器
docker rm -f nginx-tmp
# Nginx~起洞!
docker run \
  -d \
  --name nginx \
  -p 80:80 \
  -p 443:443 \
  -v 挂载点/html:/usr/share/nginx/html \
  -v 挂载点/conf:/etc/nginx \
  -v 挂载点/log:/var/log/nginx \
  --network=web \
  nginx

配置 Nginx 配置文件

server {
    # SSL 访问端口号为 443
    listen 443 ssl;
    # 填写绑定证书的域名
    server_name xxx.com www.xxx.com;
    # 证书文件名称
    ssl_certificate /etc/nginx/ssl/xxx.com.cert;
    # 私钥文件名称
    ssl_certificate_key /etc/nginx/ssl/xxx.com.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;

    access_log /var/log/nginx/wordpress.access.log;
    error_log  /var/log/nginx/wordpress.error.log;

    location / {
        # 注意,这里的 wordpress 实际上是上面创建的 WordPress 容器名,因为他们都在同一个网络下,可以通过容器名通信
        proxy_pass http://wordpress/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    # 填写绑定证书的域名
    server_name xxx.com www.xxx.com;
    # 把http的域名请求转成https
    return 301 https://$host$request_uri;
}

# 这里的证书相关文件放在了 Nginx 配置文件目录下,配置 HTTPS 的话需要自己准备好域名和证书

然后,输入域名,开始安装 WordPress。

参考资料

CentOS 安装 Docker - 官方文档

docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注