常梦网 常梦网

Gitit package: Git+Markdown Wiki 系统,Bootstrap、Ace、Docker Support

时间: 2024-05-17  热度:

文章略长,包括诸多环节。如果只想快速开始一个项目,请参考 Quick Start 小节。
如有改动,将会第一时间在 http://wiki.shajiquan.com/gitit-package 体现。

Gitit package: Git and Markdown based wiki,Bootstrap, ace Editor, syntax highlight and docker deploy support.

基于 Git 和 Markdown 的超棒的 Wiki 系统,Bootstrap、Ace 编辑器等增强,支持 Docker 部署。

Quick Start

普通版 Package Version

git clone https://github.com/shajiquan/gitit-package ~/workspace/gititcd ~/workspace/gititcp sample.gitit.conf my-gitit.conf./run/run.sh start

Docker 版 Docker Version

docker run -d --name gitit -p 7500:7500 shajiquan/gitit

Demo

http://wiki.shajiquan.com/gitit-package (Read Only)

更多用法详见下文。

Gitit

一个基于 Git 版本管理系统的 Wiki,使用 Haskell 语言编写。

主要特性:

配置文件及执行流程

在任意文件夹内运行 gitit 都可以启动 gitit 服务。可以给 gitit 传递如下参数:

在 gitit 启动服务时,它会根据配置文件来绑定 IP、端口,创建必要的文件夹、文件等。

以上这些项,都可以在配置文件中自定义,不过我建议使用官方默认的。以下是一些重要配置项。

重要配置项

其他配置项

其他一些配置项,在我自己使用时,有的做了更改(如文件和页面体积),有的则使用默认的。

页面内配置

gitit 支持在编辑页面时来配置当前页面。

可用选项

完整示例

---title: 这是一个页面的标题toc: yes/nocategories: Miao, Wu, 分类呢format: markdown+lhs...

注意,必须严格按照此格式,否则无效。... 是必须的,: 是英文的。

通过 shell 来编辑 wiki

wikidata 是一个仓库目录,只要该文件夹下的文件被 git add 到仓库并执行了 git commit,gitit 将会把它们当作 wiki 条目加入到系统中。

因此,我们可以通过 shell 下的一系列操作来编辑 wiki。比如:

cd /path/to/your/wikidatatouch new_page.mdecho "hello shajiquan" >> new_page.mdgit add new_pge.mdgit commit -m "add new_page.md file"echo "new line" >> old_page.mdgit add old_page.mdgit commit -m "update old_page.md "git push origin master

缺憾及解决方案

文件结构

.├── gitit-users├── gitit.log├── my-gitit.conf├── static│   ├── css│   │   └── custom.css│   └── img│       └── logo.png├── templates│   └── footer.st└── wikidata    ├── gitit    │   ├── guide.md    ├── index.md    ├── sandbox.md

安装

Ubuntu/debian

使用 apt-get

sudo apt-get install gitit

注意,目前 apt-get 安装的 Gitit 应该还是 0.10.x 版本,而官方目前最新版本是 0.11.x。依我个人经验来看,并无太大差别。但 0.11.x 有个我特别喜欢的新功能:自定义文件名后缀。

在 0.10.x 下,即使你在配置文件里设置后缀为 md,最后 gitit 生成的文件依然是 page。如果使用 .md 的话,无论是用浏览器查看,还是用 OS 的编辑器打开时,可能效果都更好。

但是,如果要安装 0.11.x,请做好时间上的准备,这个安装过程非常耗时、费力(也许是在下愚笨,如有好方法,还望告知我)。

使用 cabal

sudo apt-get install -y git cabal-install libghc-zlib-devcabal update && cabal install gititecho "export PATH=~/.cabal/bin:$PATH" >> ~/.bash_profilesource ~/.bash_profile

Mac OS X

brew update && brew install cabal-installcabal-install install gitit

部署

依配置文件&后台运行

nohup gitit -f my-gitit.conf > logs-gitit.log & echo $! > pid-my-gitit.conf.pid 2>&1 &

自动 Pull/Push

* * * * * /path-to/auto-data.sh > /path-to/logs-auto-data.log  2>&1 &

使用我的版本

我的版本做了如下变动:

配置 git

如果你已经配置,略过此步。

git config --global user.name Your Namegit config --global user.email Your Email

clone 我的 gitit 项目

git clone https://github.com/shajiquan/gitit-package ~/workspace/gititcd ~/workspace/gititgit branch --set-upstream-to=origin/master mastercp sample.gitit.conf my-gitit.conf

更改基本配置

根据你的需要,修改 my-gitit.conf 配置文件,如:

clone 你的数据

cd ~/workspace/gititgit clone your-wikidata.git ./wikidatagit branch --set-upstream-to=origin/master master

自动备份

启用 gitit 服务

cd ~/workspace/gitit./run/run.sh start

此时,就可以访问 wiki 了:http://ip|domain:7500

这将使用 nohup 的方式使用服务在后台运行,当然了,你也可以使用 supervisord 之类来管理。

更改扩展名

背景:

  1. 正如上文所说,gitit 0.11.x 支持配置文件扩展名,0.10.x 不支持。即使我们配置 default-extensionmd,gitit 仍然会将新建的文件的扩展名设为 page

  2. 而目前 apt-get 安装源中的 gitit 都是 0.10.x,如果你要使用 0.11.x,必须使用 cabal 来安装,而使用 cabal 安装时,却可能因为各种原因安装失败。

我们可能会因为某些原因需要将自己的 wiki 条目文件的扩展名进行批量更改,比如从 md 改为 page,或者从 page 改为 md ,或者从 txtmarkdown 改为 md

我写了一个脚本来做这个事情:./run/batch_renamer_by_ext.py,基本用法如下:

./batch_renamer_by_ext.py --d /path/to/wikidata --f txt --t md --add False --push False --commit False

限制用户

Docker 版

要点如下:

关于批量修改文件名后缀、自动备份数据(push 到远程仓库)请参见上文。

如果不挂载已有 gitit 项目,可能带来的问题:

虽然我们可以尝试把宿主环境的相关配置复制到容器中,或者手动进入容器更改,但仍然麻烦,不如挂载宿主环境上的 gitit 项目更省事。

不挂载已有 gitit

docker run -d --name gitit -p 7500:7500 shajiquan/gitit

挂载已有 gitit

假设你的 gitit 项目在 ~/workspace/gitit 下,将此目录挂载到 docker 容器里:

docker run -d --name gitit -p 7500:7500 -v ~/workspace/gitit:/data/gitit shajiquan/gitit

重启 docker 容器中的 gitit 服务

如果 gitit 配置文件、模板、静态文件有修改,必须重启 gitit。假设你的容器名称是 gitit,使用容器内的 supervisord 来重启 gitit 服务:

docker exec -d gitit supervisorctl restart gitit

或者

docker ps -a | grep 'gitit' | awk '{print $1}' |xargs -i docker exec -itd {} supervisorctl restart gitit

进入到容器的 shell 中

假设你的容器名称是 gitit

docker exec -it gitit bash

挂载卷

本镜像支持挂载一个已存在的 gitit 文件夹到容器中。我建议使用已存在的 gitit 项目。

容器中的 Gitit 工作目录是: /data/gitit。容器在启用时将会检测如下文件,如果他们不存在,将会复制一份默认版。

Gitit 服务启用时将自动创建如下目录(如果它们不存在) :

自定义 JS/CSS

templates/page_more_scripts.st 这个文件已被引入到 templates/page.st(模板主文件)中,但这个 more 文件,并没有被加入到 git 版本控制中。

因此,你可以在 page_more_scripts.st 中定制 CSS/JS。在 Gitit 的系统里,这个文件将被当作 HTML 来处理。我的内容如下:

<link rel="stylesheet" href="/js/highlight/styles/monokai_sublime.css"><script src="/js/highlight/highlight.pack.js"></script><script>// more js scripts here// jquery shoud be escaped. or you can just use jQuery(document)\$("#content").ready(function(){    \$("#content a[href^='http://']").attr("target","_blank");    \$('pre').each(function(i, block) {        hljs.highlightBlock(block);    });});</script>

Links

相关阅读