3分钟构建一本属于自己的电子书(附我的研究过程)
背景分析
不知道大家有没有发现,学编程学了又忘,在此呢我给朋友们推荐两个办法:
- 搭建博客记录我们学习的内容
- 搭建一个属于我们自己的电子书
博客适用于一些零零碎碎的文章。
而电子书呢则适用于一个体系的内容,从头到尾系统的学习。
类似于这样:
前面我已经介绍过了关于博客的搭建 传动门
这篇呢就介绍如何搭建属于自己的一个电子书。
gitbook
gitbook是一款基于Node.js的命令行工具,可用来制作精美的电子书。格式可以为 HTML,PDF,eBook等。
但是由于搭建Gitbook环境经常会遇到一些问题,如下载经常失败等。
所以我将采用 docker 容器的方式部署环境,并开源给大家使用。
可以在三分钟之内构建属于自己的一款电子书,当然前提是需要安装 docker 环境!
如果你还没有使用过 docker,建议去了解一下,因为这是一个跨时代的产物,不然你就 out 了。
如果你现在就想试试,跳过接下来的内容,直接阅读如何使用即可。
快速体验 gitbook
当我们的需求无法得到满足时,我们会自己去造轮子。
但是已经有别人做好的轮子时,就不要造了,因为不见得你做的就比别人做的好!
不过造轮子的过程你最好要搞清楚
使用 docker search gitbook 进行查看。
我们找到了一个还不错的镜像fellah/gitbook
。
如果你想看到该镜像是如何进行创建的
需要进入docker官方网站上找到源码
接下来我们基于该镜像运行一个容器,并进入 bash shell。
docker run --rm -it fellah/gitbook bash
可以看到 gitbook 命令已经安装成功。
使用 gitbook 容器构建电子书
- SUMMARY.md
- README.md
- 以及各个章节的md文件
mkdir mybook
cd mybook
touch SUMMARY.md
touch README.md
touch page1.md
touch page2.md
并在文件中写入如下内容。
SUMMARY即可以当作电子书的目录,page1 将跳转到 page1.md 文件,page2 将跳转到 page2.md 文件。
接下来我们使用命令 gitbook guild
。
可以看到生成了一个 _book目录。这个即我们使用 gitbook 生成的一个 html 电子书。
点击 index.html 即可以在网页中查看。
映射容器与本机的文件
我们发现一个问题,生成的文件在容器内部,我们本机无法访问,那该如何解决呢?
docker 提供了一个强大的功能,容器可以与本机上的文件夹映射,同步更新。
我们可以使用 -v 选项。
在宿主机上重复上述的步骤,创建需要的文件
- SUMMARY.md
- README.md
- page1.md
- page2.md
并写入相应的内容。
docker run --rm -v $PWD:/srv/gitbook fellah/gitbook gitbook build
- -v $PWD:/srv/gitbook 即将当前目录映射到容易的 /srv/gitbook 上
- --rm 表示运行一次容器之后就将该容器删除
生成的 _book文件夹在本地上已经存在了。
我们来访问一下,点击_book 下的 index.html即可。
当然跟那些制作的精美的电子书还有很大的差别,这是因为它们使用了很多插件。
基于该镜像自己制作镜像
上述过程已经完成了最简单最纯净的电子书。
当然我们要是想再美化一下,如下图:
就需要装一些插件。如
- 点击按钮回到电子书的顶部
- 导航目录折叠
- 侧边栏
- 页面添加页脚
- 左侧上方插入logo
- 等
我将使用 Dockerfile 的方式制作自己的镜像。
并且不同的 tag 对应不同的风格的电子书。
制作第一个纯净版本
FROM fellah/gitbook
WORKDIR /gitbook
docker build -t "gocloudcoder/gitbook:clear" .
将该版本推送到 docker 仓库中
注意,前提是已经在登录才可使用
我们来搜索一下是否上传成功。
首先删除本地的缓存。
成功了,说明我们的纯净版镜像 clear 已经上传到 Docker 远程仓库了。
3分钟构建自己的电子书
前提条件:
- 安装 docker环境
- 创建好对应的文件
docker run --rm -v $PWD:/gitbook gocloudcoder/gitbook:clear gitbook build
编写 shell 脚本
由于命令太长无法记住,所以编写一个脚本,比较方便。
赋予可执行权限 chmod +x gitbook.sh
使用脚本构建电子书: