Pages

Tuesday, 21 April 2020

以 Git 作为数据源的静态博客程序gitype

示范博客 

gitype Build Status Go version Go Report Card license

基于 Git 的博客系统,具有以下特性:
  1. 无数据库,通过 Git 管理发布的内容;
  2. 无分类,通过标签来归类;
  3. 不区分页面和普通文章;
  4. 可以实时搜索内容;
  5. 自动生成 RSS、Atom、Sitemap 和 Opensearch 等内容;
  6. 支持 PWA;
  7. 自定义主题。
演示地址: https://caixw.io

使用

  1. 下载代码:go get github.com/caixw/gitype
  2. 运行 scripts/build.sh 编译代码(也可以直接执行 go build 编译,除了版本号,并无其它差别。);
  3. 执行 gitype -init=/to/path 输出初始的数据内容;
  4. 运行 gitype -appdir=/to/path
./scripts 目录下包含了部分平台下的转换成守护进程的脚本 ./testdata 也是一个完整的工作目录,如果不想执行 -init 命令初始化的话,也可以直接复制 ./testdata 的内容。

主要参数

参数名值类型描述
previewbool预览模式,指定此参数,可以监视用户的数据目录,一旦有更改,就会自动重新加载数据,当用户在本地创作文章时,可以指这此值。
appdirstring指定数据目录
具体可通过运行 gitype -h 查看所有的命令

目录结构

appdir 的目录结构是固定的。 其中 conf 为程序的配置相关内容,包含了后台更新界面的密码,不能对外公开; data 为博客的实际内容,包含了文章,标签,友链以及网站名称等相关的配置, 所有针对博客内容的相关设置和内容发布,都直接体现在此目录下。
|--- conf 程序的配置文件
|     |
|     |--- logs.xml 日志的配置文件
|     |
|     |--- web.yaml 程序的配置文件
|     |
|     |--- webhook.yaml webhook 的配置文件
|
|--- data 程序的数据目录
      |
      |--- meta 博客的一些设置项
      |     |
      |     |--- config.yaml 基本设置项,比如网站名称等
      |     |
      |     |--- tags.yaml 标签的定义
      |     |
      |     |--- links.yaml 友情链接
      |
      |--- posts 文章所在的目录
      |
      |--- raws 其它可直接通过地址访问的内容可直接放在此处
      |
      |--- themes 自定义的主题目录
            |
            |--- default 默认的主题

conf 目录下内容

conf 目录下的为程序级别的配置文件,需要重启才能使更改生效。其中:
  • web.yaml 网站的启动数据信息;
  • webhook.yaml 自动更新的触发条件;
  • logs.xml 定义了日志的输出形式和保存路径,具体配置可参考 logs 的相关文档。
web.yaml
参考 https://github.com/issue9/web 中的配置文件内容
webhook.yaml
名称类型描述
urlstringwebhooks 的接收地址
frequencytime.Durationwebhooks 的最小更新频率
methodstringwebhooks 接收地址的接收方法,默认为 POST
repoURLstring远程仓库的地址

data 目录下内容

涉及的时间均为 RFC3339 格式:2006-01-02T15:04:05Z07:00。
meta/config.yaml
config.yaml 指定了网站的一些基本配置情况:
名称类型描述
titlestring网站标题
subtitlestring网站副标题
beianstring备案号
uptimestring上线时间,符合 rfc 3339 标准的时间字符串
pageSizeint每页显示的数量
longDateFormatstring长时间的显示格式,Go 的时间格式化方式
shortDateFormatstring短时间的显示格式,Go 的时间格式化方式
themestring默认主题
typestring所有 HTML 页面的 mimetype,默认使用 text/html
iconIcon网站的图标
menus[]Link菜单内容,格式与 links.yaml 的相同
authorAuthor文章的默认作者信息
licenseLink文章的默认版权信息
archiveArchive存档页的相关配置
outdatedtime.Duration超过此时间值,文章被标记为过时内容,显示一些提示信息
rssRSSrss 配置,若不需要,则不指定该值即可
atomRSSatom 配置,若不需要,则不指定该值即可
sitemapSitemapsitemap 相关配置,若不需要,则不指定该值即可
opensearchOpensearchopensearch 相关配置,若不需要,则不指定该值即可
pwaPWAPWA 的相关配置,不指定,则不支持该功能
pagesmap[string]Page各个类型页面的一些自定义项
Author
名称类型描述
namestring名称
urlstring网站地址
emailstring邮箱
avatarstring头像
Archive
名称类型描述
orderstring存档的排序方式,可以是:desc(默认) 和 month
typestring存档的分类方式,可以是按年:year(默认) 或是按月:month
formatstring标题的格式
RSS
名称类型描述
titlestring标题
sizeint显示数量
urlstring地址
typestring当前文件的 mimetype
Sitemap
名称类型描述
urlstringSitemap 的地址
xslURLstring为 sitemap.xml 配置的 xsl,可以为空
enableTagbool是否把标签放到 Sitemap 中
priorityfloat标签页的权重
changefreqstring标签页的修改频率
postPriorityfloat文章页的权重
postChangefreqstring文章页的修改频率
typestring当前文件的 mimetype,默认为 application/atom+xml 或是 applicatin/rss+xml
Opensearch
名称类型描述
urlstringopensearch 的地址
titlestring出现于 html>head>link.title 属性中
shortNamestringshortName 值
descriptionstringdescription 值
longNamestringlongName 值
imageIconimage 值
typestring当前文件的 mimetype 若不指定,则使用 application/opensearchdescription+xml
PWA
有关 pwa 的说明,可以参考以下内容:
名称类型描述
serviceWorkersstring指定 service worker 文件的地址,相对于根
manifestManifestmanifest.json 的相关配置
Manifest
名称类型描述
urlstringmanifest 的地址
typestring当前文件的 mimetype 若不指定,则使用 application/manifest+json
langstringname 值所使用的语言
namestringname 值
shortNamestringshort_name 值
startURLstringstart_url 值
displaystringdisplay 值
descriptionstringdescription 值
dirstringdir 值,表示文字方向
orientationstringorientation 值
scopestringscope 值
themeColorstringtheme_color 值
backgroundColorstringbackground_color 值
longNamestringlongName 值
icons[]Iconicons 值
Icon
名称类型描述
typestring图标的 mimetype
sizesstring图标的大小
urlstring图标地址
Link
名称类型描述
textstring字面文字,可以不唯一
urlstring对应的链接地址
titlestringa 标签的 title 属性。可以为空
iconstring一个 URL 或是 fontawesome 图标名称
relstringa 标签的 rel 属性
typestring指向内容的类型
Page
名称类型描述
titlestring页面的 html>head>title
keywordsstring页面的 html>head>meta.keywords
descriptionstring页面的 html>head>meta.description
部分页面可使用 %content% 占位符,分别是表示网站名称和可自由取代的内容,比如 tag 页面,%content 会用标签名代替
tag 和 post 页面的 keywords 和 description 是不可更改的
meta/links.yaml
links.yaml 用于指定友情链接,为一个数组。每个元素均为一个 Link。 每个元素可以使用 XFN
meta/tags.yaml
tags.yaml 用于指定所有的标签内容。为一个数组,每个元素包含以下字段:
名称类型描述
slugstring唯一名称,文章引用此值,地址中也使用此值
titlestring字面文字,可以不唯一
colorstring颜色值,在展示所有标签的页面,会以此颜色显示
contentstring用于描述该标签的详细内容,可以是 HTML
seriesbool是否为一个专题
posts
data/posts 为文章目录,目录层次可以按自己的习惯进行分类,系统根据是否包含 meta.yaml 和 content.html 来区分当前目录是否为一篇文章内容。比如:
--- posts
      +--- about
      |      |
      |      +--- meta.yaml
      |      |
      |      +--- content.html
      |
      +--- 2016
      |
      +--- 2017
            |
            +--- post1
            |      |
            |      +--- meta.yaml
            |      |
            |      +--- content.html
            |
            +--- post2
                   |
                   +--- meta.yaml
                   |
                   +--- content.html
其中 /posts/about/posts/2017/post2 和 /posts/2017/post2 均被判断为文章。
meta.yaml
meta.yaml 包含了当前文章的一些细节信息。
名称类型描述
titlestring标题
createdstring创建时间,符合 rfc 3339 标准的时间字符串
modifiedstring修改时间,符合 rfc 3339 标准的时间字符串
tagsstring关联的标签,以逗号分隔多个字符串,标签名为 meta/tags.yaml 中的 slug
summarystring摘要,同时也作为 html>head>meta.description 的内容
contentstring内容
outdatedstring已过时文章的提示信息
statestring状态,可以是 top、last、draft 和 default,默认为 default
imagestring封面图片
authorAuthor作者,默认为 meta/config.yaml 中的 author 内容
licenseLink版本信息,默认为 meta/config.yaml 中的 license 内容
templatestring使用的模板,默认为 post
keywordsstringhtml>head>meta.keywords 标签的内容,如果为空,使用 tags
languagestring语言标签
assetsarray需要 PWA 缓存的信息,如果系统未启用,这些内容不启作用。
themes
data/themes 下为主题文件,可定义多个主题,通过 config 中的 theme 指定当前使用的主题。 主题模板语法为 html/template
单一主题下,可以为文章详细页定义多个模板,通过每篇文章的 meta.yaml 可以自定义当前文章使用的模板, 默认情况下,使用 post 模板。
theme.yaml
定义了主题相关的一些属性。
名称类型描述
namestring名称
versionstring版本号
descriptionstring主题的详细描述信息
authorAuthor作者信息
assets[]string需要 PWA 缓存的信息,如果系统未启用,这些内容不启作用。
如果指定了 assets 的内容,则每次更新主题内容时,必须改变版本号,PWA 根据版本号确定是否需要更新缓存的内容
错误模板
400 及以上的错误信息,均可以自定义,方式为在当前主题目录下,新建一个与错误代码相对应的 HTML 文件, 比如 400 错误,会读取 400.html 文件,以此类推。但是只能是纯 HTML 文本,不能包含模板代码。
raws
当访问的页面不存在时,会尝试从 raws 下访问相关内容。比如 /abc.html,会尝试在查找 raws/abc.html 文件是否存在;甚至 /post/2016/about.htm 这样标准的文章路由,如果文章不存在,会也访问 raws 目录,查看其下是否在正好相同的文件。