全栈 Web 应用框架:Go(Gin + GORM + SQLite)后端 + Vue 3(TypeScript + Pinia + Tailwind CSS)前端,内置登录认证、用户权限、系统配置、备份、审计、匿名统计、实时通道、定时任务与版本检查等公共能力
v0.3.0SmallGo 不只是一个能跑起来的 Demo,而是科技智趣坊全部自建应用的公共底座与脚手架:把每个应用都要用的登录、用户与权限、配置、备份、审计、统计、实时通道等公共能力做成框架模块,业务应用只写自己的业务表与页面。
smallgo/server 的应用(bill、reminders、rental、worklog)都基于本框架开发,改动框架层文件会同时影响这些应用。
# 1. 一键生成骨架:后端 app 模块 + 前端 API client + 页面视图 ./scripts/new-app.sh todo "待办事项" # 2. 按脚本提示完成三步接线 # server/main.go 添加 _ "smallgo/server/todo" 空导入 # web/src/router/index.ts 在 /admin children 中注册路由 # web/src/layouts/MainLayout.vue 在 mainNav / adminNav 中加入导航项
脚手架会生成后端 GORM 模型与分页列表 / 创建 / 删除示例路由,以及前端 web/src/api/<name>.ts 与 web/src/views/<Name>View.vue 页面,接线完成后即可继续开发业务。新应用的端口从端口家族尾部取,当前下一个可用端口是 8911。
后端 Go + Gin + GORM + SQLite,前端 Vue 3 + TypeScript + Pinia + Tailwind CSS,前端产物嵌入 Go 二进制,单文件即可分发
用户名密码注册与登录,首个注册用户自动成为管理员;支持 Bearer Token、X-API-Key 与 Cookie 三种认证方式,含忘记密码流程
支持飞牛 fnOS NAS 账号一键登录(自动绑定或注册),授权在居中弹窗内完成,页面不跳转、不丢输入,支持切换账号
用户管理页面与 authGroup 强制登录中间件,业务数据按用户隔离,可选的管理员专属路由分组
运行时配置注册表,支持 system / user 两级 scope 与 string、bool、int、select 四种类型,可标记公开键与内部键,在线修改即时生效
基于 SQLite VACUUM INTO 的一致性快照,管理员可立即备份、下载、删除;每日 03:00 自动备份并保留最近若干份
关键操作统一记录操作者、动作、对象与备注,管理后台可查询并导出 CSV,出问题能追溯
每小时心跳仅上报应用名、版本、部署形态、设备哈希、系统与架构,永不含主机名原文与用户数据;可随时关闭
内置实时通道模块,供各应用向前端推送状态与消息,无需自行搭建长连接基础设施
注册周期任务或每日定时任务,带 panic 恢复,服务关闭时自动停止,日志按天轮转并自动清理
查询发布渠道最新版本并做 semver 比较,结果缓存 24 小时;管理员登录后顶部提示新版本,每个版本只提示一次
scripts/new-app.sh 一键生成后端模块、前端 API client 与页面视图,把「新建应用」变成三条接线
明暗主题切换、文件上传、二维码生成、安全工具等公共组件开箱即用
飞牛 fnOS 应用包、Docker 镜像、裸机二进制,同一份代码三种分发方式
techfunway-smallgo 安装包(.fpk,支持 amd64 / arm64).fpk 文件docker run -d \ --name techfunway-smallgo \ -p 8900:8900 \ -v smallgo-data:/app/data \ -e TZ=Asia/Shanghai \ --restart unless-stopped \ techfunways/smallgo:latest
services:
smallgo:
image: techfunways/smallgo:latest
container_name: techfunway-smallgo
restart: unless-stopped
ports:
- "8900:8900"
volumes:
- smallgo-data:/app/data
environment:
- TZ=Asia/Shanghai
volumes:
smallgo-data:数据持久化到 Docker 数据卷 smallgo-data(容器内 /app/data),服务端口映射到宿主机 8900。
构建前端 + 后端(前端产物嵌入 Go 二进制),产物为 server/smallgo:
make build # 运行(默认端口 8900) ./server/smallgo -data-dir=/var/data/smallgo -port 8900 # 开发模式:构建并模拟生产目录结构运行 make dev
启动后浏览器访问 http://localhost:8900,首次注册的账号自动成为管理员。数据库文件位于 {data-dir}/db/smallgo.db,备份快照位于 {data-dir}/backups/。
-port / PORT(默认 8900)、-data-dir / DATA_DIR(默认 ./data)、-rate-limit / RATE_LIMIT、-cors-origin / CORS_ORIGIN、-log-retention-days / LOG_RETENTION_DAYS;设置 DISABLE_STATS=1 可完全关闭匿名统计上报。
-port 参数或 PORT 环境变量均可修改)
techfunway-smallgo
smallgo-data → 容器内 /app/data(数据库、备份、上传文件、日志)
techfunways/smallgo(多平台,端口 8900)
techfunway-smallgo(桌面显示名「SmallGo」)
TechFunWay/smallgo(Go + Gin + GORM + SQLite / Vue 3 + TypeScript)
{data-dir}/db/smallgo.db(SQLite WAL),快照位于 {data-dir}/backups/
./scripts/new-app.sh <name> "<显示名>",新应用端口从 8911 起顺延
./scripts/check-sync.sh 比对框架与实例仓库之间的框架层文件差异
飞牛 NAS 安装时可在向导中设置端口(默认 8900)。Docker 方式通过 -p 参数映射端口。二进制方式通过 -port 参数或 PORT 环境变量指定端口。
先克隆或复制 SmallGo 框架仓库,改掉应用名(app.json 的 appname、fnpack/manifest、Makefile、桌面入口等)与默认端口,再执行 ./scripts/new-app.sh <name> "<显示名>" 生成业务模块骨架,按脚本提示完成后端空导入、前端路由与侧边栏导航三步接线即可开始写业务。公共的登录、权限、配置、备份、审计、统计等能力直接复用,不要重复实现。
可以。框架内置运行时配置注册表,配置项分 system 与 user 两级 scope,类型支持字符串、开关、整数与下拉选择;模块可以在自己的 init() 中注册配置项。管理员在「系统配置」页面修改,保存后运行时生效,标记为 public 的配置项未登录也能读取。
心跳每 60 分钟一次(启动即报一次),仅上报应用名、版本、部署形态(fnos / docker)、设备哈希(机器标识或数据目录持久化 ID 的 32 位 md5)、系统与架构,永不包含主机名原文与任何用户数据。可以通过启动参数 -disable-stats、环境变量 DISABLE_STATS=1,或管理员在系统配置中关闭统计开关。
框架提供 SQLite 一致性快照能力:管理员可以在「备份管理」中立即备份、下载或删除快照,也可开启每日 03:00 自动备份并设置保留份数(默认 7 份),超出后自动清理最旧的快照。快照文件存放在数据目录的 backups/ 下;恢复时用快照替换 {data-dir}/db/smallgo.db 即可。备份数据目录也能保留全部配置与上传文件。