映射 AsciiDoc 文件目录为网站,有简单的访问控制,有好用的搜索功能。
搜索功能支持单词完全匹配、句子完全匹配、通配符、排除指定词、分类、标签,以及多条件之间与和或的逻辑。
详见 help.adoc
git clone git@github.com:wei345/autumn.git
cd autumn
bin/start.sh
# 停止
# bin/autumn.sh stop
用浏览器访问 http://localhost:8601
用户名:user,密码: 123456
所有配置项和默认值见 application.properties, 你可以直接修改这个文件,也可以新建 application-local.properties 或 application-prod.properties。
# /path/to/data
autumn.data.dir=<your data directory>
autumn.data.reload-interval-seconds=0
autumn.static-resource.reload-interval-seconds=0
# id username password salt; id ...
autumn.access.users=<your users>
autumn.remember-me.aes-key=<your aes key>
# 启用 Redis
spring.autoconfigure.exclude=
最重要的几项配置是:autumn.data.dir
,autumn.access.users
和 autumn.remember-me.aes-key
。
一个包含 .adoc 文件的目录路径。
.adoc
文件会被转为 HTML,映射为网页。例如 ${autumn.data.dir}/a/b/c.adoc
会被映射为 http://localhost:8601/a/b/c
。
其他文件会被视为静态文件。例如 ${autumn.data.dir}/a/b/c.png
会被映射为 http://localhost:8601/a/b/c.png
。
= Title
:created: 2018-02-20 12:59:50 +0800
:modified: 2018-12-03 20:18:42 +0800
:category: at_most_one_category
:tags: tag1, tag2, tag3
:access: owner/user/anon
正文内容
access
用于访问控制,owner/user/anon 分别表示 网站所有者/用户/匿名。
如果不符合以上格式,系统会自动设置默认值。created
和 modified
默认值是文件修改时间,access
默认值是 owner
。
生成密码:
mvn -q -DskipTests=false -Dtest=UserServiceTest#generateUser test
输出示例:
1 Username 1B62BCEB123EB08F73BE3970394C23973FADF75CDCEE153A27FD2EC808805ED29BCC77CDCB966E4C775347D55E82753510D9E8154387BB7286D8CBAF9E68324A 75F0FF8B5CF34B050491DBB9F0BBF85F;
Username
可随意修改。
-
启动时,扫描数据目录所有文件,并读取 .adoc 文件。
-
启动时,扫描 classpath:/static,并读取 css, js, help.adoc。
-
用户访问页面时,把 .adoc 内容转为 html 并缓存,把 js 合并成一个 all.js 并缓存,把 css 合并成一个 all.css 并缓存,通过模版生成页面 html 返回给浏览器。
缓存项 | 何时加载 | 何时清除 |
---|---|---|
数据目录下所有文件路径 |
应用启动 |
重新加载数据目录时刷新 |
所有文章内容 |
应用启动 |
重新加载数据目录时刷新 |
classpath:/static 里的所有文件内容 |
应用启动 |
重新加载 static 目录时刷新 |
文章列表 |
被访问 |
重新加载数据目录 |
文章 tree JSON |
被访问 |
重新加载数据目录 |
文章 tree HTML |
被访问 |
重新加载数据目录 |
all.js |
被访问 |
重新加载 static 目录 |
all.css |
被访问 |
重新加载 static 目录 |
help 内容 HTML |
被访问 |
重新加载 static 目录 |
数据目录下不大于 1M 的文件 |
被访问 |
重新加载数据目录,或达到缓存上限 |
View 渲染结果,包括首页、站点地图页、文章页、搜索结果页、帮助页、登录页 |
被访问 |
重新加载数据目录,或达到缓存上限 |
文章内容 HTML |
被访问 |
达到缓存上限 |
文章面包屑 |
被访问 |
达到缓存上限 |
搜索 hit |
被访问 |
达到缓存上限 |
限流计数 |
被访问 |
到期失效,或达到缓存上限 |
rememberMe Cookie 解析结果 |
被访问 |
到期失效,或达到缓存上限 |
文章内容 HTML、文章面包屑和搜索 hit,这几个缓存项的 key 使用了文章的 snapshotId。 snapshotId 是根据文章内容生成的,如果文章内容变化,snapshotId 也会变化, 如果文章内容不变,snapshotId 也不变。所以重新加载数据目录时,不需要清除这些缓存。
因为都不顺手。
-
Jekyll 不适合我。我只想公开一部分内容,自己能够看到全部内容,还想要不依赖第三方的好用的搜索功能。
-
WordPress 不适合我。我不喜欢在网页的小窗口内编辑文本,不,大窗口也不喜欢,我更喜欢用强大的文本编辑器编辑文本。
-
DokuWiki 不适合我。同上。
-
其他,试过一些,也不适合我。
我曾经改造过 DokuWiki,用 git 同步数据,自动刷新索引,把文件扩展名从 .txt 改为 .md, 增加 front matter 支持,Sidebar 可折叠等。DokuWiki 有很多我不需要的功能和逻辑, 对于改造来说都是负担,改造成本很高,考虑到将来要支持 category 和 tags,还有很高的改造成本。
不如自己开发,比改造一个现有的东西更可控更省时间,每一处都按照自己的喜好来做,访问速度更快,用起来更顺手。