之前在俱乐部教过大家如何在宿主机中直接搭建wordpress博客,这里我们换一种方式:使用 docker-compose
如果不了解docker的话可以先康康我前面几篇博客,比如 docker入门
如果想直接用docker搭建博客的话可以自行百度,具体流程和俱乐部上课讲的差不多:构建服务器、构建数据库、构建wordpress,只是构建过程有些许差异
聊聊 docker-compoes :
docker-compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用。可以理解为docker的“管家”,将配置docker的过程程序化,保留配置文件(.yml)使得配置过程能够轻松复现。


简单来说,docker-compose 就是docker的集成管理器,协调部署多个docker或者docker集群
而搭建一个个人博客,大致需要服务器、数据库、博客模板这三个模块,所以用docker-compose搭建比直接使用docker搭建会方便一些。
话不多说,直接上项目地址: https://github.com/xiabee/docker-ngixn
使用方法:
- 将整个项目拷贝到目标文件夹
- 修改
docker-compose.yml
中的密码信息 apt install docker-compose
安装docker-composedocker-compose up -d
,以守护进程模式构建docker- 等待镜像下载,等待镜像构建
- 完成之后,进入
nginx
文件夹,删除nginx_https.conf
文件,保留nginx.conf
(如果你想搭建hppts网站那另外说) - 确保nginx文件夹内有配置文件 *.conf!!!!
- 如果是手动拷贝的conf文件,需要重启docker:
docker-compose restart
- 然后浏览器访问你的ip地址/域名,能看到wordpress的安装界面:
这里面的账号密码是博客的账号密码,和文件里设置的数据库账号密码没有毛线关系

代码详解:
docker-compose.yml:注意空格和缩进的对齐
分为三个模块,分别为三个对应服务:mysql, nginx, wordpress
① mysql 模块:
mysql:
# 选中mariadb的最新版本
image: mariadb:latest
# 端口
expose:
- "3306"
#映射本地 当前目录下mysql文件夹持久化
volumes:
- ./mysql:/var/lib/mysql
#环境变量设置用户名密码
environment:
- MYSQL_ROOT_PASSWORD= #这里设置密码
- MYSQL_USER=wordpress
- MYSQL_PASSWORD= #这里设置密码
- MYSQL_DATABASE=wordpress
- MYSQL_RANDOM_ROOT_PASSWORD=1
#这里使用命令登陆,删除后可能于新版mysql不兼容
command: [--default-authentication-plugin=mysql_native_password, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci]
#挂掉自动重启
#restart: always
- image:选择镜像,这里直接选择最新版即可
- expose:开放端口,数据库常用端口为3306
- volume:数据卷挂载,将docker容器内的文件映射到宿主机中,实现文件共享,同时方便后期的修改和维护
- environment:设置环境变量,设置用户名和密码,设置数据库(DB),这里预设置为wordpress用户,使用wordpress数据库,密码自定义
- command:博主测试,新版数据库可能不兼容wordpress,直接连接会卡bug,这里使用命令连接尽量避免出bug导致断线
- restart:断线重启,根据个人需要自行取消注释
② wordpress 模块:
wordpress:
# 选中带有php-fpm 的版本,wordpress docker上有很多版本,根据自己情况选择需要的版本
image: wordpress:5.3.2-php7.2-fpm
# 把wordpress的主体文件夹映射到本地 wordpress目录
volumes:
- ./wordpress:/var/www/html
# 环境变量 根据mysql 设置的填入
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_NAME=wordpress
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD= #这里填写密码
# 设置依赖
depends_on:
- mysql
#restart: always
- image:选择镜像,这里要选带有 fpm 的版本,因为 wordpress 原装镜像是为了兼容Apache的,而我们选择了抗并发的 nginx 作服务器,而nginx本身不支持动态的wordpress,所以需要附加 fpm 支持,这里选择的是 wordpress:5.3.2-php7.2-fpm ,这个版本是博主建站时的最新版本,可以根据需求自行修改
- volumes:这里直接把整个网站目录挂载在宿主机中,方便后期权限管理
- environment:设置环境变量,注意这里密码要和上面设置的密码一致
- depends_on:设置依赖,wordpress需要与mysql共同运行
- restart:同上,自行选择
③nginx 模块 (核心模块):
nginx:
image: nginx:latest
ports:
- '80:80'
- '443:443'
# 映射本地,加载本地的配置
volumes:
- ./nginx:/etc/nginx/conf.d #注意服务器配置文件的映射位置,如果需要修改配置,直接修改映射的文件即可
- ./logs/nginx:/var/log/nginx
- ./wordpress:/var/www/html #这里选择本地wordpress即 wordpress。docker中的目录
depends_on:
- wordpress
#restart: always
- ports:端口映射,这里映射常用的80端口和443端口,分别对应http服务和https服务
- volumes:注意,会生成一个nginx文件夹,服务器的配置文件会映射在这个文件夹内,所以修改这个文件夹的文件内容等效于直接修改配置文件
④ docker内网模式:
因为懒得给网卡取名,所以使用了默认的连接方式- 什么都不写,它会自动生成桥接模式内网,保证容器之间的通信畅通
- 如果需要修改连接模式可以自行添加网卡模块
nginx.conf :
server {
listen 80; #设置监听端口,http默认端口为80
server_name localhost;
root /var/www/html;
index index.php;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
- server:服务模块,一个conf文件里面可以配置多个server,这里只写了一个
- listen:监听端口,这里我们建立http服务,所以监听80端口(如果需要建立hppts服务则需要监听443端口)
- server_name:网站域名,这里可以直接用localhost代替
- root /var/www/html:根目录
- xxx_log xxx_log:文件映射,同volume,映射到本地方便查看日志
- location:路径设置
注意!!!
在docker-compose up -d
之后,一定记得把nginx.conf放到宿主机nginx文件夹里面!!!因为nginx镜像直接运行时没有配置文件的......
忘记放配置文件的话......大概会和沙雕的博主一样痛苦维修一两天,然后再也不会忘了:一个nginx.conf引发的惨案
----------------------------------------------分割线-------------------------------------------
如果一切顺利的话,直接访问ip就已经可以搭建博客了......
如果不顺利的话,八成是docker-compose build失败,或者防火墙没开......
build失败可以查看日志docker-compose logs
,康康报错具体内容,然后再build一次
防火墙的问题......先检查服务器防火墙,然后检查云平台防火墙:打开80端口和443端口(如果其他端口有服务需要打开话也一起打开

(我的阿里云是要手动打开端口的,之前一直找不到原因,就很智熄
http服务的网站直接这样搭建就可以了,https的网站请看这里: 告别浏览器警告,全站开启https
Comments | NOTHING