{"id":41285114,"url":"https://github.com/convee/goblog","last_synced_at":"2026-01-23T03:01:45.629Z","repository":{"id":38848397,"uuid":"403338984","full_name":"convee/goblog","owner":"convee","description":"Go Markdown Blog 博客系统","archived":false,"fork":false,"pushed_at":"2023-10-25T13:39:03.000Z","size":4251,"stargazers_count":89,"open_issues_count":19,"forks_count":17,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-18T23:07:36.549Z","etag":null,"topics":["blog","elasticsearch","go","golang","markdown","mysql"],"latest_commit_sha":null,"homepage":"https://convee.cn","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/convee.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-09-05T15:07:22.000Z","updated_at":"2024-04-12T04:13:46.000Z","dependencies_parsed_at":"2023-02-08T12:45:50.525Z","dependency_job_id":"93f71ca3-5a5e-44f0-b83b-e088aebe3160","html_url":"https://github.com/convee/goblog","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/convee/goblog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convee%2Fgoblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convee%2Fgoblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convee%2Fgoblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convee%2Fgoblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/convee","download_url":"https://codeload.github.com/convee/goblog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/convee%2Fgoblog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28679140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T01:00:35.747Z","status":"online","status_checked_at":"2026-01-23T02:00:08.296Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","elasticsearch","go","golang","markdown","mysql"],"created_at":"2026-01-23T03:01:01.549Z","updated_at":"2026-01-23T03:01:45.620Z","avatar_url":"https://github.com/convee.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\t\u003cstrong\u003egoblog 基于 Go 语言实现的 Markdown 博客系统\u003c/strong\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n   \u003ca target=\"_blank\" href=\"#\"\u003e\n      \u003cimg style=\"display: inline-block;\" src=\"https://img.shields.io/badge/Go-1.17.13-blue\"/\u003e\n      \u003cimg style=\"display: inline-block;\" src=\"https://img.shields.io/badge/Bootstrap-3.3.7-blue\"/\u003e\n      \u003cimg style=\"display: inline-block;\" src=\"https://img.shields.io/badge/Mysql-5.7-blue\"/\u003e\n      \u003cimg style=\"display: inline-block;\" src=\"https://img.shields.io/badge/GORM-v1.24.3-blue\"/\u003e\n      \u003cimg style=\"display: inline-block;\" src=\"https://img.shields.io/badge/Redis-6.0-red\"/\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n[在线预览](#在线预览) | [项目介绍](#项目介绍) | [技术介绍](#技术介绍) | [目录结构](#目录结构) | [环境说明](#环境说明) | [快速开始](#快速开始) | [总结\u0026鸣谢](#总结鸣谢)  | [后续计划](#后续计划) | [更新日志](#更新日志)\n\n\n## 在线预览\n\n* 博客前台链接：[convee.cn](https://www.convee.cn)\n\n* 博客后台链接：[convee.cn/admin](https://www.convee.cn/admin)\n\n### 项目介绍\n\n#### 后台\n\n* cookie 鉴权\n* markdown 编辑器\n* 文章管理：文章增删改查\n* 页面管理：自定义 markdown 专题页面\n* 分类管理：分类增删改查\n* 标签管理：标签列表\n\n#### 前台\n\n* 文章列表：倒序展示文章、可置顶\n* 内容页面：markdown 内容展示\n* 标签页面：按标签文章数量排序\n* 关于页面：个人说明\n* 阅读清单：个人阅读书籍\n* 站内搜索：支持文章标题、描述、内容、分类、标签模糊搜索\n\n\n## 技术介绍\n\n* 前端框架：[Bootstrap v3.3.7](http://getbootstrap.com)\n* 语言：[go](https://go.dev/)\n* 网络库：标准库 net/http\n* 配置文件解析库 [Viper](https://github.com/spf13/viper)\n* 日志库：[zap](https://github.com/uber-go/zap)\n* 搜索引擎：[elasticsearch](https://github.com/olivere/elastic/v7)\n* 数据库：[mysql](https://github.com/go-sql-driver/mysql)\n* 缓存：[redis](https://github.com/go-redis/redis)\n* 文件存储：阿里云 oss、cdn\n* markdown 编辑器：[markdown editor](https://github.com/pandao/editor.md)\n* pprof 性能调优\n* 包管理工具 [Go Modules](https://github.com/golang/go/wiki/Modules)\n* 评论插件：[gitalk](https://github.com/gitalk/gitalk)\n* 后台登录鉴权：cookie\n* 使用 make 来管理 Go 工程\n* 使用 shell(startup.sh) 脚本来管理进程\n* 使用 YAML 文件进行多环境配置\n* 优雅退出\n* Http 请求 panic 异常捕获\n* 错误信息钉钉预警\n\n## 目录结构\n\n```shell\n├── Makefile                     # 项目管理文件\n├── conf                         # 配置文件统一存放目录\n├── internal                     # 业务目录\n│   ├── handler                  # http 接口\n│   ├── pkg                      # 内部应用程序代码\n│   └── routers                  # 业务路由\n├── logs                         # 存放日志的目录\n├── static                       # 存放静态文件的目录\n├── tpl                          # 存放模板的目录\n├── main.go                      # 项目入口文件\n├── pkg                          # 公共的 package\n├── tests                        # 单元测试\n└── startup.sh                   # 启动脚本\n```\n\n## 环境说明\n\n| 开发工具                          | 说明                  |\n| ----------------------------- | ------------------- |\n| Vscode   | Golang 后端 + Javascript 前端 |\n| Navicat    | MySQL 远程连接工具        |\n| RDM | Redis 远程连接工具        |\n\n| 开发环境   | 版本   |\n| ------ | ---- |\n| Golang | 1.17.13 |\n| MySQL  | 5.7  |\n| Redis  | 6.x  |\n\n## 开发规范\n\n遵循: [Uber Go 语言编码规范](https://github.com/uber-go/guide/blob/master/style.md)\n\n## 快速开始\n\n### make命令\n\n- make help 查看帮助\n- make dep 下载 Go 依赖包\n- make build 编译项目\n- make tar 打包文件\n\n### 部署流程\n\n* 安装部署\n\n```\n# 下载安装，可以不用是 GOPATH\ngit clone https://github.com/convee/goblog.git\n\n# 进入到下载目录\ncd goblog\n\n# 生成环境配置文件\ncd conf\n\n# 修改 mysql、redis、elasticsearch 配置\n\n# 导入初始化 sql 结构\nmysql -u root -p\n\u003e create database blog;\n\u003e set names utf8mb4;\n\u003e use blog;\n\u003e source blog.sql;\n\n# 下载依赖\nmake dep\n\n# 编译\nmake build\n\n# 后台运行\nnohup ./goblog dev.yml \u0026\n\n```\n\n* supervisord 部署\n\n```\n[program:goblog]\ndirectory = /data/modules/blog\ncommand = /data/modules/blog/goblog -c conf/prod.yml\nautostart = true\nautorestart = true\nstartsecs = 5\nuser = root\nredirect_stderr = true\nstdout_logfile = /data/modules/blog/supervisor.log\n```\n\n* 访问首页\n\nhttp://localhost:9091\n\n* 访问后台\n\nhttp://localhost:9091/admin\n\n用户名：admin@convee.cn\n\n密码：123456\n\n## 总结鸣谢\n该项目后端使用原生 Golang，前端使用 jQuery，代码风格简洁，注释完善，适合 Golang 初学者学习。这个过程中也参考了很多优秀的开源项目，感谢大家的开源让程序员的世界更加丰富。\n\n## 后续计划\n\n* 图片上传\n* 权限管理\n\n## 更新日志","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconvee%2Fgoblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconvee%2Fgoblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconvee%2Fgoblog/lists"}