{"repo":"convee/goblog","free":true,"listed":false,"github":"https://github.com/convee/goblog","clone":"git clone https://github.com/convee/goblog.git","description":"Go Markdown Blog 博客系统","language":"JavaScript","stars":93,"topics":["go","golang","markdown","blog","mysql","elasticsearch"],"license":"MIT","category":"databases-storage","readme_excerpt":"goblog 一个使用 Go、MySQL 和服务端模板实现的轻量 Markdown 博客，包含文章、页面、分类、标签、搜索和管理后台。 安全提示：公开发行的 v1.2.1 及更早版本存在后台会话认证缺陷，不应继续暴露在公网。请升级到修复版本，并撤销旧 Gitalk OAuth secret、删除或重置默认管理员。 能力与边界 - 前台：文章列表与详情、分类/标签筛选、内容搜索、自定义 Markdown 页面 - 后台：文章、页面和分类管理，Markdown 编辑器 - 安全：bcrypt 密码、签名且可过期的会话、CSRF、防滥用登录限流、安全响应头和安全 Markdown - 运行：MySQL 连接池、健康/就绪探针、HTTP 超时、优雅退出 - 质量：单元测试、race、vet、govulncheck、GitHub Actions 和发行归档 goblog 的默认运行时只依赖 MySQL。当前搜索适合个人博客和中小数据量，使用 MySQL 模糊匹配，不承诺大型全文检索场景。 环境要求 - Go 1.25 或更高版本；仓库固定使用 Go 1.26.5 工具链 - MySQL 8.4 LTS - Docker 与 Docker Compose：可选，用于最快启动 Docker 快速开始 1. 设置本地开发密码和会话密钥： 2. 构建并启动： 3. 创建管理员： 命令会在终端中提示输入管理员密码。 4. 访问 ，后台登录地址为 。 删除 Compose 数据卷会永久删除本地博客数据。升级或清理前请先备份 MySQL。 从源码启动 1. 创建数据库并导入初始化结构： 2. 创建本地配置并编辑 MySQL DSN、站点名称和导航： 3. 创建管理员并启动： 管理员命令会在终端安全读取至少 12 个字符的密码。非交互环境可以用 GOBLOG ADMIN PASSWORD 提供，但不要把密码写入仓库或 Shell 历史。 进程存活探针为 /healthz ，包含 MySQL 检查的就绪探针为 /readyz 。 配置 配置示例位于 conf/config.example.yml ，开发示例位于 conf/dev.yml 。生产配置应保存为被 Git 忽略的 conf/config.yml ，并由 Secret 管理系统注入敏感值。 常用环境变量： 变量 用途 --- --- GOBLOG CONFIG 配置文件路径 GOBLOG SESSION SECRET 生产必需的稳定会话密钥，至少 32 字节 GOBLOG MYSQL DSN 覆盖 MySQL DSN GOBLOG APP NAME 站点名称 GOBLOG APP CDN 静态资源前缀，默认 /static GOBLOG APP TRUSTED PROXIES 逗号分隔的可信代理 CIDR；只有这些代理的 X-Forwarded-Proto 会被接受 GOBLOG DINGTALK TOKEN 可选的钉钉告警 token 非 debug 模式未设置 GOBLOG SESSION SECRET 时进程会拒绝启动。轮换密钥会注销全部现有会话。 开发与验证 数据库升级 全新安装直接导入 blog.sql 。从 v1.2.x 升级时，先备份数据库并检查重复的分类名、页面标识、标签名和管理员邮箱，再执行： 该迁移只能执行一次。旧部署如果启用了 Redis 或 Elasticsearch，可以在确认没有其他应用使用后移除；新版本不再连接这些组件。 生产运行 发行归档包含二进制、管理员命令、模板、静态资源、数据库","default_branch":null,"files":null,"tree":[],"storefront":"/r/convee","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/convee/goblog/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}