Frodo

本博客的项目地址在

使用的技术栈为:

  • 博客页面 Web 框架:python/fastapi
  • 前台 ORM: sqlalchemy + 异步 databases (FastAPI 推荐做法)
  • 前台模板: Mako/FastAPI-Mako
  • python web 服务: asgi/uvicorn
  • 后台 Web 框架: golang/gin
  • 后台 ORM: gorm
  • 后台 UI: vue-element-admin
  • KV 数据库: redis
  • 缓存: redis/memcached
  • 反向代理: nginx
  • 持久化: mysql
  • 数据库迁移: alembic
  • 认证 JWT
  • python 类型检查: pydantic

Features

  • 配套后台实现对文章、用户等的增删改查。
  • 后台支持 markdown 预览与编辑
  • 前端语法高亮、LaTeX 数学公式渲染、目录生成
  • 支持文章搜索(模糊)
  • 支持 Github 登录进行评论和反馈
  • 支持 Hexo 或其他源 mardown 文章批量导入
  • 支持个人设置(头像与介绍)
  • 定制化导航栏,可以自行定义 page
  • 支持文章中渲染 github-cards
  • 支持个人「动态」类似知乎想法
  • 支持 docker 虚拟化部署

Motivation

为什么现在还要手写博客项目呢,似乎写一个雷课堂更有趣。

还要说回 2016 年 10 月,当时初涉软件开发领域,开始尝试操作云虚拟机,以当时十分流行的 LAMP (Linux-Apache-Mysql-PHP) 的套路搭建了第一个博客项目。当时那个简陋无比的功能和页面仍记忆尤新。后来三年时间都在从事后端工作,差不多能做出的东西都是命令行工具了...

我很羡慕那些能动手实现自己小想法的人,我想开始向全栈迈一小步。此外这次是一次技术特点的新尝试。程序级的异步是很多语言的新特性,从javascriptpromise对象到Golanggoroutine,越来也多的语言开始考虑这种写法。python也在不断努力,asyncio生态圈也在不断壮大。尽管在工作中还是更多地选择多线程,但这些关键字很酷不是吗?

此外的原因要归功于去年 python 届的网红 - fastapi 那迷人的文档。他的文档使我迫不及待地想检测这个框架的实用性。

相较于传统的Flask, Django框架,本项目在风格上一律采用异步写法,也就是你能看到大量的async,await, async with, async for等关键字。同时你将不会看到多线程 / 多进程的调用。

经过半个月的实践来看,异步对我而言语法或语言都是次要的,核心是异步的编程思维。

在 ASGI 协议还未正式被接纳时,python 异步框架目前正处在探索期,生态圈很多都需要完善。关于项目的一些细节我会陆续写好文档。

Milestone

  • [x] 用户模块及认证模块完成 2020-05-17
  • [x] 后台 API 调通 2020-05-20
  • [x] 前后台联通 2020-05-24
  • [x] 评论模块(Github 认证) 2020-05-27
  • [x] Hexo 文章批量迁移 2020-05-28
  • [x] 反馈模块 2020-05-29
  • [x] 加入缓存(统一用 redis) 2020-05-31 Changed a lot
  • [x] 阅读量 (require: cached) 2020-05-31
  • [x] 动态模块 (Activity) 最后的功能模块 2020-06-02
  • [x] golang 重构后台 API
  • [ ] 虚拟化与部署文档
  • [] 更换前端 (require: Modify Hexo Theme to Mako)

名称由来:完成此项目时我们正从covid-19的影响中慢慢走出,人类的历史就是勇气的历史,我将项目命名为Frodo,来自指环王系列主角,因为春天总会到来,我们会付出勇气,我们终将付出勇气。

太阳回来了,从南回归线

春天回来了,从南中国海