avatar

目录
gitbook部署到服务器

注:此文章发布于2019年11月22日,最初“我的文档”采用gitbook实现,而后由于需要记更多的笔记(一个gitbook更适合用作一本书),因此于2019年12月更换为vuepress,目前采用dew主题。 欢迎访问

前言

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

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

  • 看云:

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

  • 语雀

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

  • gitbook

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

gitbook本地部署

第一步,安装gitbook的下载工具

cnpm install gitbook-cli -g

第二步,选择一个空文件夹并初始化gitbook

gitbook init

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

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

第三步,创建一个book.json文件,并填入:

json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
{
"title": "水风车的gitbook",
"author": "水风车",
"description": "select * from learn",
"language": "zh-hans",
"gitbook": "3.2.3",
"styles": {
"website": "./styles/website.css"
},
"structure": {
"readme": "README.md"
},
"links": {
"sidebar": {
"我的博客": "https://blog.shuifengche.top"
}
},
"plugins": [
"-sharing",
"splitter",
"expandable-chapters-small",
"anchors",

"github",
"donate",
"sharing-plus",
"anchor-navigation-ex",
"favicon"
],
"pluginsConfig": {
"github": {
"url": "https://github.com/shuifengche"
},
"donate": {
"alipay": "./source/images/donate.png",
"title": "",
"button": "赞赏",
"alipayText": " "
},
"sharing": {
"douban": false,
"facebook": false,
"google": false,
"hatenaBookmark": false,
"instapaper": false,
"line": false,
"linkedin": false,
"messenger": false,
"pocket": false,
"qq": true,
"qzone": false,
"stumbleupon": false,
"twitter": true,
"viber": false,
"vk": false,
"weibo": true,
"whatsapp": false,
"all": [
"google", "facebook", "weibo", "twitter",
"qq", "qzone", "linkedin", "pocket"
]
},
"anchor-navigation-ex": {
"showLevel": false
},
"favicon":{
"shortcut": "./source/images/favicon.jpg",
"bookmark": "./source/images/favicon.jpg",
"appleTouch": "./source/images/apple-touch-icon.jpg",
"appleTouchMore": {
"120x120": "./source/images/apple-touch-icon.jpg",
"180x180": "./source/images/apple-touch-icon.jpg"
}
}
}
}

里面的具体内容自己改一下,我也是在网上找到的别人的这张表。

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

安装完成

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

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

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

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

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

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

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

第二步,设置post-receive钩子

钩子的用处:

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

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

方法:

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

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

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

第三步,在本地创建git

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

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

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

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

在gitbook文件夹里执行:

Code
1
2
3
4
5
6
7
8
9
10
11
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!

终于搞定了……

我遇到的坑

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

1、没有权限。各种报错提示你报错,一定要确保用户有post-receive文件的读写权限,一定要确保目标目录能写入。

2、多个本地git要push同一个服务器git,我现在还不知道怎么实现,所以它的报错我都不管,直接删除服务器git重来一遍。

3、服务器git创建时没有加bare,最终的结果是post-receive无效,指定目录一直没文件。

……

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

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

打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论