Deploy WordPress with Docker and Traefik 2
一年半前我写了一篇使用Docker和Traefik来搭建WordPress的文章。现在回过头看里面的一些信息难免有些过时。想着借Traefik 2新版本的东风再写一篇如何用Traefik 2来部署WordPress,这次要加上SSL了。
从本篇文章开始我不会再重复性地复制粘贴Traefik的配置文件。我把默认的Traefik配置放在了这里。各位请自取
视频已经更新,请点击阅读全文查看视频。
就让我先贴上WordPress的docker-compose.yml
文件。
1 | version: '3.7' |
DB
Image:
WordPress可以使用的database选择有两个,要么MySQL:5.7 ,要么MariaDB。因为MySQL新版本的密码验证方法做了改变,因此如果想要使用MySQL新版本的话需要手动添加一个command^1。command如下
1 | image: mysql:8 |
我就不费这个事直接用MariaDB好了。
Service : Volume
我在这里创建了一个named volume叫db-data
[^2]。这样我们database里面的数据不会因为WordPress版本升级而发生改变,即使是container被移除的时候数据库也不会被删除。
Network:
请注意我在这里只加入了default
这一个network,docker会根据文件夹的名称来创建一个新的default network,比如说如果我的文件夹叫~/wordpress
,那么新创建的network的名字就是wordpress_default
。我这样的写法是把WordPress的database和其他的container分离开来,只有WordPress这个container才能接触到这个database。
Environment
这个就是简单的设置一下数据库名字,用户名和密码,各位可以随自己喜好随意设置。
切记:请不要在production的环境使用如此简单的用户名和密码
Service : WordPress
depends_on:
WordPress会在db
这个service运行之后才运行。在停止containers的时候也会先停止WordPress然后再停止db
Image:
这里我选择用WordPress最新的官方image
Environment
数据库的入口就是db
这个service的3306端口,其他的数据库名字,用户名密码等跟上面的设置一致即可。
Volumes
我这里把WordPress这个container里面html(也就是网站内容的文件夹)挂载了主机下的./wp-data
,这样做的好处是我可以随时修改这个文件夹下面的文件,比如说上传图片,管理插件和皮肤等。有的时候会遇到某个插件更新之后整个网站就down了,这个时候只需要登录到服务器把对应的插件删掉就可以了。
Network
我在这里让WordPress的container在两个Network里面。其中的一个是proxy
,这是为了Traefik可以找到这个container;另外一个是default
。这是为了让WordPress可以接触到wordpress_default
这个network里面的数据库。
Label
这里就是有意思的地方了。根据官方对于Docker Service的定义
- If a label defines a router (e.g. through a router Rule) and a label defines a service (e.g. implicitly through a loadbalancer server port value), but the router does not specify any service, then that service is automatically assigned to the router.
- If a label defines a router (e.g. through a router Rule) but no service is defined, then a service is automatically created and assigned to the router.
换成人话就是
- 如果用户不想在router里连接service,但是却定义了service(比如说通过定义负载军和到服务器的端口),那么这个service会自动被分配给这个router。
- 如果用户既不想在router里连接service,又不想定义任何的service,那么service会自动生成并分配给这个Router。
说白了就是咱们其实可以偷懒只定义一个hostname,其他的就交给Traefik就行了。
有的时候官方文档写的又绕又细,真是让人头晕😵
一切就绪之后,我们只需要docker-compose up -d
就可以完成WordPress的部署。
感谢收看,希望本文对您有所帮助。
[^2]: 请注意我们必须定义这个named volume。我这里也手动指定了volume的名字,不然的话自动生成的volume名字前会添加文件夹名称,比如说wordpress_db-data
。