返回资讯中心
外部精选
软件工程
#开发者实时流

开发者 skorokithakis 发布轻量级私密论坛 Soliloquy

来源标题:Show HN: I made a tiny HN-style forum for small communities

开发者 skorokithakis 在 Show HN 上发布了一个名为 Soliloquy 的小型轻量级私密论坛,面向工作讨论和友好聊天场景。该项目提供 Linux 和 macOS(amd64、arm64)预编译二进制及 Docker 镜像,也可用 Go 1.24 以上版本自行构建。仓库附带 compose.yaml,默认将应用发布在 127.0.0.1:53684,仅限同机反向代理访问。

Hacker News 最新stavros2026/11/15 · 今天13 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

一个面向工作讨论和友好聊天的小型、轻量、私密论坛。完整需求见 docs/PRD.md。

每个 release 都提供 Linux 和 macOS 上的预编译二进制,覆盖 amd64 和 arm64。下载对应平台的压缩包,解压后运行 ./soliloquy。

每个 release 还提供 Linux 上 amd64 和 arm64 的 Docker 镜像: docker run -d -p 8080:8080 -v soliloquy-data:/data
-e SOLILOQUY_BASE_URL=https://forum.example.com
ghcr.io/skorokithakis/soliloquy:latest 请使用版本标签(例如 ghcr.io/skorokithakis/soliloquy:0.1.0)而不是 latest,以固定版本。

自行构建二进制(需要 Go 1.24 或更高版本,无需 CGO): CGO_ENABLED=0 go build -o soliloquy . ./soliloquy -base-url https://forum.example.com

或者自行构建 Docker 镜像: docker build -t soliloquy . docker run -d -p 8080:8080 -v soliloquy-data:/data
-e SOLILOQUY_BASE_URL=https://forum.example.com soliloquy

Docker Compose 和 Harbormaster

仓库中有一个 compose.yaml 文件。它会构建镜像,将数据库保存在名为 data 的命名卷中,并把应用发布到 127.0.0.1:53684。只有同一主机上的反向代理才能访问该地址。手动运行方式: SOLILOQUY_BASE_URL=https://forum.example.com docker compose up -d --build

该文件可与 Harbormaster 配合使用。将应用添加到你的 harbormaster.yml: apps: soliloquy: url: https://github.com/skorokithakis/soliloquy.git branch: master manage_volumes: true environment: SOLILOQUY_BASE_URL: https://forum.example.com

设置 manage_volumes: true 后,数据库位于 Harbormaster 工作目录下的 data/soliloquy/data/soliloquy.db。请备份该目录(参见“备份”一节)。要获取首个管理员邀请 URL,请在 repos/soliloquy/ 中运行 docker compose logs。

每项设置都是一个 flag 或环境变量。flag 的优先级高于环境变量。

base URL 必须是用户在浏览器中输入的准确 URL。应用用它来生成邀请和重置链接。它还会拒绝任何 Origin header 与之不匹配的表单提交,因此 base URL 错误会导致所有表单提交失败并返回 "403 Forbidden"。

当应用以空数据库启动时,它会向日志写入一次性的管理员邀请 URL: 2026/01/01 12:00:00 INFO first admin invite url=https://forum.example.com/invite/... 打开该 URL 创建第一个账号。在此之前每次重启都会生成新 URL,旧 URL 随即失效。第一个账号创建后,成员可以从 "My invites" 页面邀请其他人。

管理员从管理页面打开 /admin/settings。他们可以重命名论坛并将其设为公开。

论坛默认是私密的。访客会被跳转到登录页。

当论坛公开时,访客可以阅读首页、主题页和搜索。他们能看到分数但没有投票按钮,并且新主题、通知和账号链接的位置会显示一个 "log in" 链接。其他所有页面和所有写操作都会将他们跳转到登录页。他们不会收到实时更新。

论坛提供 RSS 2.0 feed,包含最新的 50 个主题、最新的 50 条评论和某位成员最新的 50 条通知:

在公开论坛上,任何人都可以阅读主题和评论 feed。通知 feed 是个人专属的,因此始终需要成员的 token。在私密论坛上,每个 feed 都需要一个 secret token:成员可以在账号页面的 "feeds" 部分找到自己的个人链接,如果链接泄露也可以在那里重置。论坛在公开和私密之间切换时,同一个 token 会继续有效。它只授予只读访问权限,不能用于登录。

论坛有一个小型的只读 JSON API:

访问方式与 feed 相同。已登录的浏览器会话可用,账号页面上的 feed token 以 ?token=... 形式也可用。在公开论坛上不需要 token。被拒绝的请求会得到 404。

成员可以在 /account/api 找到完整的 API 参考,其中包含自己的带 token 链接。账号页面会链接到它。

当有人回复成员的评论、在成员的主题下发表顶层评论或被 @mention 时,成员会收到应用内通知。在账号页面的 "notifications" 部分,他们还可以:

应用不处理 TLS。请在其前面放置反向代理。使用 Caddy 时,只需这个 Caddyfile: forum.example.com { reverse_proxy localhost:8080

如果使用 compose.yaml 运行应用,请改用 localhost:53684。

使用 nginx 时,实时更新需要响应不经过缓冲。应用会发送 X-Accel-Buffering: no,因此这方面无需额外 nginx 设置,但请确保 proxy_read_timeout 长于 15 秒(应用每 15 秒发送一次 keep-alive)。

只运行一个进程。实时更新通过内存中的 hub 进行,因此第二个实例看不到第一个实例的事件。

登录限流保存在内存中,因此重启会重置它。

备份

所有数据都在 SQLite 文件中。数据库使用 WAL 模式,因此应用运行时,最近的写入可能位于旁边的 -wal 文件中。要备份正在运行的论坛,请使用 SQLite 的 backup 命令: sqlite3 soliloquy.db ".backup soliloquy-backup.db"

或者,停止应用并复制 soliloquy.db。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →