Repository navigation
SForum v3.0.15
Maintainable, plugin-first open-source forum framework.
本次更新
- 论坛(重要缺陷修复):带图发帖/评论在正文包含 2 张及以上图片 时必然失败并返回 500「服务器暂时不可用」。根因是 202607110015 把槽位型唯一索引
(resource_type, resource_id, context)建到了所有资源上,第二条附件引用必然违反约束并回滚整个发布事务;0–1 图成功而多图失败让它看起来像"偶发"。现已收窄为槽位型部分索引(站点品牌图 / SEO 图 / 用户头像 / 扩展图标仍一槽一图),论坛正文引用恢复多值语义;库中无历史漂移,升级无回填。 - 错误可诊断性:正文附件失效(已删除/已转私有/非本人上传)从裸 500 改为具名 422
forum.attachment_unavailable,data.fields.content携带字段级原因,前端直接提示"重新上传这张图";附件引用写入的唯一约束冲突兜底为具名 409forum.attachment_conflict。附件写入幂等化(ON CONFLICT DO NOTHING)、行锁按 id 排序防并发死锁、reference_count按引用行重算并在写入时自愈历史漂移。
升级提示
- 新增数据库迁移
202610260001_attachment_reference_scope_unique.sql(索引替换),升级时自动执行,无手工步骤。 - API 消费方:
POST/PATCH /topics与评论写路径新增两个错误 reason(422forum.attachment_unavailable、409forum.attachment_conflict),OpenAPI 已登记;此前把附件相关失败一律按 500 处理的客户端可按新 reason 细化提示。 - 唯一性边界变化:topic/comment 一条内容可绑多图(基表
UNIQUE (attachment_id, resource_type, resource_id, context)兜底),site/seo/user/extension 槽位仍一槽一图;迁移的 Down 方向在存在多值数据时会刻意失败(fail-closed)。
Installation
Docker images:
docker pull ghcr.io/zhuchunshu/sforum-api:v3.0.15
docker pull ghcr.io/zhuchunshu/sforum-migrate:v3.0.15
docker pull ghcr.io/zhuchunshu/sforum-web:v3.0.15Update an existing installation with a verified bootstrap:
(
set -eu
cd /path/to/sforum
bootstrap_dir="$(mktemp -d .sforum-bootstrap.XXXXXX)"
trap 'rm -rf "$bootstrap_dir"' EXIT HUP INT TERM
curl -fsSLo "$bootstrap_dir/sforum-bootstrap.sh" https://github.com/zhuchunshu/SForum/releases/download/v3.0.15/sforum-bootstrap.sh
curl -fsSLo "$bootstrap_dir/SHA256SUMS" https://github.com/zhuchunshu/SForum/releases/download/v3.0.15/SHA256SUMS
(
cd "$bootstrap_dir"
awk '$2 == "sforum-bootstrap.sh" { print }' SHA256SUMS > sforum-bootstrap.sha256
test "$(wc -l < sforum-bootstrap.sha256 | tr -d '[:space:]')" = 1
if command -v sha256sum >/dev/null 2>&1; then
sha256sum -c sforum-bootstrap.sha256
else
shasum -a 256 -c sforum-bootstrap.sha256
fi
if command -v gh >/dev/null 2>&1; then
gh attestation verify sforum-bootstrap.sh --repo zhuchunshu/SForum
fi
)
install -m 0755 "$bootstrap_dir/sforum-bootstrap.sh" ./sforum-bootstrap.sh
rm -rf "$bootstrap_dir"
trap - EXIT HUP INT TERM
./sforum-bootstrap.sh upgrade --version v3.0.15
)Fresh install with the verified deploy bundle:
(
set -eu
mkdir -p sforum
cd sforum
curl -fsSLo sforum-deploy.tar.gz https://github.com/zhuchunshu/SForum/releases/download/v3.0.15/sforum-deploy.tar.gz
curl -fsSLo SHA256SUMS https://github.com/zhuchunshu/SForum/releases/download/v3.0.15/SHA256SUMS
awk '$2 == "sforum-deploy.tar.gz" { print }' SHA256SUMS > sforum-deploy.sha256
test "$(wc -l < sforum-deploy.sha256 | tr -d '[:space:]')" = 1
if command -v sha256sum >/dev/null 2>&1; then
sha256sum -c sforum-deploy.sha256
else
shasum -a 256 -c sforum-deploy.sha256
fi
if command -v gh >/dev/null 2>&1; then
gh attestation verify sforum-deploy.tar.gz --repo zhuchunshu/SForum
fi
tar -xzf sforum-deploy.tar.gz --strip-components=1
./sforum-bootstrap.sh install --yes --version v3.0.15
)Manual download: Download the matching Linux or macOS archive from the assets below.
Documentation
- GitHub Repository
- 中文部署文档
- English Deployment Guide
- 完整变更记录 / Full Changelog:
v3.0.14...v3.0.15