这个学期做了个小东西,一个每日一言的小程序后台,现在跑在自己的服务器上。
—— 为什么想做
起因挺简单:想做个每天推一句话的小程序,自己用着玩,顺便练练手。
功能想得不多:每天给用户一句,能随机翻,能生成个海报图发出去。
—— 用的什么
后端是 Flask,之前写"妙手"的时候用过,比较熟。配 gunicorn 跑,开了 3 个 worker,只监听 127.0.0.1 的 8000 端口,外面通过 nginx 转进来。
数据存 SQLite。就这点数据量,上 MySQL 反而麻烦,一个 .db 文件拷走就能备份。
句子是从一个 json 里攒的,现在有 516 条,写了个脚本同步进数据库。
—— 写了哪些接口
最后大概是这样:
| 接口 | 作用 |
|---|---|
| /api/quote/today | 今天的句子 |
| /api/quote/random | 随机来一句 |
| /api/quota | 查配额 |
| /api/poster | 生成海报图 |
| /api/quotes/categories | 分类列表 |
| /api/stats | 上报统计 |
| /api/qrcode | 生成小程序码 |
| /health | 健康检查 |
后台管理单独放了 admin 开头的几个接口,用来增删改句子、看数据。
—— 碰到的问题
配额。 一开始没限制,后来觉得不太行 —— 接口是对外的,万一被人刷就麻烦了。加了个按用户计次的配额,超了就拒绝。现在 quotas 表里没几条记录,量不大,但机制是通的。
微信的接口。 生成小程序码要先拿 access_token,这玩意有有效期,得缓存起来,不能每次都去要。这块调的时候卡了一下,因为报错信息不太友好,看半天才知道是 token 过期。
部署。 第一次把 Flask 项目往服务器上放,踩了不少坑:虚拟环境怎么建、gunicorn 的启动参数、systemd 服务怎么写、nginx 怎么转发。后来干脆写了个 install.sh,把这些步骤都固化下来,下次重装能省事。
—— 现在
它现在就跑在我那台服务器上,和博客共用一台机器,但各自独立 —— 博客是 Java,这个是 Python,各走各的端口,互不干扰。
做下来的感觉是:想法很简单,但真要让它稳定跑着,要考虑的东西比写接口多得多。配额、缓存、日志、进程挂了要能自己起来,这些不上线根本不会遇到。
不过看着自己写的东西真在跑,还是挺有成就感的。
写了个每日一言的小程序后台
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法