2026-08-29 16:49:39 +08:00
2026-08-05 17:11:05 +08:00

姜十三论坛 Jiang13 Forum

能聊 · 好看 · 好装

面向小圈子、团队与同好社群的轻量现代化论坛。
本分支(rebuild/gitea-ssrGo 模板真 SSR + web_src 渐进增强,单二进制 + SQLite。
对照 React SPA 请见 main 分支。


在线演示 License: MIT Docker Go SSR SQLite

在线演示 · 快速开始 · 界面预览 · 功能亮点 · 路线图 · 参与贡献


姜十三论坛首页 - 浅色主题三栏布局

浅色主题 · 三栏布局 · Feed 排序 · 板块导航 · 标签云


演示站点: https://bbs.iioio.com/(现网多为 main SPA
本分支按 Gitea 式 SSR 规格 重构;欢迎提 Issue / PR 共建。


它是什么

姜十三论坛不做大而全的社区平台,只做好一件事:给「几人到几百人」的内部交流,一个干净、顺手、数据在自己手里的地方。

场景 说明
团队 / 工作室 需求讨论、进度同步、知识沉淀
兴趣小圈子 同好交流、作品分享、活动组织
项目配套社区 可与 Gitea 等通过 OIDC开放身份连接做 SSO单点登录
个人站长 单机可跑,无需云数据库与一堆微服务

界面预览

截图来自演示站 bbs.iioio.com

浅色主题首页
浅色主题
左栏板块 · Feed 排序 · 右栏热门 / 标签 / 评论
暗色主题首页
暗色主题
一键切换 · 护眼阅读 · 全局色彩自适应
帖子详情页
帖子详情
文章目录 · 标签 · 作者卡片 · 修订信息
富文本与代码高亮
富文本渲染
TipTap 排版 · 图片 · 代码高亮 · 目录导航

移动端首页
移动端 — 板块快捷筛选 · Feed 排序 · 触控友好列表


功能亮点

界面与交互

特性 说明
三栏布局 左栏板块导航 + 中间虚拟滚动帖列表 + 右栏热门 / 标签 / 最新评论
虚拟滚动 @tanstack/react-virtual 驱动长列表,浏览依然流畅
帖子排序 最新发帖 / 最新回复 / 热门讨论
主题切换 浅色 / 暗色,跟随系统偏好并本地记忆
响应式 平板 / 手机自动收起侧栏,搜索、发帖、登录触手可及

社区功能

  • 用户注册 / 登录bcrypt + JWT Cookie首个注册用户自动成为管理员
  • 板块、发帖、TipTap 富文本、正文图片上传、标签、置顶 / 精华
  • 帖子修订历史与 diff差异对比可配置普通用户编辑时限
  • 楼层式评论:回复指定楼层、@ 高亮、引用回复;支持回复可见等内容门控
  • 点赞、收藏、热门帖、最新评论、站内私信、公开用户主页
  • 管理后台:仪表盘、删帖 / 删评、禁言、举报、敏感词、限流、SQLite 一键备份
  • 可选邮件验证码、OIDC Provider、S3 兼容对象存储Gitea 仓库同步后置)

部署体验

  • 单二进制go:embed 打包模板与 SSR 资源
  • 可切换数据库 — 默认 SQLite可选 PostgreSQL / MySQLEnv 引导)
  • 跨平台 — Windows / Linux / macOS 一键编译
  • 系统服务 — 内置 Linux systemd / Windows Service 注册
  • Docker 单容器 — 多阶段镜像,挂载 data/ 即可持久化

快速开始

1. 编译

Windows推荐

build.bat

请通过 build.bat 调用(内部已处理 ExecutionPolicy。不要直接 .\build.ps1,也不要在 Windows 上使用系统自带的 Embarcadero make

Linux / macOS

make build

手动分步(全平台):

cd web_src && npm run build
cd .. && go build -trimpath -ldflags "-s -w" -o dist/jiang13 ./cmd/jiang13

跨平台编译:

build.bat -Target build-windows
build.bat -Target build-linux
build.bat -Target build-all

2. Docker 部署(推荐)

一键启动(本地构建):

docker compose up -d --build
.\build.bat -Target compose-up
make compose-up

浏览器打开 http://localhost:3000/install 完成安装向导(站点名 + 管理员)。

拉取已构建镜像Docker Hub

docker pull hangzhang714128/jiang13-forum:latest
docker run -d --name jiang13 \
  -p 3000:3000 \
  -v jiang13-data:/data \
  --restart unless-stopped \
  hangzhang714128/jiang13-forum:latest

数据持久化: 容器内 /data 对应 SQLite默认、上传、日志与 JWT/OIDC 密钥。可用 Docker volume 或绑定宿主机目录。镜像启动时会自动将 /data 卷属主修正为 uid 1000jiang13 用户)。

若使用旧版镜像仍报 permission denied,可在宿主机执行:chown -R 1000:1000 /你的数据目录

可选环境变量(容器编排):

变量 说明
JIANG13_HTTP_PORT HTTP 端口(默认 3000
JIANG13_DATA 数据目录(默认 /data
JIANG13_DB_TYPE sqlite(默认)| postgres | mysql
JIANG13_DB_DSN 完整 DSN非 sqlite 时推荐)
JIANG13_WORK_PATH 工作目录

JWT 自动写入 /data/.jwt_secret,无需 Env。

健康检查: GET /health 返回 {"status":"ok"},供 Docker / 负载均衡探活。

发布镜像到 Docker Hub手动

docker login
.\build.bat -Target docker          # Windows
# make docker                       # Linux/macOS
docker push hangzhang714128/jiang13-forum:1.0.0
docker push hangzhang714128/jiang13-forum:latest

或直接构建:

docker build --build-arg VERSION=1.0.0 -t hangzhang714128/jiang13-forum:1.0.0 -t hangzhang714128/jiang13-forum:latest .
docker push hangzhang714128/jiang13-forum:1.0.0
docker push hangzhang714128/jiang13-forum:latest

停止服务:docker compose down / .\build.bat -Target compose-down / make compose-down

构建失败(无法连接 auth.docker.io Dockerfile 已默认经 DaoCloud 拉取基础镜像。若仍超时,可在 Docker Desktop → Settings → Docker Engine 添加:

{
  "registry-mirrors": ["https://docker.m.daocloud.io"]
}

保存并重启 Docker 后重试 .\build.bat -Target docker。PowerShell 中请用 .\build.bat(带 .\ 前缀)。

1Panel 部署提示:

  1. 容器镜像填 hangzhang714128/jiang13-forum:latest
  2. 端口映射 3000:3000
  3. 挂载数据卷到容器内 /data(镜像会自动修正目录权限)
  4. 首次访问 http://服务器IP:3000/install 完成安装

3. 直接启动(二进制)

# Windows
.\dist\jiang13.exe --data .\dist\data

# Linux / macOS
./dist/jiang13 --data ./data

默认 SQLite库文件在 {DATA}/jiang13.db。无 app.ini

4. 首次使用

  1. 浏览器打开 http://localhost:3000/install
  2. 填写站点名与管理员账号
  3. 完成后登录,访问管理后台配置品牌等(热更新,无需重启)

配置分层(无 INI

内容 需重启
CLI / Env 端口、数据目录、数据库类型与 DSN
data/.jwt_secret.oidc_rsa.pem 密钥 换密钥需重启
DB forum_settings 品牌、邮件、OIDC 开关、限流、存储…

优先级: 命令行显式参数 > 环境变量 > 内置默认。

启动参数

参数 默认值 说明
--work-path 可执行文件目录 工作目录
--port 3000 HTTP 监听端口
--http-addr (空) 监听地址
--data data 数据目录
--db-type sqlite sqlite | postgres | mysql
--db-dsn sqlite 默认 {data}/jiang13.db 完整 DSN
--service (空) install / uninstall / start / stop / restart / status

环境变量: JIANG13_HTTP_PORTJIANG13_HTTP_ADDRJIANG13_DATAJIANG13_WORK_PATHJIANG13_DB_TYPEJIANG13_DB_DSN、以及 JIANG13_DB_HOST / USER / PASS / NAME / SSLMODE

PostgreSQL / MySQL 示例见 docs/rebuild-spec/07-config-ops.md

5. 注册为系统服务(可选)

sudo mkdir -p /opt/jiang13
sudo cp jiang13 /opt/jiang13/
sudo /opt/jiang13/jiang13 --work-path /opt/jiang13 --data /opt/jiang13/data --service install
sudo /opt/jiang13/jiang13 --service start
sudo systemctl enable jiang13

Windows管理员 PowerShell

New-Item -ItemType Directory -Force -Path C:\jiang13 | Out-Null
Copy-Item .\jiang13.exe C:\jiang13\
C:\jiang13\jiang13.exe --work-path C:\jiang13 --data C:\jiang13\data --service install
C:\jiang13\jiang13.exe --service start

改端口或 DB_* 后执行 --service restart(必要时重装服务以更新参数)。日志:data/jiang13.log


技术栈

层级 技术
后端 / SSR Go 1.26 · Gin · GORM · SQLite / PostgreSQL / MySQL · html/template
渐进资源 web_src/(构建到 public/assets/URL /ssr-assets/
构建 web_srcgo:embed templates + assets单二进制发布
认证 bcrypt · JWT Cookie · 可选 OIDC Provider
对照 SPA main 分支React 18 · TipTap · Vite

本地开发SSR

build.bat -Target run
make run

浏览器访问 http://localhost:3000。数据目录默认 dist/data

改模板 / Go 后重启进程;改 web_src 后需再跑 build.bat -Target web-src(或完整 build)。

需要对照旧 SPA UIgit checkout maingit worktree add ../jiang13-spa main


项目结构

jiang13-forum/                 # 分支 rebuild/gitea-ssr
├── cmd/jiang13/               # 程序入口(含系统服务注册)
├── config/                    # CLI / Env 引导配置(无 INI
├── Dockerfile                 # web_src → Go → Alpine
├── docker-compose.yml
├── models/                    # GORM 模型
├── services/                  # 业务逻辑
├── routers/
│   ├── setup.go               # 路由总装
│   ├── web/                   # HTML SSR
│   └── api/                   # JSON API
├── modules/
│   ├── auth/                  # JWT / 限流
│   ├── webrender/             # 模板渲染
│   └── seo/
├── templates/                 # Go html/templateembed
├── web_src/                   # 渐进 CSS/JS 源码
├── public/assets/             # web_src 构建产物embed
├── docs/rebuild-spec/         # 产品规格与 SSR 架构
├── docs/screenshots/
└── ROADMAP.md

SPA 源码树仅存在于 mainfrontend/embed_static/)。


数据目录

data/
├── jiang13.db              # SQLite 主数据库
├── jiang13.log             # 运行日志
├── filter_words.txt        # 敏感词配置
├── .jwt_secret             # JWT 密钥(自动生成)
├── uploads/avatars/        # 用户头像
├── uploads/posts/          # 帖子正文图片
└── jiang13_backup_*.db     # 后台导出的备份

开发状态

项目积极开发中,欢迎参与共建。完整列表见 ROADMAP.md

类型 示例
已可用 三栏布局、暗色主题、虚拟滚动、Feed 排序、楼层评论
发帖体验 TipTap 富文本、图片上传、修订历史、回复可见等门控
管理后台 JSON API 已就绪;本分支管理 UI 为 SSR 占位(完整后台见 main SPA
📋 计划中 通知动态优化、邮件提醒

参与贡献

欢迎提交 Issue 和 Pull Request详见 CONTRIBUTING.md

在线体验与反馈也可直接在演示站进行:https://bbs.iioio.com/


许可证

MIT(与 Gitea 相同的 Expat 文本格式)— 自由使用、修改与分发。

Description
轻量自用论坛:Go 单二进制 + React SPA 内嵌 + SQLite,面向小圈子内部交流。 https://bbs.iioio.com
Readme MIT 31 MiB
v1.1.8 Latest
2026-09-02 11:42:37 +00:00
Languages
TypeScript 52.5%
Go 30.8%
CSS 14.9%
JavaScript 1.2%
PowerShell 0.2%
Other 0.2%