wenlog

module
v0.0.11 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 31, 2026 License: MIT

README

WenLog(文录)

WenLog(文录)是一个轻量级 Go 个人发布系统(Go Web + SQLite),用于承载博客、页面、评论、主题与插件,并支持从 WordPress 迁移历史内容。

本项目最初用于将原 WordPress 博客 youthlin.com 迁移为 Go 单体应用,目标是在保留个人博客核心功能的同时,保持原有永久链接不变

  • 项目名称:WenLog
  • 中文名:文录
  • 项目目录 / 命令 / Go module:wenlog
  • Go module:github.com/youthlin/wenlog

技术栈

永久链接规则(保持不变)

类型 规则 示例
文章 /{发布年份}{post_id}.html /20128.html
页面 /{slug} /about
分类 /category/{slug} /category/go
标签 /tag/{slug} /tag/ajax
旧链接 /?p={id} → 301 /20128.html

目录结构

cmd/server      HTTP 服务入口
internal/
  config        环境变量配置
  model         gorm 模型
  store         DB 连接、迁移、查询
  importer      后台 WXR 导入/导出服务
  wxr           WordPress XML 解析 + 内容清洗
  permalink     永久链接生成/解析(前台与重定向共用)
  handler       前台 + 后台 handler
  middleware    日志/prometheus/recover/认证
  render        模板加载与函数
web/
  templates     *.gohtml(嵌入二进制)
  assets        css/js(嵌入二进制)
public/wp-content/uploads   历史图片(原路径静态服务)
data/wenlog.db    SQLite(运行时生成)

快速开始

1. 启动服务
go run ./cmd/server
# 默认监听 :8888

管理员可在后台 设置-用户 修改用户名。

2. 可选:手动重置管理员密码
go run ./cmd/server -reset-password "${adminUserName}:<NewPassword>"
3. 在后台导入 / 导出 WordPress 数据

登录后台后打开 http://localhost:8888/admin/import

  • 导入:上传 WXR XML 文件,选择将导入内容归属给哪个后台用户
  • 导入时会提示:若已存在相同 ID 的文章/页面/评论,将按 upsert 覆盖保存
  • 导出:可勾选导出 文章 / 页面 / 评论 / 设置,默认全选,导出 XML 可直接在本页重新导入

导入完成后页面会展示文章 / 页面 / 评论 / 分类 / 标签 / 设置统计。

配置(环境变量)

变量 默认值 说明
WENLOG_ADDR :8888 监听地址
WENLOG_DB data/wenlog.db SQLite 路径
WENLOG_PUBLIC_DIR public 静态图片目录(含 wp-content)
WENLOG_LOG_JSON false 是否 JSON 日志

说明:

  • 站点标题、规范站点 URL、session secret、列表分页数量、Feed 输出数量均在后台设置页维护
  • RSS/导出等普通绝对链接在未配置规范站点 URL 时会基于当前请求 Host 生成;注册验证、邮箱变更、密码重置等安全邮件必须先配置规范站点 URL

功能

  • 首页 / 文章详情 / 分类 / 标签 / 归档 / 独立页面
  • <!--more--> 支持:列表页只显示开头 + 「阅读全文」,详情页完整内容
  • 评论:开放访客提交 + 审核制(待审队列)+ 楼中楼 + 基础防 spam(蜜罐 / 限频 / 校验)+ Ajax 提交
  • 后台:登录、文章/页面 Markdown 增删改、评论审核、导入导出、附件与基础设置管理
  • RSS:/feed
  • 监控:Prometheus /metrics(QPS / 延迟 / 状态码)+ slog 访问日志
  • 优雅退出

部署

单一二进制 + data/ 目录 + public/ 目录即可运行:

go build -o wenlog ./cmd/server
./wenlog

模板与 css/js 已通过 embed 打包进二进制,无需随附。

测试

go test ./...

Directories

Path Synopsis
cmd
server command
Command server 启动博客 HTTP 服务。
Command server 启动博客 HTTP 服务。
Package hook 提供宿主暴露给主题和插件脚本的统一扩展 API。
Package hook 提供宿主暴露给主题和插件脚本的统一扩展 API。
internal
config
Package config 负责从环境变量加载运行时配置,并提供合理默认值。
Package config 负责从环境变量加载运行时配置,并提供合理默认值。
email
Package email 提供邮件发送能力。
Package email 提供邮件发送能力。
handler
Package handler 提供 gin 的前台与后台 HTTP 处理器。
Package handler 提供 gin 的前台与后台 HTTP 处理器。
i18n
Package i18n 负责初始化翻译文件、为每个请求选择语言,并向模板注入翻译能力。
Package i18n 负责初始化翻译文件、为每个请求选择语言,并向模板注入翻译能力。
imageutil
Package imageutil 提供图片缩略图生成能力。
Package imageutil 提供图片缩略图生成能力。
importer
Package importer 提供后台可复用的 WordPress WXR 导入能力。
Package importer 提供后台可复用的 WordPress WXR 导入能力。
middleware
Package middleware — 后台认证。
Package middleware — 后台认证。
model
Package model 定义博客的 gorm 数据模型。
Package model 定义博客的 gorm 数据模型。
permalink
Package permalink 集中管理永久链接的生成、解析与运行时配置。
Package permalink 集中管理永久链接的生成、解析与运行时配置。
render
Package render 负责加载 HTML 模板、注册模板函数,并提供渲染辅助。
Package render 负责加载 HTML 模板、注册模板函数,并提供渲染辅助。
store
Package store — 分类相关方法。
Package store — 分类相关方法。
theme
Package theme 提供主题管理功能:解析 theme.yaml、管理主题生命周期。
Package theme 提供主题管理功能:解析 theme.yaml、管理主题生命周期。
version
Package version 保存构建时注入的版本信息。
Package version 保存构建时注入的版本信息。
wxr
Package wxr — 内容清洗:把 WordPress 正文转为干净 HTML。
Package wxr — 内容清洗:把 WordPress 正文转为干净 HTML。
web
Package web 通过 embed 嵌入模板与静态资源,使最终二进制自包含。
Package web 通过 embed 嵌入模板与静态资源,使最终二进制自包含。
plugins
Package plugins 嵌入内置插件,使单一二进制可以在首次启动时释放插件目录。
Package plugins 嵌入内置插件,使单一二进制可以在首次启动时释放插件目录。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL