准备工作
本文主要讲解如何在自己的云服务器上使用docker搭建自己的网站
关于WordPress
WordPress是一个非常著名的PHP编写的博客平台,发展到目前为止已经形成了一个庞大的网站平台系统。在WP上有规模庞大的插件和主题,可以帮助我们快速建立一个博客甚至网站。
在Windows上可以非常方便的安装WordPress,因为IIS上集成了WordPress的一键安装包。而在Linux上安装WordPress就比较复杂了,我们需要配置PHP环境、Apache或者Nginx服务器、MySQL数据库以及各种权限和访问问题。所以在Linux上最好的办法就是使用Docker来安装WordPress。
安装Docker
安装WordPress
有了Docker,安装WordPress就很简单了,直接一条命令搞定。
docker pull wordpress:latest
安装MySQL
WordPress需要使用MySQL数据库,这里也有两种方式,第一种是安装本地MySQL,第二种就是在Docker中安装MySQL镜像。如果要在Docker中安装MySQL也非常简单,同样一条命令搞定。
docker pull mysql:latest
如果从Docker中安装MySQL,还需要额外的配置来启动MySQL,具体文档参考这里。启动MySQL使用下面的命令。
docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
name
参数指定要启动的实例名称,MYSQL_ROOT_PASSWORD
指定ROOT密码。tag
参数是MySQL的版本号,可以是5.7
、5.6
、8.0
。
配置WordPress
安装好数据库之后,就可以启动WordPress了。详细的文档参考这里。如果使用Docker中安装的MySQL实例,使用下面的命令。
docker run --name wordpress --link mysql:mysql -p 8080:80 -d wordpress
name
参数指定要启动的WordPress实例名称,link
参数指定要使用的Docker MySQL实例名称,p
参数将Docker内部的80端口映射到本地的8080端口上。
如果使用外部的MySQL数据库,则输入下面的命令。
docker run --name wordpress -e WORDPRESS_DB_HOST=10.1.2.3:3306 \
-e WORDPRESS_DB_USER=... -e WORDPRESS_DB_PASSWORD=... -d wordpress
WORDPRESS_DB_HOST
参数是MySQL的数据库端口号,WORDPRESS_DB_USER
是要数据库用户名,WORDPRESS_DB_PASSWORD
是数据库密码。这里的WORDPRESS_DB_HOST
参数不能填写localhost
,因为这样会重定向到WordPress镜像内部的localhost
,而这个镜像中实际上没有安装MySQL。所以这里需要填写本机IP地址,才能正确访问到Docker外部的本机的数据库。
因此需要注意,如果使用外部数据库的话,数据库的用户需要具有外部IP的权限,因为这次不是通过本机回环地址访问。默认情况下MySQL安装时候的ROOT用户只允许本地登录,所以可能需要配置允许用户远程登录。
然后打开浏览器,输入localhost:8080
(端口号是命令中设置的),然后就可以看到WordPress了。按照提示输入用户名等信息,然后安装WordPress。等到它提示安装完成,那么WordPress的安装就算大功告成了。
最后稍加配置,再添加诸如内网映射等功能之后,站点就可以对外访问了。
你可能会遇到的问题
按照上面的步骤,wordpress已经搭建了不过笔者访问的时候遇到了一个大坑:
Error establishing a database connection
数据库连接失败了,到底哪除了问题
最后找了很久资料发现原因是认证方法错误,mysql8.0以后默认的认证方式改了,所以才会有这样的错误
解决方法
#进入mysql容器
docker exec -it mysql /bin/bash
#登陆数据库
mysql -u root -p
use mysql;
#开启root远程访问权限
grant all on *.* to 'root'@'%';
#修改加密规则
alter user 'root'@'localhost' identified by '123456' password expire never;
#更新密码
alter user 'root'@'%' identified with mysql_native_password by '123456';
#刷新权限
flush privileges;
另外你需要注意wordpress镜像里的config文件里配置的数据库名和账号密码必须对应。
可以使用下面的命令进去查看
docker exec -it wordpress /bin/bash