关闭

docker+mysql+ghost打造属于自己的博客系统

标签: mysql数据库博客
1742人阅读 评论(1) 收藏 举报
分类:

1. ghost简介

Ghost 是基于 Node.js 的开源博客平台,由前 WordPress UI 部门主管 John O’Nolan 和 WordPress 高级工程师(女) Hannah Wolfe 创立,目的是为了给用户提供一种更加纯粹的内容写作与发布平台。

下面将演示如何通过docker一步一步创建一个属于自己的博客系统。

2. 安装docker并创建相关docker镜像

2.1 安装docker

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:

  • web应用的自动化打包和发布;

  • 自动化测试和持续集成、发布;

  • 在服务型环境中部署和调整数据库或其他的后台应用;

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

已经安装好docker的可以跳过这一步。我的操作系统是CentOS 7.0.1406 (Core) 64位,通过下面命令安装docker并设置开机启动。

yum install docker

systemctl start docker.service

systemctl enable docker.service

2.2 创建相关docker镜像

下载基础镜像

docker pull daocloud.io/library/ubuntu:latest #国内daocloud.io提供的基础ubuntu镜像,下载速度快

2.2.1 通过Dockerfile创建mysql镜像

Dockerfile是一个镜像的表示,可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器。

这里采用的是我github上的docker项目访问我的github项目

  1. 从github上克隆创建mysql镜像的docker相关文件
git clone https://github.com/xiongjungit/docker-mysql.git

没有安装git工具的也可以通过wget下载

wget https://github.com/xiongjungit/docker-mysql/archive/master.zip
  1. 创建mysql镜像
docker build -t xman/mysql:5.6 /root/github/docker-mysql/5.6/.

这里需要等待一段时间,根据机器的配置等待的时间有所不同。

2.2.2 通过Dockerfile创建ghost镜像

同样创建ghost的docker镜像

  1. 从github上克隆创建ghost镜像的docker相关文件
git clone https://github.com/xiongjungit/docker-ghost.git

没有安装git工具的也可以通过wget下载

wget https://github.com/xiongjungit/docker-ghost/archive/master.zip
  1. 创建ghost镜像
docker build -t xman/ghost:0.7.4 /root/github/docker-ghost/.

2.2.3 查看创建好的镜像

docker images

以上步骤如果没有出错的话应该就能看到3个镜像

REPOSITORY                       TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
daocloud.io/library/ubuntu       latest              8e5b7248472b        2 days ago          122 MB
xman/mysql                       5.6                 3e20f9f636f3        5 weeks ago         471.9 MB
xman/ghost                       0.7.4               d146ee175600        22 hours ago        1.155 GB

3. 启动相关镜像

依次启动mysql镜像和ghost镜像

3.1 启动mysql镜像

创建好需要持久保存数据的文件夹,这里是/data/ghost/ghostdb/data目录。-v选项是映射本地目录到容器目录,其中/data/ghost/ghostdb/data是本地保存mysql数据库的目录,/var/lib/mysql是容器中mysql的目录。

docker run -h ghostdb -d -p 3306:3306 -v /data/ghost/ghostdb/data:/var/lib/mysql --name ghostdb xman/mysql:5.6

sleep 3

docker logs mysql

会有如下提示,给出连接mysql的用户名和密码(密码随机生成)

#========================================================================
#You can now connect to this MySQL Server using:
#
#    mysql -uadmin -p5yIlmt4IXEYs -h<host> -P<port>
#
#Please remember to change the above password as soon as possible!
#MySQL user 'root' has no password but only allows local connections
#========================================================================

3.2 创建ghost数据库

进入到创建好的mysql容器的bash环境创建ghost数据库

docker exec -it ghostdb /bin/bash

此时会返回一个mysql容器的bash环境,在bash环境中创建ghost数据库(root用户为空密码)

root@ghostdb:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 493
Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database ghost;
Query OK, 1 row affected (0.00 sec)

mysql> exit
Bye
root@ghostdb:/#

创建好ghost数据库后就可以退出mysql容器的bash环境了

root@ghostdb:/# exit
exit
[root@docker github]# 

到此ghost数据库就创建好了。

3.3 启动ghost镜像

接下来可以启动ghost镜像了,ghost镜像默认使用sqlite数据库来存储数据,我们需要修改相关配置来改为使用mysql存储数据

通过ghost镜像创建一个ghost容器

docker run -h ghost -d -p 80:2368 -v /data/ghost/content:/ghost/content --link ghostdb:db --name ghost xman/ghost #默认使用sqlite数据库

查看正在运行的容器

docker ps

CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                    NAMES
691fa174cc7a        xman/ghost:0.7.4    "bash /ghost-start"   2 hours ago         Up About an hour    0.0.0.0:80->2368/tcp     ghost
7dba184f92b1        xman/mysql:5.6      "/run.sh"             2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp   ghostdb

以上步骤没出错的话应该能开到2个正在运行的docker容器,一个是ghost容器,一个是ghostdb容器。

4 修改ghost的配置文件

修改ghost的配置文件config.js,让ghost使用mysql数据库。

docker exec -it ghost /bin/bash

[ root@ghost:/ghost ]$ 
[ root@ghost:/ghost ]$ vim config.js

下面是是需要修改的默认的config.js文件部分

 production: {
        url: 'http://my-ghost-blog.com',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },

将上面一段话给注释掉

 /*   
    production: {
        url: 'http://my-ghost-blog.com',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },

*/

添加下面这一段话

//修改为使用mysql数据库
 production: {
        url: 'http://博客URL地址',
        mail: {},
        database: {
            client: 'mysql',
            connection: {
                host     : '172.17.0.2',
                user     : 'admin', //用户名
                password : '5yIlmt4IXEYs', //密码
                database : 'ghost', //数据库名
                charset  : 'utf8'
            }
        },

修改完成后需要重新启动ghost容器使修改生效。

docker restart ghost

也可以使用下面这种方法修改,效果同上面是一样的。

通过docker inspect命令查看目录挂载情况,docker inspect命令用于获取容器/镜像的元数据,其中 -f参数可以用于获取指定的数据,例如使用 docker inspect -f {{.IPAddress}}来获取容器的 IP 地址。

docker inspect -f {{.Mounts}} ghost|awk '{print $6}'

/var/lib/docker/volumes/b9df492cdd0445 2e8f756284e3817247ada082fbd35b2319e43dbfb9b6dec143/_data

然后进入到/var/lib/docker/volumes/b9df492cdd04452e8f756284e3817247ada082fbd35b2319e43dbfb9b6dec143/_data目录修改config.js文件。

5 访问创建好的ghost博客系统

到此为止,ghost博客系统就全部创建完成,通过谷歌chrome浏览器来查看一下辛勤劳动的成果吧http://docker宿主机IP:80

6 ghost数据库的备份和恢复

通过导出sql文件来备份ghost数据库。

6.1 数据库备份

首先进入到ghostdb容器的bash环境中

docker exec -it ghostdb /bin/bash

root@ghostdb:/#

执行数据库导出sql文件

root@ghostdb:~# mysqldump -u root -p ghost > /root/ghost.sql
Enter password: 
root@ghostdb:~#

查看导出的sql文件

root@ghostdb:~# ls
ghost.sql
root@ghostdb:~#

6.2 数据库恢复

将备份的sql脚本文件通过sftp等方式传到docker宿主机的/data/ghost/ghsotdb/data文件夹中

如果不存在ghost数据库需要先创建ghost数据库

mysql> 
mysql> create database ghost;
Query OK, 1 row affected (0.00 sec)

mysql> use ghost;
Database changed
mysql>

执行数据库恢复

mysql> source /var/lib/mysql/ghost.sql
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.04 sec)
......

或者使用mysqldump来恢复(好像不管用)

root@ghostdb:~# mysqldump -u root -p ghost < /var/lib/mysql/ghost.sql
Enter password: 
-- MySQL dump 10.13  Distrib 5.6.28, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: ghost
-- ------------------------------------------------------
-- Server version   5.6.28-0ubuntu0.14.04.1

-- Dump completed on 2016-05-30 10:13:44
root@ghostdb:~#

7 总结

总结一下上面的步骤

1>. 安装docker:

yum install docker

2>. 下载基础镜像:

docker pull daocloud.io/library/ubuntu:latest

3>. 从github上克隆mysql和ghost的docker项目文件:

git clone https://github.com/xiongjungit/docker-mysql.git

git clone https://github.com/xiongjungit/docker-ghost.git

4>. 构建mysql和ghost镜像文件:

docker build -t xman/mysql:5.6 /root/github/docker-mysql/5.6/.

docker build -t xman/ghost:0.7.4 /root/github/docker-ghost/.

5>. 创建mysql和ghost容器:

docker run -h ghostdb -d -p 3306:3306 -v /data/ghost/ghostdb/data:/var/lib/mysql --name ghostdb xman/mysql:5.6

sleep 3

docker logs mysql

docker run -h ghost -d -p 80:2368 -v /data/ghost/content:/ghost/content --link ghostdb:db --name ghost xman/ghost

6>. 创建ghsot数据库:

root@ghostdb:/# mysql -uroot -p

mysql> create database ghost;
Query OK, 1 row affected (0.00 sec)

7>. 修改ghost配置文件config.js:

将下面一段话给注释掉

 /*   
    production: {
        url: 'http://my-ghost-blog.com',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },

*/

添加下面这一段话

//修改为使用mysql数据库
 production: {
        url: 'http://博客URL地址',
        mail: {},
        database: {
            client: 'mysql',
            connection: {
                host     : '172.17.0.2',
                user     : 'admin', //用户名
                password : '5yIlmt4IXEYs', //密码
                database : 'ghost', //数据库名
                charset  : 'utf8'
            }
        },

8>. 重启ghost容器:

docker restart ghost

The End

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8292次
    • 积分:123
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档
    最新评论