V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
1379M
V2EX  ›  分享创造

一年时间,用 Golang 写了个一个博客系统

  •  
  •   1379M · 2022-11-06 10:01:34 +08:00 · 6707 次点击
    这是一个创建于 529 天前的主题,其中的信息可能已经有所发展或是发生改变。

    📖 前言

    地址: https://github.com/go-sonic/sonic

    Sonic [ˈsɒnɪk] ,Sonic 是一个用 Golang 开发的博客平台。

    这个项目是从去年夏天开始,断断续续写了一年,其中还因为工作的原因暂停了一段时间,现在终于写完了,尽管自己觉得有些地方仍然不是很完美,但是也完成了我当初的基本构想。

    写这个项目的原因是我自己也是一名博主,喜欢写博客,用过 Wordpress 、typecho 、Hexo 、Hugo 等,但是总有一些不满意的地方

    Halo 感觉非常不错,典型的 C/S 架构,很符合我这个后端程序员的口味。虽然 Java 是一种高性能的语言,但是缺点是占用内存较多,一些配置较低的主机并不符合要求,Go 的协程天然适合 Web 这种并发场景,并且内存占用极低。而且 Halo 自身也有些小缺陷,比如 For 循环查库,遂决定基于 Go 写一个高性能的博客框架

    需要说明的是,Sonic 的灵感来自 Halo ,也借鉴了 Halo 很多优秀的设计,后台管理界面更是直接 Fork 自 Halo 。Sonic 未来的主要目标是快、轻量、优雅的代码,希望能成为 Golang web 的 best practice 之一

    📖 预览

    xX35qJ.png

    🚀 Features:

    • 支持多种类型的数据库:SQLite 、MySQL(TODO: PostgreSQL)
    • 体积小: 安装包仅仅只有 10Mb
    • 高性能: 文章详情页可以达到 1000 QPS(压测环境是: Intel Xeon Platinum 8260 4C 8G ,SQLite3)
    • 支持更换主题(遗憾的是目前仅有一款主题)
    • 支持 Linux 、Windows 、Mac OS 等主流操作系统,支持 x86 、x64 、Arm 、Arm64 、MIPS 等指令集架构
    • 支持对象存储(MINIO 、Google Cloud 、AWS 、AliYun)
    • Sitemap 、Rss 、Atom 支持

    🧰 安装

    下载对应平台的安装包

    根据你的操作系统和指令集下载对应的安装包

    wget https://github.com/go-sonic/sonic/releases/download/v1.0.0/sonic-linux-amd64.zip -O sonic.zip
    

    解压

    unzip sonic.zip
    

    运行

    可以通过 -config 选项来指定配置文件的位置

    cd sonic
    ./sonic -config conf/config.yaml
    

    然后你就可以通过浏览器访问 sonic 了,默认的端口是 8080

    后台管理路径是 http://ip:port/admin

    TODO

    • i18n
    • PostgreSQL
    • 更好的错误处理
    • 插件系统(基于 Wasm)
    • 使用新的 web 框架(Hertz)

    📄 License

    Source code in sonic is available under the MIT License.

    第 1 条附言  ·  2022-11-06 19:53:00 +08:00
    建议使用默认的 SQLite3 即可,支撑几十万的数据量没有任何问题,没有必要单独安装 MySQL
    第 2 条附言  ·  2022-12-04 16:39:55 +08:00
    56 条回复    2022-12-07 14:09:12 +08:00
    hytaoist
        1
    hytaoist  
       2022-11-06 11:19:29 +08:00   ❤️ 1
    👍
    line
        2
    line  
       2022-11-06 11:22:47 +08:00
    theme 没打包进去,报错了。
    Donahue
        3
    Donahue  
       2022-11-06 11:58:04 +08:00   ❤️ 1
    支持,之前不喜欢 halo 就是因为一个慢,另一个内存占用大,不喜欢 java.
    我就在 arm 的软路由上部署,用 go 相信性能、内存、速度都快很多
    welong
        4
    welong  
       2022-11-06 12:47:03 +08:00
    sonic 不是字节开源的高性能 JSON 库吗
    Asimov01
        5
    Asimov01  
       2022-11-06 13:38:42 +08:00   ❤️ 1
    Halo 用户表示支持!已 star ,希望能保持发展
    1379M
        6
    1379M  
    OP
       2022-11-06 14:02:51 +08:00
    @welong 不是,应该只是重名了。。。这个项目我在一年前就开始了。
    1379M
        7
    1379M  
    OP
       2022-11-06 14:05:50 +08:00
    @Donahue 慢主要是各种 for 循环查库,打开文章详情页有几十条 SQL 被执行。当初还考虑过用 rust 写,但是在我尝试写了一个月后发现现在 Rust 的生态一言难尽。另外 Rust 较高的上手成本也对社区生态不好。Golang 足以
    SenLief
        8
    SenLief  
       2022-11-06 15:49:40 +08:00   ❤️ 1
    Star
    1379M
        9
    1379M  
    OP
       2022-11-06 17:05:24 +08:00
    @line 感谢反馈,现在应该可以了。原因是 Github 的 action 自动构建的时候没有 checkout submodule
    whitedroa
        10
    whitedroa  
       2022-11-06 17:13:41 +08:00   ❤️ 1
    👍
    gamexg
        11
    gamexg  
       2022-11-06 17:27:34 +08:00
    无法访问此网站检查 go-sonic.org 中是否有拼写错误。
    如果拼写无误,请尝试运行 Windows 网络诊断。
    DNS_PROBE_FINISHED_NXDOMAIN
    whitedroa
        12
    whitedroa  
       2022-11-06 20:10:32 +08:00
    已 Star
    Acoffice
        13
    Acoffice  
       2022-11-06 20:21:46 +08:00
    @1379M #9 还是没有主题......
    1379M
        14
    1379M  
    OP
       2022-11-06 20:40:20 +08:00
    @Acoffice 有的,你可以直接下载 release 中打包好的文件。如果你是自己编译,要先 init submodule 。另外,启动后,需要先访问 ip:port/admin/#install 来安装。
    Acoffice
        15
    Acoffice  
       2022-11-06 20:59:37 +08:00
    @1379M #14 下载的就是 release 里的,Linux-amd64
    Acoffice
        16
    Acoffice  
       2022-11-06 21:00:41 +08:00
    @1379M #14 解压出来就没有 theme 这个目录.....
    1379M
        17
    1379M  
    OP
       2022-11-06 21:11:34 +08:00
    @Acoffice 我重新下载试了下,有主题相关文件。目录在 /resources/template/theme/
    yrj
        18
    yrj  
       2022-11-07 04:14:04 +08:00
    @welong 哈哈,我看到这个名字第一反应也是字节的那个库
    Acoffice
        19
    Acoffice  
       2022-11-07 09:05:40 +08:00
    @1379M #17 那根据你提供的方式启动,页面找不到 theme 的路由
    1379M
        20
    1379M  
    OP
       2022-11-07 22:55:49 +08:00
    @Acoffice 我自己按照流程试了下,没有任何问题的。可不可以提个 issue 呢,提供下 log 以及环境等信息
    Acoffice
        21
    Acoffice  
       2022-11-07 23:41:54 +08:00
    @1379M #20
    http://127.0.0.1:8080/themes/default-theme-anatole/dist/style.css?version=1.5.0-alpha.2
    http://127.0.0.1:8080/themes/default-theme-anatole/dist/main.iife.js?version=1.5.0-alpha.2

    这两个地址都加载不了
    1379M
        22
    1379M  
    OP
       2022-11-08 10:54:25 +08:00
    @Acoffice 我这里没问题,你是不是装了什么 adblock 插件?
    kennidiyuehan
        23
    kennidiyuehan  
       2022-11-08 11:07:59 +08:00
    [root@VM-8-15-centos blog]# ./sonic -config conf/config.yaml
    ./sonic: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by ./sonic)
    1379M
        24
    1379M  
    OP
       2022-11-08 11:26:18 +08:00
    @kennidiyuehan 因为使用了 SQLite3 ,所以依赖 CGO ,实测 Debian 10 没有问题。建议你安装对应的依赖,或者更换到其他 Debian 系的 Linux ,毕竟 centos 都已经成了 Centos Stream 了 ,centos 上面的软件也都很老。另一种方法是你把 CGO 关了,自己编译一份,使用 MySQL
    chaodada
        25
    chaodada  
       2022-11-08 17:52:20 +08:00
    不错很喜欢 准备再楼主基础上二开可好
    1379M
        26
    1379M  
    OP
       2022-11-08 18:03:25 +08:00
    @chaodada 没问题啊。不过我更建议的是基于本项目提 pr ,类似的项目太多意义不大,也浪费人力
    1379M
        27
    1379M  
    OP
       2022-11-08 18:04:40 +08:00
    @chaodada LICENSE 是 MIT ,你就算拿去商用也没问题
    chaodada
        28
    chaodada  
       2022-11-09 08:57:02 +08:00   ❤️ 1
    @1379M 哈哈、一直都想自己做个博客、wp 、typecho 、很早之前刚学 go 的时候做过一个简单的、但是总觉得不够好、正好学习一下楼主的嘿嘿
    stephenhero
        29
    stephenhero  
       2022-11-09 16:58:24 +08:00
    kingpo
        30
    kingpo  
       2022-11-10 14:33:58 +08:00
    windows 怎么部署,没看明白
    kingpo
        31
    kingpo  
       2022-11-10 14:45:15 +08:00
    @kingpo 下错版本了,当我没说。。。
    kingpo
        32
    kingpo  
       2022-11-10 14:57:49 +08:00
    草稿的文章,点击会提示网络错误
    kingpo
        33
    kingpo  
       2022-11-10 15:08:24 +08:00   ❤️ 1
    支持一波,已 star
    lasko
        34
    lasko  
       2022-11-10 17:23:55 +08:00   ❤️ 1
    支持 已 star
    zhjgo
        35
    zhjgo  
       2022-11-10 23:59:47 +08:00
    支持 已 star ,刚好在学习 go 语言,下来学习学习
    akring
        36
    akring  
       2022-11-14 12:08:46 +08:00
    看着不错,Star 了,顺便一说,Logo 有兴趣换一个吗
    1379M
        37
    1379M  
    OP
       2022-11-14 12:53:12 +08:00
    @akring logo 确实不怎么样,问题主要是我并不会设计。欢饮贡献 Logo!
    gniviliving
        38
    gniviliving  
       2022-11-14 14:44:29 +08:00
    登录后台一直报 Internal Server Error
    账号密码没问题,首页不能正常显示,日志没有输出任何信息
    kingpo
        39
    kingpo  
       2022-11-14 15:52:16 +08:00
    @gniviliving 那个命令行窗口不要关
    gniviliving
        40
    gniviliving  
       2022-11-14 16:07:45 +08:00
    @kingpo 我是 nohup /xxx/sonic --config /xxx/conf/config.yaml &的形式在后台运行的,不关怎么后台运行
    BeijingBaby
        41
    BeijingBaby  
       2022-11-14 17:27:26 +08:00   ❤️ 1
    已在最新一期的 dev.com.cn 开发者简报中推荐
    1379M
        42
    1379M  
    OP
       2022-11-14 18:49:19 +08:00
    @gniviliving 感谢使用。反馈问题可以到 github issue 中,需要附上具体的日志
    1379M
        43
    1379M  
    OP
       2022-11-14 18:50:28 +08:00
    @BeijingBaby Thanks !
    kawei
        44
    kawei  
       2022-11-14 21:23:55 +08:00
    https://github.com/go-sonic/theme-anatole/releases 里都没主题

    原项目的命令都是错的
    zjyl1994
        45
    zjyl1994  
       2022-11-15 00:11:19 +08:00
    @1379M 也可以考虑换一个 SQLite 实现 "github.com/glebarez/sqlite"
    因为我写自己的项目时候也遇到了部署缺 GLIBC 的问题,换了个纯 go 的 sqlite 编译就省了 CGO 的大坑 :)
    1379M
        46
    1379M  
    OP
       2022-11-15 10:47:23 +08:00
    @zjyl1994 这个考虑过。但是不知道会不会遇到其他坑,毕竟这个相当于是新的数据库,有没有 SQL 兼容的问题呢,或者数据库层面的 bug 。另外性能如何
    aegon466
        47
    aegon466  
       2022-11-15 12:26:44 +08:00
    @zjyl1994 我也遇到了这个问题 想问下直接编译就可以了吗
    zjyl1994
        48
    zjyl1994  
       2022-11-15 22:10:23 +08:00   ❤️ 1
    @1379M 他的底层 DB 项目是 gitlab.com/cznic/sqlite 这个,原理是 SQLite C 代码 AST 级翻译到 Go ,我觉得兼容性不会有什么问题。个人来说使用 gorm sqlite driver 创建的数据库用这个打开然后操作都没问题。性能层面,他也有测 https://gitlab.com/cznic/sqlite/-/tree/master/benchmark
    zjyl1994
        49
    zjyl1994  
       2022-11-15 22:11:45 +08:00
    zjyl1994
        50
    zjyl1994  
       2022-11-15 22:14:21 +08:00   ❤️ 1
    @1379M https://gorm.io/docs/connecting_to_the_database.html#SQLite 其实看 gorm 官方也写了这个库,应该不会太差,不过我只在自己项目里用过,你自己看啦。反正我是被 GLIBC 问题坑的要死要活的,现在根本不想碰 CGO
    oldmanong
        51
    oldmanong  
       2022-11-18 11:12:10 +08:00   ❤️ 1
    已 fork 并运行成功,整体感觉很不错。
    几个问题:
    * resource 里一个主题都没有,启动报错。手动下载了默认主题才能用
    * readme 里没有对编译进行说明,我直接 build 的。建议做个 makefile ,如果有一些特别设置的话
    1379M
        52
    1379M  
    OP
       2022-11-18 13:06:31 +08:00
    @oldmanong 感谢,resource 里没有主题是因为主题是通过 git submodule 来获取的,后面我补充下
    KENNHI
        53
    KENNHI  
       2022-12-04 21:13:48 +08:00 via Android
    go 有 gc ,建议用 rust(
    我还在用 WordPress 呢,主要是插件好用主题多😂
    1379M
        54
    1379M  
    OP
       2022-12-05 11:25:46 +08:00
    @KENNHI rust 确实很好,但是上手难度高,不利于社区生态。而且 gc 对于 web app 来说没有影响吧。
    yyt6801
        55
    yyt6801  
       2022-12-06 02:00:52 +08:00 via Android
    @welong 老哥,这个库貌似近期才开源 您之前有过了解是嘛?
    welong
        56
    welong  
       2022-12-07 14:09:12 +08:00
    @yyt6801
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3246 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 619ms · UTC 12:40 · PVG 20:40 · LAX 05:40 · JFK 08:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.