Repository navigation
Releases: Glasden/NextSkin
Release list
NextSkin 0.7.2
修订版:修了在 Windows 上实测一键升级时发现的几个问题(切换失败后站点可能一直停着、杀毒软件让准备失败、回滚以后更新页一直在等),另外后台发通知可以搜索选择收件人,注册和重设密码页加了密码强度指示。安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.7.2(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。
安全修复
代码上没有。Windows 上把实例放在 C 盘根下(例如 C:\nextskin)、用 NSSM 以 LocalSystem 运行的,目录默认继承"Authenticated Users:修改",本机任何账户都能改程序、读 .env。请照 Windows 部署页用 icacls 收紧目录权限。
迁移
无。核心没有新迁移,官方插件也没有。
不兼容的部署变化
无。没有新的环境变量,Node 下限没有变。
变化
- 修复:一键升级切换失败、版本指针又写不回去时,站点一直停着。Windows 上
releases\current.json被杀毒软件或别的程序占着超过几秒时,切换失败后的恢复写不了指针,旧版本也不再启动,只能手动重启服务。现在照样把原来的版本起来;指针没写回去时,结果里写明重启服务之前要把current.json改成指向哪个版本。升级和回滚都是这样。 - 修复:Windows 上准备升级时,解压完报"管理操作失败"。杀毒软件会扫刚解压的发行包,扫完之前目录改不了名。原来最多等约 4.5 秒,实测卡巴斯基要 5 秒多;现在最多等约 55 秒。
- 修复:后台回滚以后一直停在"正在回到 …"。服务器的钟比浏览器慢一秒多时(Windows 上常见),页面认不出回滚的结果,五分钟后才提示去服务器上看。现在看结果有没有变,不再比时间。
- 修复:没有权限连接管理进程时被当成"没在运行"。在没提升的 PowerShell 里对以 LocalSystem 运行的 Windows 服务执行命令行,原来
releases显示"管理进程:未运行",import blessing-skin会照常开始导入(服务其实在跑)。现在报"没有权限连接管理进程",并提示用管理员身份打开 PowerShell。别的系统上没有权限连接控制通道时也一样。 - 管理操作的意外错误带上系统错误码,例如"管理操作失败(EPERM rename),请检查目录权限和发行目录",仍不带路径。
- 启动器强制结束核心时记一条日志:核心 30 秒内没收尾完,或者又按了一次 Ctrl+C,日志里会记"强制结束",不再看起来像核心崩了。
- 后台发通知:指定用户改成搜索选择。按 uid、昵称搜(能看到用户邮箱的管理员还能按邮箱搜),选中的用户显示成可以删除的小卡片,最多 50 个;从用户详情页点进来时已经选好这个用户。原来要先去用户列表查 uid,再一行一个填进文本框。
- 修复:后台发完通知,标题框马上标红报"必填"。
- 注册和重设密码页加了密码强度指示。只是提示,弱密码照样能提交。
- 表单的校验提示(没填、格式不对、太短、超出范围)改用站点的文案,原来跟随浏览器的语言,可能和页面对不上。
- 后台的验证码设置说明写明 reCAPTCHA 的私密密钥在 Google Cloud 控制台里叫"旧版密钥",以及去哪里找。
- 文档:Windows 部署页补上实测结果,包括 Ctrl+C、关窗口和 NSSM 的停止顺序,
nssm stop会先返回,服务的命令行要以管理员身份运行;反向代理页补上全站 CSP 下 Cloudflare 的 Bot Fight Mode、Web Analytics 的实测结果。
已知的限制
- 管理进程里的修复(上面前四条)要等升级到 0.7.2、再重启一次服务后才生效:升级用的是在用版本的管理进程。Windows 上从 0.7.1 准备升级时报"管理操作失败",多半是杀毒软件还没扫完,再点一次"准备升级"。
- 0.6.0 的更新页查到新版本后,先刷新一下页面,再点"准备升级到 0.7.2"(0.7.0 修了这个问题,但 0.6.0 的后台没有这个修复)。
- 验证码服务商的官方测试密钥返回固定的主机名,过不了主机名核对,后台测试会显示"没有通过"。测试请用真实密钥。
- 三家验证码共用一对站点密钥和私密密钥,换服务商要重新填写。
- 在全站 CSP 下,Turnstile 的挂件会在浏览器控制台报
connect-src拦下了data:。这条报错来自 Cloudflare 自己的 iframe 的 CSP,和站点无关,不影响验证。 - 已经在真实环境里实测过:宝塔、1Panel、MCSManager、systemd(权限分离)、Windows 控制台和 NSSM 下的一键升级和回滚;全站 CSP 下的三家验证码、Cloudflare 的 Bot Fight Mode 和 Web Analytics。还没实测:Docker 里导入、systemd 单元的开机自启、宝塔和 1Panel 申请免费证书。
NextSkin 0.7.1
修订版,修两个在真实环境里实测时发现的问题:第三方登录插件的客户端密钥清不掉,hCaptcha 在子域名上的站点验证一律不通过。另外放宽了更新清单的解析,为以后给版本条目加字段做准备。安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.7.1(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。
安全修复
无。
迁移
无。核心没有新迁移,官方插件也没有。
不兼容的部署变化
无。没有新的环境变量,Node 下限没有变。
变化
- 修复:插件设置里必填的机密项清不掉。在第三方登录插件的设置页点"清除客户端密钥",会报"请求的格式不对"。现在可以清除了。清除后插件的设置不完整,登录页不再显示这个登录方式,和刚装好还没填时一样。只保存、不清除时,仍要求所有必填项都填上。
- 修复:hCaptcha 在子域名上验证不通过。hCaptcha 核对时报的是注册域名:站点在
skin.example.com上,它报example.com。这和站点地址的主机名对不上,所以挑战过了也提示"验证码没有通过"。现在对 hCaptcha,只要报来的域名是站点地址的主机名本身或它的上级域名就算对上,报not-provided也放行。Turnstile 和 reCAPTCHA 仍要求主机名完全一致。- 代价:同一注册域名下的别的站点如果用了同一个站点密钥,那边解出来的令牌这里也认。最好给每个站点单独申请站点密钥。
- 后台的验证码测试会写出主机名。服务商判定通过、但主机名对不上时,测试结果会同时写出站点地址的主机名和服务商报来的主机名,日志里也记一条警告。
- 放宽更新清单的解析:读取时忽略版本条目、签名和清单顶层多出来的字段。以后给版本条目加字段(例如"是否含安全修复"),0.7.1 及以后的站点照样能看到新版本。
已知的限制
- 0.6.0 的更新页查到新版本后,先刷新一下页面,再点"准备升级到 0.7.1"(0.7.0 修了这个问题,但 0.6.0 的后台没有这个修复)。
- 验证码服务商的官方测试密钥返回固定的主机名,过不了主机名核对,后台测试会显示"没有通过"。测试请用真实密钥。
- 三家验证码共用一对站点密钥和私密密钥,换服务商要重新填写。
- 在全站 CSP 下,Turnstile 的挂件会在浏览器控制台报
connect-src拦下了data:。这条报错来自 Cloudflare 自己的 iframe 的 CSP,和站点无关,不影响验证。 - 已经在真实环境里实测过:宝塔、1Panel、MCSManager 下的一键升级;四个第三方登录插件的账号标识和邮箱验证状态;全站 CSP 下的 Turnstile。还没实测:Windows 控制台和 NSSM 下的一键升级、systemd 以 root 运行管理进程时的权限分离;全站 CSP 下的 hCaptcha 和 reCAPTCHA、Cloudflare 的 Bot Fight Mode 和 Web Analytics;部署文档里其余标了"未实测"的条目。
NextSkin 0.7.0
后台多了诊断页:在一页里看站点的健康状况和日志;出问题时可以下载一份脱敏的诊断包,附在问题报告里。ADR-0062 到这一版全部做完。安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.7.0(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。
安全修复
无。
迁移
无。核心没有新迁移,官方插件也没有。
不兼容的部署变化
无。没有新的环境变量,Node 下限没有变。
变化
- 诊断页(后台 → 诊断,只有超级管理员能看,ADR-0062)
- 健康摘要:版本和运行方式(经管理进程、经启动器、直接运行)、数据库的版本和迁移状态(核心和插件有没有没跑的迁移)、数据目录的剩余空间和日志占用、24 小时内丢掉的日志记录数、plugin host 的状态、后台任务的排队数和死信、最近一次升级的结果。plugin host 不正常时页头会给出提示。
- 日志:从新到旧浏览
data/logs/里的记录,可以按最低级别、来源(启动器、核心、plugin host、插件)和关键字筛选,往前一页页翻。停在第一页时每 5 秒取一次新的记录。页面上显示的是原文。
- 诊断包:在诊断页点"导出诊断包",下载一个 zip。里面有健康摘要、设置(机密只记有没有设)、
NEXTSKIN_*环境变量的名字(不含值)、插件的状态、后台任务的统计和最近一条错误、最近的日志(最多 10 MB)。- 脱敏:令牌、密码、Cookie、连接串里的密码换成
[redacted],邮箱和公网 IP 换成<邮箱1>、<IP1>这样的编号,安装目录、数据目录、家目录换成占位符。 - 每次导出记一条审计。
- 脱敏:令牌、密码、Cookie、连接串里的密码换成
- 修复:更新页。点"立即检查"查到新版本后,下面的一键升级面板还写着"已经是最新版本",要刷新页面才出现升级按钮;从没检查过时,这块也会说"已经是最新版本"。
已知的限制
-
上面这个更新页的修复从 0.7.0 起才生效。在 0.6.0 的后台查到 0.7.0 之后,先刷新一下页面,再点"准备升级到 0.7.0"。
-
诊断包的脱敏是按规则认的。第三方库用少见的格式打印的机密可能认不出来,发给别人之前最好翻一遍。
-
设了
NEXTSKIN_LOG_FILE=off的站点,诊断页看不到日志,诊断包里也没有。 -
0.6.0 列出的其余限制照旧:宝塔、1Panel、Windows 上的一键升级,以及 systemd 以 root 运行管理进程的整个升级过程,还没在真实环境里实测;全站 CSP 下三家验证码和 Cloudflare Web Analytics 是否正常、部署文档里标了"未实测"的条目、四个第三方登录插件的账号标识和邮箱验证状态,也都还没在真实环境里核对。
NextSkin 0.6.0
站点自己把日志存进数据目录、按大小轮换,每种部署方式的日志都在 data/logs/;终端里每行带上了时间、级别和来源。这是第一个能从 0.5.0 一键升级上来的版本。安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.6.0(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS,另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。
安全修复
无。
迁移
无。核心没有新迁移,官方插件也没有。
不兼容的部署变化
- 终端里的日志格式变了(ADR-0062)。每行是
2026-10-24 20:15:03.123 WARN core/mail …:本机时区的时间、级别、来源和模块、消息、字段。启动器的行不再带[nextskin]前缀,来源一栏写launcher。warn及以上写 stderr,其余写 stdout。按前缀或原来的文字过滤日志的脚本要改。 - 数据目录里多了
logs/:nextskin.log加轮换出来的nextskin.1.log……,默认最多约 50 MB。systemd 和 Docker 本来就存了一份,不想再存的设NEXTSKIN_LOG_FILE=off,代价是之后的诊断页看不到日志。 - Windows 用 NSSM 做成服务的:建议删掉
AppStdout、AppStderr两项,否则data/nextskin.log会再存一份、而且不轮换。见 windows.md。 - Docker Compose:示例的
compose.yaml给容器的日志设了上限(json-file,10 MB × 3 份)。照它部署的可以把logging一段抄过去,Docker 默认的 json-file 不轮换。 - 插件的
debug日志默认不再输出,排查时设NEXTSKIN_LOG_LEVEL=debug。插件给的字段放在记录的fields下。 - 命令行命令的日志一律写 stderr,stdout 只有命令的输出;
update、rollback、releases执行期间管理进程的日志也只写 stderr。 - 新的环境变量都可选:
NEXTSKIN_LOG_LEVEL(默认info)、NEXTSKIN_LOG_FORMAT(text或json)、NEXTSKIN_LOG_FILE(off关掉文件)。Node 下限没有变。
变化
- 结构化日志(ADR-0062):核心、命令行、插件的日志改用 Pino,每条记录带时间、级别、来源、模块和字段。
NEXTSKIN_LOG_FORMAT=json时终端里每行一条 JSON,给 journald、Docker 后面再接日志系统的人用。 - 日志文件和轮换
- 由启动器拉起时,核心的记录、Next 自己打印的内容、崩溃时的堆栈和启动器自己的行都写进
data/logs/nextskin.log(一行一条 JSON,POSIX 上只有运行服务的用户能读),重启后接着写。 - 后台"设置 → 高级"新增两项:单个文件的上限(1–100 MB,默认 10)、连同当前文件一共留几份(2–20,默认 5),保存后一分钟内生效。
- 写盘跟不上或写不进去(磁盘满)时丢掉记录、记下条数,恢复后补一条说丢了多少,不拖住站点。
- Next 和第三方库打印的原始内容里,
Cookie、Authorization头、令牌形状的串和连接串里的密码写进日志之前换成[redacted]。
- 由启动器拉起时,核心的记录、Next 自己打印的内容、崩溃时的堆栈和启动器自己的行都写进
- 文档:部署说明、文档站的安装页和 FAQ 写明了"日志在哪"。
已知的限制
- ADR-0062 的诊断页(在后台看健康摘要和日志)和脱敏的诊断包还没做,在下一个版本。
- 从 0.5.0 一键升级到这一版,是一键升级第一次在真实站点上用到。宝塔、1Panel、Windows 上的一键升级,以及 systemd 以 root 运行管理进程的整个升级过程,还没在真实环境里实测。
- 0.5.0 列出的其余限制照旧:全站 CSP 下三家验证码和 Cloudflare Web Analytics 是否正常、部署文档里标了"未实测"的条目、四个第三方登录插件的账号标识和邮箱验证状态,都还没在真实环境里核对。
NextSkin 0.5.0
站点能自己发现新版本,用发行包部署的可以在后台一键升级、回滚。这一版的发行包换了目录布局,从 0.4 升级照旧覆盖解压,细节见下面的"不兼容的部署变化"。安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.5.0(linux/amd64、linux/arm64)。
校验:sha256sum -c SHA256SUMS;从这一版起另附 SHA256SUMS.sig,用发布公钥校验的方法见安装。
安全修复
无。
迁移
无。核心没有新迁移,官方插件也没有。
不兼容的部署变化
- 发行包的目录布局变了(ADR-0061)。根目录的
nextskin.mjs现在是管理进程,程序放在releases/<版本>/里,releases/current.json记着在用的和上一个版本;data/、.env的位置不变。启动命令照旧是node nextskin.mjs start,面板和 systemd 的配置不用改也能运行。 - 从 0.4 及更早的版本升级:停服务 → 备份
data/和.env→ 把 0.5.0 的 ZIP 覆盖解压到原目录 → 启动。第一次启动时管理进程用新版本预检、启动,通过健康检查后删掉根目录旧的server/、cli/;失败时以 78 退出(面板和 systemd 不会反复重启),旧程序还在。这一次没有可回滚的上一个版本,要回到 0.4 照部署文档。 - systemd:想用一键升级,把单元文件里的
User=nextskin、Group=nextskin换成Environment=NEXTSKIN_RUN_AS=nextskin:管理进程以 root 运行、只用来换版本,站点照旧降到nextskin运行。不换也能运行,只是只检测、不一键升级。见 systemd.md。 - 不想要管理进程:设
NEXTSKIN_MANAGER=off,进程模型和 0.4 一样,只检测、不一键升级。镜像里设了它。 - 环境变量、Node 下限都没有变。
变化
- 更新检测(ADR-0061)
- 站点每天读一次
https://dl.nextskin.org/releases/v1.json:一份 Ed25519 签过名的版本清单,请求不带站点的任何信息(没有查询参数、Cookie 和自定义头)。验签不过的条目一律不认。 - 有新版本时后台概览和新的"更新"页(
/admin/updates)提示,每位超级管理员收到一条通知,同一个版本只通知一次。 - 后台"设置 → 高级 → 检测更新"能关掉。
- 站点每天读一次
- 一键升级和回滚(发行包部署,ADR-0061)
- 后台"更新"页(只有超级管理员能进):先准备,下载 ZIP(先试 dl.nextskin.org,再试 GitHub)、核对签名和 SHA-256、解压,用新版本对着在用的库预检,站点照常运行;看过预检结果(迁移有几个、不兼容的插件、失败时会怎样)再升级,站点停几秒到三十多秒。
- 新版本没通过健康检查时:没有迁移就换回旧版本;SQLite 有迁移时先自动备份,失败时连库一起换回去。MySQL、PostgreSQL 有迁移时要先自己备份、在后台勾选确认;迁移失败而库没变时换回旧版本,迁移已经提交而新版本没起来时不自动回滚,更新页写明怎么做。
- 升级以后能回到上一个版本:后台一键,或
node nextskin.mjs rollback。SQLite 有迁移时用升级前的备份换回库,升级以后的写入会丢失,要确认。MySQL、PostgreSQL 有迁移时只能停着服务回滚:停服务 → 用备份恢复数据库 →node nextskin.mjs rollback --yes→ 启动。 - 手动升级照旧可用:覆盖解压新的 ZIP 再启动,管理进程按同一条流程预检、迁移、启动,失败时同样回到旧版本。
- Docker 镜像不做一键升级:更新页照样提示新版本,升级照旧换标签。
- 命令行
- 新增
update(--check、--to、--backup-confirmed、status)、rollback、releases;服务运行时交给管理进程,服务停着时自己执行同一条流程,最后不启动服务。 doctor、migrate加了--json。migrate和核心启动时一并执行已启用的官方插件新增的迁移,SQLite 的迁移前备份也覆盖它们。
- 新增
- 发行包签名:
SHA256SUMS.sig和版本清单的条目都由发布环境里的私钥签名,公钥内置在站点里,也放在文档站的https://docs.nextskin.org/release-keys/2026-10.pem。
已知的限制
- 一键升级要从 0.5.0 升到下一个版本时才第一次在真实站点上用到。宝塔、1Panel、Windows 上的一键升级,以及 systemd 单元文件以 root 运行管理进程的整个升级过程,都还没在真实环境里实测;部署文档里标了"未实测"。
- 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
- 部署文档里其余标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
- 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。
NextSkin 0.4.0
配色主题来了:站长在后台启用,用户在用户中心挑。插件可以在用户中心首页和后台概览放挂件。插件开发文档多了一页带截图的插槽一览。安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.4.0(linux/amd64、linux/arm64)。
安全修复
无。
迁移
有:0047_add_users_theme,给 users 表加一列可空的 theme,记用户挑的主题。不改已有的数据。
升级之前先备份。SQLite 有要执行的迁移时会先自动备份到 data/backups/;MySQL、PostgreSQL 要自己备份。升级以后不能直接换回 0.3.0:回退要先恢复升级前备份的数据库,见升级与回退。
不兼容的部署变化
无。环境变量、Node 下限、启动方式都没有变。
变化
- 配色主题(ADR-0057、0058)
- 后台新增"主题"页(
/admin/themes),超级管理员设站点默认的主题、决定启用哪些。插件带来的主题默认不启用,看过和站点相配再开。 - 用户中心新增"主题"页,用户挑一套配色存进账号,换了设备也一样;可以选"跟随站点默认"。亮暗模式照旧按设备记。没登录的访客、没挑过的用户,或者挑的主题被停用、插件被卸载了,看到的都是站点默认的那套,再不行就是钻石青。
- 官方插件"更多配色"提供钴蓝、洋红和高对比三套。高对比用直角、粗边框和静止时就带阴影的卡片,亮色下荧光色只用在色块上。
- 主题只能换颜色和几种固定的结构(圆角或直角、细或粗的边框、平的或带阴影的卡片),不能写 CSS。插件的主题在构建、安装和加载时都要过对比度检查。
- 后台新增"主题"页(
- 插件挂件(ADR-0059)
- 插件可以在用户中心首页(公告下面)和后台概览(站点的几个数字下面)放统计或 Markdown 的挂件,每个插件在每处最多两个。挂件的数据限时 3 秒,插件出问题时只显示"没能加载",首页最多慢 3 秒。
- 官方插件"分享注册链接"在用户中心首页显示双方各得几分、最新的一条链接(带复制按钮)和经链接注册了几人;"邀请码"在后台概览显示可用、已使用、已过期的个数。插件启用以后才有。
- 后台"这个插件会做什么"列出插件的主题和挂件,命令行
plugin install的确认也列出挂件。
- 插件 API:随
@nextskin/plugin-sdk升到1.0.0-rc.7。
已知的限制
- 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
- 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
- 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。
NextSkin 0.3.0
窄屏上的页头和导航重做,头像改成 BS 那样帽子层立体的正视图。文档站上线:docs.nextskin.org,安装和升级步骤见安装。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.3.0(linux/amd64、linux/arm64)。
安全修复
无。
迁移
没有新迁移。从 0.1.x 直接升到 0.3.0 的站点会执行 0.2.0 的 0046_create_notifications:升级之前先备份,回退要先恢复升级前备份的数据库,见升级与回退。
不兼容的部署变化
无。环境变量、Node 下限、启动方式都没有变。
变化
- 窄屏布局
- 页头在窄屏上只占一行:放不下站点名时只显示站点图标,最左边多一个"打开导航"按钮,点开从左边滑出全站导航。点链接、按 Esc、点遮罩或往左滑都能关上。
- 用户中心和后台在窄屏上,左侧的分区导航收进同一个侧边栏,不再是横着滚动的一排。
- 后台"设置"的分区在窄屏上换成选择框。
- 昵称很长时,页头的用户菜单截断显示,不再把页面撑宽;菜单比屏幕高时可以在菜单里滚动。
- 修复:对话框里的下拉选项、提示被对话框盖住,比如创建 OAuth 应用时看不到"类型"的选项。
- 头像(ADR-0056)
- 改成 BS 用户菜单里那样的正视图:帽子层按游戏里的膨胀量伸出脸外,头发、头盔看着是立体的。半透明的帽子像素按透明度叠加。
- 按显示尺寸和设备像素比出图,高分屏上更清楚。
- 渲染器版本升到 3,头像、人物图的地址都变了,升级后第一次请求时重新生成;旧版本的出图缓存启动时自动删掉。反向代理、CDN 缓存的旧图不会再被请求,不用手动清。
- OpenID Connect 的
picture改成 144×144 的头像,原来普通皮肤只有 8×8。
已知的限制
- 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
- 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
- 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。
NextSkin 0.2.0
站内通知、后台的失败任务页,全站加上了内容安全策略(CSP)。部署步骤见部署文档。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.2.0(linux/amd64、linux/arm64)。
安全修复
- 登录、注册等页面的脚本还没加载完时就点提交,浏览器会把表单的内容(包括密码)拼进本站页面的地址里提交,密码会留在地址栏、浏览器历史和反向代理的访问日志里。网速慢、脚本加载慢时才会碰上。现在表单一律按 POST 提交,脚本没加载完时只是把页面重新打开一次。建议检查反向代理的访问日志里有没有带
password=的请求,有的话删掉这些日志。 - 全站页面加上内容安全策略:页面只执行带本次请求 nonce 的脚本,即使哪里漏了转义,注入进页面的脚本也不会运行(ADR-0053)。
迁移
有:0046_create_notifications,新建站内通知的三张表,不改已有的表。
升级之前先备份。SQLite 在迁移前会自动备份到 data/backups/;MySQL、PostgreSQL 要自己备份。升级以后不能直接换回 0.1.x:回退要先恢复升级前备份的数据库,步骤见升级和回退。
不兼容的部署变化
- 站点不能再嵌进别的网站的 iframe:全站发
X-Frame-Options: DENY和frame-ancestors 'none',原来只有授权页这样做。 - 会改写页面脚本的 CDN 功能要关掉:比如 Cloudflare 的 Rocket Loader、邮箱地址混淆,它们插入或改写的脚本不带 nonce,会被浏览器拦下。Cloudflare 的 Bot Fight Mode 可以照常开。反向代理和 CDN 也不要去掉页面的
Content-Security-Policy头,或者另加一条 CSP。详见部署文档的CDN 和内容安全策略。
环境变量、Node 下限、启动方式都没有变。
变化
- 站内通知(ADR-0052)
- 页头的铃铛显示未读数,点开是最近 5 条未读通知;用户中心有"通知"页,可以标为已读、删除、全部标为已读。
- 举报有了结果、有人提交新举报、管理员下架或删除了材质、管理员修改了账号、角色或 OAuth 应用,都会发站内通知;没配邮件的站点也有。
- 后台新增"通知"页,管理员可以给全部用户、普通用户、管理员或指定用户发通知,群发可以撤回。新权限
notifications.send给管理员和超级管理员。通知默认保留 365 天,在设置里改。 - 插件 API 随
@nextskin/plugin-sdk升到1.0.0-rc.4,新增能力notifications.send。用到这个能力的插件只能装在 0.2.0 及以后的版本上。
- 后台的失败任务页(ADR-0051):发送失败的邮件这类重试多次仍然失败的后台任务,超级管理员可以在
/admin/failed-jobs查看原因、重试或删除。邮件失败时显示 SMTP 的错误类别。后台概览会提示有多少失败的任务。 - 内容安全策略(ADR-0053):见上面的"安全修复"和"不兼容的部署变化"。
- 插件的 Markdown 页面里,代码块右上角有复制按钮。
- 修复:窄屏上,页头会盖住从它打开的菜单和弹出层。
已知的限制
- 全站 CSP 还没在真实网络上核对:三家验证码(Turnstile、hCaptcha、reCAPTCHA)和 Cloudflare 的 Web Analytics 自动注入在这条策略下是否正常。用验证码的站点升级后请试一次登录,遇到问题请反馈。
- 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
- 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。
NextSkin 0.1.2
插件可以按昵称搜索用户,修好了皮肤卡片的两处显示问题。部署步骤见部署文档。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.1.2(linux/amd64、linux/arm64)。
安全修复
无。
迁移
无。照部署文档换包或换镜像标签即可,库不用动;有问题也能直接换回 0.1.1。换回之后,已经装上、用到 ctx.users.searchByNickname 的插件照常运行,只是调用这个方法的地方会出错。
不兼容的部署变化
无。
变化
- 插件按昵称搜索用户(ADR-0050):插件 API 随
@nextskin/plugin-sdk升到1.0.0-rc.3,新增ctx.users.searchByNickname。申请了"读用户"能力的插件可以按昵称搜索用户(包含即可,英文字母不分大小写,每页最多 100 个),后台表格的搜索框不用再把自己的记录全部读出来再筛。按 SDK1.0.0-rc.3构建的插件只能装在 0.1.2 及以后的版本上。 - 修复:鼠标移上皮肤卡片时偶尔闪一下白。现在抬手的拼图解码完,才换掉静止的图。
- 修复:光标快速滑过卡片时,人物会左右滑动。
已知的限制
- 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
- 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。
NextSkin 0.1.1
皮肤改成 BS 皮肤库那样的 3D 出图,命令行也能管理插件。部署步骤见部署文档。
运行环境
Node ≥ 24,推荐 Node 26;Next 16.4.2。
镜像:ghcr.io/glasden/nextskin:0.1.1(linux/amd64、linux/arm64)。
安全修复
无。
迁移
无。照部署文档换包或换镜像标签即可,库不用动;有问题也能直接换回 0.1.0。
不兼容的部署变化
无。
变化
- 皮肤改成 3D 出图(ADR-0048):和 BS 皮肤库一样,人物斜着站、略微俯视,鼠标移上去会抬手。材质卡片、衣柜、角色卡、上传页并排显示背面和正面,领奖台和插图只显示正面。出图地址改成
/render/v2/…;升级后第一次启动时自动清掉旧版的出图缓存,之后按需重新出图,所以刚升级时第一次打开皮肤库会慢一些。 - 命令行管理插件(ADR-0049):
node nextskin.mjs plugin list、plugin install <插件包>、plugin enable|disable <id>、plugin uninstall <id>,服务运行时也能用,运行中的服务最多 5 秒后跟上。安装、升级和卸载先列出影响再确认,脚本里加--yes。 - 仪表盘的展台显示角色的皮肤,原来只画剪影。
- 没设头像的用户显示站点标志的图形,不再是空白。
- 修复:从 BS 导入的、边长超过 1024 的材质(例如大披风)出不了图,3D 预览也打不开。
- SQLite 下的互斥操作改用库文件旁边
nextskin.sqlite-locks/目录里的锁文件,命令行和服务两个进程之间也互斥。
已知的限制
- 部署文档里标了"未实测"的条目(宝塔和 1Panel 的反向代理、Windows 上的 Ctrl+C 和做成服务、Docker 里导入)还没在真实环境里核对过。
- 四个第三方登录插件返回的账号标识和邮箱验证状态,还没用真实账号逐家核对。