rKlotz

另一款基于文件的简单单用户 golang 驱动型博客引擎。「Yet another simple single-user file-based golang-driven blog engine」

Github星跟蹤圖

rKlotz

Build Status
Coverage Status

Yet another simple single-user file-based golang-driven blog engine

Run locally

You need to have Docker installed and running.

docker run --rm -it -p 8080:8080 vgarvardt/rklotz

Then open http://127.0.0.1:8080 in your browser.

Build and run locally

You need to have Go 1.12+ and Docker installed and running.

git clone git@github.com:vgarvardt/rklotz.git
cd rklotz
make deps
make build
docker run -it -p 8080:8080 vgarvardt/rklotz:`cat ./VERSION` server

Then open http://127.0.0.1:8080 in your browser.

Build your own blog based on rKlotz

See github.com/vgarvardt/itskrig.com for example
on how to build your blog using rKlotz as base image.

Posts

Posts in rKlotz are just files written in some markup language.
Currently only Markdown (md extension) is supported.

Post file has the following structure:

  • Line 1: Post title
  • Line 2: Post publishing date - posts are ordered by publishing date in reverse chronological order.
    Date must be in RFC822Z format
  • Line 3: Post tags - comma-separated tags list
  • Line 4: Reserved for further usage
  • Line 5: Post delimiter - +++ for Markdown, not necessary that line number, may be preceded by any number
    of lines before delimiter
  • Line 6: Post body - may be preceded by any number of lines before post body, after delimiter

Post teaser will be extracted from the post body automatically to be displayed on the posts list pages.
If you want to set post teaser explicitly - use +++teaser delimiter.

Post path is determined automatically from its path, relative to posts root path (see settings).

Posts examples are available in asserts/posts.

Settings

Currently, the following settings (environment variables) are available:

Base application settings

  • POSTS_DSN (default file:///etc/rklotz/posts) - posts root path in the format storage://<path>.
    Currently, the following storage types are supported:
    • file - local file system
  • POSTS_PERPAGE (default 10) - number of posts per page
  • STORAGE_DSN (default boltdb:///tmp/rklotz.db) - posts storage in runtime in the format storage://path.
    Currently, the following storage types are supported:
    • boltdb - storage on top of BoltDB and Storm
    • memory - store all posts in memory, perfect for hundreds or even thousands of posts

Logger settings

  • LOG_LEVEL (default info) - logging level
  • LOG_TYPE (default rklotz) - logging type (type field in the log message)

Web application settings

  • WEB_PORT (default 8080) - port to run the http server
  • WEB_STATIC_PATH (default /etc/rklotz/static) - static files root path
  • WEB_TEMPLATES_PATH (default /etc/rklotz/templates) - templates root path

SSL settings

rKlotz supports SSL with Let's Encrypt.

  • SSL_ENABLED (default false) - enables SSL/TLS
  • SSL_PORT (default 8443) - SSL port
  • SSL_HOST - host to validate for SSL
  • SSL_EMAIL (default vgarvardt@gmail.com) - email to register for SSL
  • SSL_CACHE_DIR (default /tmp) - directory to cache retrieved certificate

HTML and UI settings

  • UI_THEME (default foundation6) - theme name. Themes list available in templates
    (except for plugins, that are plugins templates, see below)
  • UI_AUTHOR (default Vladimir Garvardt) - blog author name (HTML head meta)
  • UI_EMAIL (default vgarvardt@gmail.com) - blog author email
  • UI_DESCRIPTION (default rKlotz - simple golang-driven blog engine) - blog description (HTML head meta)
  • UI_LANGUAGE (default en) - blog language (HTML lang)
  • UI_TITLE (default rKlotz) - blog title (HTML title)
  • UI_HEADING (default rKlotz) - blog heading (index page header)
  • UI_INTRO (default simple golang-driven blog engine) - blog intro (index page header)
  • UI_DATEFORMAT (default 2 Jan 2006) - post publishing date display format.
    Must be compatible with time.Format(). See examples in
    predefined time formats.
  • UI_ABOUT_PATH (default /etc/rklotz/about.tpl) - path to custom "about panel".
    If not found - <WEB_TEMPLATES_PATH>/<UI_THEME>/partial/about.tpl is used.

About panel

Template must have the following structure:

{{ define "partial/about.tpl" }}
    Content goes here. html/template is used for rendering.
{{ end }}

See about panel example in default theme.

Root URL settings

  • ROOT_URL_SCHEME (default http) - blog absolute URL scheme. Currently https si not supported on rKlotz web
    application level (in plans), so use https only if you have SSL/TLS certificate termination on the level before
    rKlotz (e.g. nginx as reverse proxy before your blog).
  • ROOT_URL_HOST (default ``) - blog absolute URL host. If empty - request host is used.
  • ROOT_URL_PATH (default /) - blog absolute URL path prefix. In case your blog is hosted on the second (or deeper)
    path level, e.g. http://example.com/blog (ROOT_URL_PATH=/blog)

Plugins settings

Plugins

rKlots supports plugins. Currently, the following are implemented:

Plugins configuration available with the following settings:

  • PLUGINS_ENABLED - comma-separated plugins list, e.g. disqus,ga,highlightjs
    to enable Disqus, Google Analytics and highlight.js plugins
  • PLUGINS_DISQUS - Disqus plugin configuration in the format <config1>:<value1>,<config2>:<value2>,...
    The following configurations are available:
    • shortname (required) - account short name
  • PLUGINS_GA - Google Analytics plugin configuration in the format <config1>:<value1>,<config2>:<value2>,...
    The following configurations are available:
    • tracking_id (required) - analytics tracking ID
  • PLUGINS_GTM - Google Tag Manager plugin configuration in the format <config1>:<value1>,<config2>:<value2>,...
    The following configurations are available:
    • id (required) - tag manager ID
  • PLUGINS_HIGHLIGHTJS - highlight.js plugin configuration in the format <config1>:<value1>,<config2>:<value2>,...
    The following configurations are available:
    • version (default 9.7.0) - library version
    • theme (default idea) - colour scheme/theme
  • PLUGINS_YAMKA - Yandex Metrika plugin configuration in the format <config1>:<value1>,<config2>:<value2>,...
    The following configurations are available:
    • id (required) - metrika ID
  • PLUGINS_YASHA - Yandex Share plugin configuration in the format <config1>:<value1>,<config2>:<value2>,...
    The following configurations are available (see fill list of values on plugin page):
    • services (default: facebook twitter gplus) - space-separated services list
    • size (default: m) - icons size: m - medium, s - small
    • lang (default en) - widget language, see docs page
      for complete list of available languages

TODO

  • Dockerize deployment
  • Get config values from os env
  • Implement at least one more theme
  • Write some tests
  • Cover reindex logic with tests
  • Migrate to another Web Framework (maybe echo)
  • Get version from VERSION file (gb does not seem to inject ldflag into packages other than main)
  • SemVer versioning
  • SSL/TLS with Let's Encrypt
  • Implement badger storage
  • Implement memory storage
  • Implement git loader

主要指標

概覽
名稱與所有者vgarvardt/rklotz
主編程語言Go
編程語言Go (語言數: 5)
平台
許可證BSD 3-Clause "New" or "Revised" License
所有者活动
創建於2014-07-18 22:34:56
推送於2025-06-09 10:36:39
最后一次提交2025-06-09 12:36:37
發布數32
最新版本名稱0.15.0 (發布於 )
第一版名稱0.4.2 (發布於 )
用户参与
星數41
關注者數3
派生數6
提交數583
已啟用問題?
問題數14
打開的問題數0
拉請求數189
打開的拉請求數1
關閉的拉請求數7
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?