Skip to content

Gitbook 部署到服务器

Published:

前言

最近一直想把自己的笔记放在网上,能够公网访问的那种。

用了几家类似功能的产品:

看云提供服务器,可以绑定到自己的 http 域名上,访问速度也还可以,缺点是看云的编辑器用着难受,还有就是免费版没有「自动发布」功能,想发布就要要去网页版,而且还巨慢,发布十几分钟了网页才更新。

语雀提供的是一个在线文档阅读的方式,可以通过 www.yuque.com/username 这个链接直接查看自己的公开文档,相当于语雀是平台,你是平台的作者,没什么大的缺点,手机端页面显示效果不那么好。

我最后选择了这个,本地版,可以自动生成静态网页(有点像 hexo),然后我把生成的网页代码 push 到服务器里。

Gitbook 本地部署

1、第一步,安装 Gitbook 的下载工具:cnpm install gitbook-cli -g

2、第二步,选择一个空文件夹并初始化 Gitbook:gitbook init

这个过程极其漫长,即使是淘宝源也很慢。

最后居然只生成两个文件……(应该是偷偷全局安装了 Gitbook 吧)

3、第三步,创建一个book.json文件,配置自己的信息

里面有一些插件的说明,Gitbook 的插件安装需要把插件信息填在上面的文件里面,然后执行 gitbook install ./

4、安装完成

每次都执行 gitbook build ,然后生成的 _book 就是对应的网页文件夹。

下面要做的就是把这个特定的文件夹 push 到服务器指定目录里。

如何把一个特定目录 push 到服务器指定目录

这个过程我折腾了好久,中间遇到一大堆坑,我先说最终的正确操作吧!

1、第一步,在服务器里创建 git 仓库

/home/git 里面(任意目录都可以),执行 git init --bare book.git ,注意这个 --bare 不能省,否则:

加上 bare,/home/git/book.git 就是最终的目录,如果不加 bare,就成了/home/git/book.git/.git 是最终目录了。

2、第二步,设置 post-receive 钩子

钩子的用处:

git push 之后,服务器里 book.git 应该只保存 git 记录,没有实际的文件(在现在不会用 git 的我看来是这样……),钩子可以把 push 上去的记录变成实际的文件输出到指定目录里面。

总之就是,没它,你找不着 push 的文件。

方法:

进入 book.git/hooks 文件夹,创建一个新的文件 post-receive ,内容如下:

# DIR后面换成你想要的输出文件目录
DIR=/www/wwwroot/www.shuifengche.top/book
git --work-tree=${DIR} clean -fd
# 直接强制检出
git --work-tree=${DIR} checkout --force

然后把该文件的权限设置为 777(为了减少麻烦,我都开了最高权限,可能会不安全)

3、第三步,在本地创建 git

进入在自己想要保存在服务器上的那个文件夹里,

比如我的 Gitbook 文件夹,里面是 SUMMARY.md_bookbook.jsonREADME.md 等等

这里要注意,虽然 _book 文件夹才是真正的 Gitbook 网站文件夹,但不要只 push 这个文件夹(意思是不要在这里面生成 git),理由是:

gitbook build 的操作,会清空_book 文件夹并重新生成,如果你只上传它,那么每次 build 之后,git 没了,又要重新配置。所以干脆把整个 gitbook 文件夹全部 push 上去。

在 gitbook 文件夹里执行:

git init # 给gitbook文件夹创建一个git环境

git remote add origin ssh://root@xx.xx.xxx.xxx:abcd/home/git/book.git
# 设置远程服务器地址,root 是服务器用户名,abcd 是端口(默认22,可以不写)
# 后面是第一步里面的 git 文件夹
git add . # 注意这个点,意思是 add 文件夹内所有文件

git commit -m 'asdhgfakgf' # 随便写个 commit,最好别省这一步,我也不知道为啥

git push # 这时候提示你添加一个 --set-upstream,按照提示做就行了

Everything up-to-date!

终于搞定了……

4、我遇到的坑

在不断尝试的过程中,这里改一下,那里改一下,网上的 debug 方案各不相同,有些报错还找不到解决方法。

总之,有 bug,查攻略,没攻略,推倒重来。

这个把 gitbook 文件夹部署到服务器上的过程,即把本地任意一个工作目录 push 到服务器的指定目录的过程,以后应该是要经常用的,到那时我可能就会明白这么多坑的具体原因了。