Docker搭建WP博客

  • 2019-12-30
  • 50
  • 0

前言

总结自己搭建此WP博客的基本历程.顺便也算是对最近瞎折腾的一段时间的总结吧.
本教程默认已经在服务器上安装好了docker环境.如果不太了解的,可以参考这一篇博文: Docker基础系列(一)-安装Docker服务
可以称得上是傻瓜式教学吧.

运行环境

以本人实际操作的为主:
1. Linux服务器 CentOS7.7
2. Docker 版本:19.03.5 在线安装
3. wordpress镜像 tag:latest 在线下载
4. mysql 使用的是5.7版本

本人使用的是阿里云服务器,因此大部分操作就比较简单.
配置: 2核4G 安装完成后,实际消耗资源较低. 个人理解完全可以在1G内存的linux上运行.

以上准备好之后,就来一起搭建自己的博客系统吧.

Docker搭建WP

我们使用最新的wordpress镜像来进行搭建.

[root@bogon ~]# docker search wordpress
---------------------------
INDEX       NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/wordpress                                The WordPress rich content management syst...   3298      [OK]       
docker.io   docker.io/bitnami/wordpress                        Bitnami Docker Image for WordPress              125                  [OK]
...

下载mysql镜像:
docker pull mysql:5.7

下载wp镜像:
docker pull wordpress
默认下载的是最新的wp镜像.

先运行mysql

docker run -dti --name=mysql5.7 -p 8806:3306 -v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=wordpress \
mysql:5.7

说明:
-dti 让容器自动后台运行.
--name 指定当前mysql运行后的容器名称.可作为唯一识别
-p 端口映射: 宿主机:容器 mysql容器内部默认暴露的是3306端口.我们将宿主机的8806端口映射到容器的3306端口,这样在当前宿主机的所有内部docker容器中,可以通过mysql:3306访问到mysql数据库.在容器外部,可以通过宿主机的ip:8806访问到数据库. 可以了解一下-P指令(大小写区别)
-v 目录映射,将关键数据映射到宿主机,防止容器删除时,数据丢失.
-e MYSQL_ROOT_PASSWORD 指定mysql环境参数.root用户的密码.
-e MYSQL_DATABASE=wordpress 会自动创建wordpress数据库,是否添加根据个人情况.

启动后,我们可以查看到已经跑着了mysql数据库:

[root@bogon mysql]# docker ps
---------------------
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
881c87445c54        mysql:5.7           "docker-entrypoint..."   4 days ago          Up 5 seconds        33060/tcp, 0.0.0.0:8806->3306/tcp   mysql5.7

说明: 可以直观的看到当前mysql已经运行,并且绑定了宿主机的8806端口.此时我们可以通过数据库客户端链接到数据库. 宿主机ip:8806

运行wp容器

前提:
– 运行wp的时候,是需要连接到数据库的,并且指定数据库中需要存在wordpress数据库.
– 使用的用户需要有wordpress数据库完全控制权限.

方式一:内联数据库

前提: mysql和wp安装在同一台宿主机中,并且都是使用docker部署的.

docker run -dti --name=wp -p 8089:80 --link=mysql5.7:mysql \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpress \
-e WORDPRESS_DB_HOST=mysql wordpress

说明:
--link是指将当前mysql容器与当前wp做内联.简单理解就是在wp容器内部,可以通过mysql名称识别到对应的主机,实际原理就是在wp容器内部的hosts文件中,做了一个类似dns的映射关系.
WORDPRESS_DB_HOST 指定mysql数据库的地址.
WORDPRESS_DB_USER 指定连接到数据库的wordpress用户
WORDPRESS_DB_PASSWORD 指定连接到数据库wordpress用户的密码.

启动后的报错:
1.无法连接到数据库. 大部分原因都是因为在mysql数据库中没有我们运行时指定的用户.

方式二: 连接外部数据库

mysql数据库随意位置.
前提: mysql数据库中有分配指定的用户,有wordpress数据库的完全控制权限.

docker run -dti --name=wp -p 8089:80 \
-e WORDPRESS_DB_HOST=172.16.8.57:8806 \ //连接到已经配置好的数据库
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=wordpress  wordpress

mysql用户解决

1.连接到当前的数据库之后,查看是否有wordpress数据库,如果没有的话,新建一个即可.编码格式选择utf-8

另外一种不用创建用户的方案:直接使用root登录数据库即可.但是不赞成,权限太大. WORDPRESS_DB_USER=root 密码配置 root用户的密码.

一定要记住,分配给wordpress的用户一定需要有wordpress库的控制权限.

创建用户:

指定某一个用户可以使用任何ip登录
create user "wordpress"@"%" identified by "wordpress";
identitied by 就是该用户的密码

授权:

grant all privileges on wordpress.* to "wordpress"@"%";  
wordpress用户可以在任何ip下对wordpress数据库进行任何操作

查看权限:

show grants for "wordpress"@"%";

参考: MySQL用户授权

OK,数据库用户配置完成,使用wordpress用户登录数据库查看一下,是否有wordpress数据库的控制权限.

再次启动wp容器.

wp问题解决:

启动wp后,我们访问 宿主机ip:8089,发现页面没有反应,但是,查看wp容器正常运行.
查看日志:

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message

百度一下,发现以上问题是apache的问题.
原因是Apache的配置问题,少了一个ServerName的配置.

解决步骤:
1.进入wp容器内部

[root@bogon wordpress]# docker exec -ti wp /bin/bash
-----------------------
root@957dcfebd65d:/var/www/html# 

2.找到到Apache的配置文件.
cd /etc/apache2/可以看到apache2.conf配置文件.
尾部添加一句:
ServerName 127.0.0.1
发现wordpress镜像中没有vi和vim命令.我的个去…这下尴尬了.
别急,使用echo来完成.

echo "ServerName 127.0.0.1" >> apache2.conf

配置完成后,重启wp服务即可.

// 退出容器内部 
exit
// 重启wp应用
docker restart wp

再次访问:

0

评论

还没有任何评论,你来说两句吧