系统设置迁入后台:站点地址 / OAuth 凭据 / R2 存储 / 管理员账号,保存即生效无需重启

- 生效规则统一为「后台填了用后台的,没填回落环境变量」,老部署不改 env 照常跑
- config.Resolver:短缓存解析有效配置,存储后端按配置签名热重建;后台保存主动失效
- 秘密项(client secret / bot token / R2 密钥 / 管理员密码)接口永不回显明文,
  只报「是否已配置、来自哪里」;留空保存 = 保持现值
- 管理员密码 bcrypt 入库,DB 哈希优先、显式设置的 env 密码作解锁后路;
  后台改过密码后 admin/admin 开发模式立即失效
- 设置页新增「登录与存储」标签,基础信息加站点地址;秘密项带来源提示
- 监听地址 / 数据库 / 目录 / ONE_SECRET / Passkey 仍留环境变量(启动期依赖)
This commit is contained in:
Sakurasan committed 2026-10-01 12:14:10 +08:00
1 parent bf3ce934dd
commit e68400b389
23 files changed
+957 -126

No files matched your search

+24 -6
View File
@@ -35,19 +35,36 @@ ONE_ADMIN_USER=admin ONE_ADMIN_PASSWORD=换一个 make start
登录态是服务端签发的 httpOnly cookie(HMAC-SHA256,7 天有效),同时支持 `Authorization: Bearer <token>`,方便用 curl / 脚本写文章。
## 环境变量
## 设置:后台优先,环境变量兜底
站点地址、评论区第三方登录(GitHub / Google / Telegram)凭据、R2 对象存储、
管理员用户名与密码,都在后台 **设置 → 登录与存储**(站点地址在 **基础信息**)里配置,
保存后立即生效,无需重启。这些值存在 `settings` 表里,生效规则是
「后台填了用后台的,没填回落到环境变量」——老部署不改 env 也能照常跑。
秘密项(client secret、Bot token、R2 密钥、管理员密码)在后台只显示
「是否已配置、来自哪里」,永不回显明文;留空保存 = 保持现值。
管理员密码在后台以 bcrypt 哈希存储;显式设置过的 `ONE_ADMIN_PASSWORD`
保留作解锁后路(env 和数据库在同一台机器上,能读 env 的人本来就能改库)。
环境变量只剩启动期必需项:
| 变量 | 默认 | 说明 |
| --- | --- | --- |
| `ONE_ADDR` | `:8080` | 监听地址 |
| `ONE_DB_DRIVER` | `sqlite` | `sqlite` 或 `postgres` |
| `ONE_DB_DSN` | `./data/one.db` | 数据库连接串(Postgres 示例:`postgres://user:pass@localhost/one?sslmode=disable`) |
| `ONE_ADMIN_USER` | `admin` | 后台用户名 |
| `ONE_ADMIN_PASSWORD` | `admin` | 后台密码 |
| `ONE_SECRET` | 随机生成 | 会话签名密钥;不设的话重启后登录态失效 |
| `ONE_SITE_URL` | `http://localhost:8080` | RSS 里的站点地址,部署时务必改成真实域名 |
| `ONE_WEB_DIST` | `./frontend/dist` | 前端构建产物目录 |
| `ONE_DATA_DIR` | `./data` | SQLite 数据目录 |
| `ONE_ADMIN_USER` | `admin` | 初始后台用户名(后台可改) |
| `ONE_ADMIN_PASSWORD` | `admin` | 初始后台密码(后台可改;不设即 admin/admin 的开发模式) |
| `ONE_SITE_URL` | `http://localhost:8080` | 站点地址兜底值(后台可改) |
| `ONE_GITHUB_CLIENT_ID` / `_SECRET` | — | GitHub 登录兜底值(后台可改) |
| `ONE_GOOGLE_CLIENT_ID` / `_SECRET` | — | Google 登录兜底值(后台可改) |
| `ONE_TELEGRAM_BOT` / `_TOKEN` | — | Telegram 登录兜底值(后台可改) |
| `S3Api` / `Bucket` / `AccessKey` / `SecretAccessKey` / `PublicURL` | — | R2 存储兜底值(后台可改) |
| `ONE_WEBAUTHN_RP_ID` / `_ORIGINS` | — | Passkey 登录;显式配 origins 才启用 |
## 界面:classic / vivid
@@ -177,12 +194,13 @@ PUT /api/admin/settings
```bash
make build # 产出 ./one-server,前端已打进 web/dist
ONE_ADDR=:8080 \
ONE_SITE_URL=https://your.domain \
ONE_DB_DRIVER=postgres \
ONE_DB_DSN="postgres://user:pass@127.0.0.1/one?sslmode=disable" \
ONE_SECRET=一串随机长字符串 \
ONE_ADMIN_PASSWORD=强密码 \
./one-server
# 首次启动后登录后台,把站点地址、第三方登录、对象存储在「设置」页里配好,
# 之后改这些就不再需要碰环境变量或重启。
```
要点:
@@ -200,7 +218,7 @@ After=network.target
[Service]
WorkingDirectory=/opt/one
Environment=ONE_ADDR=:8080 ONE_SITE_URL=https://your.domain ONE_SECRET=xxx ONE_ADMIN_PASSWORD=xxx
Environment=ONE_ADDR=:8080 ONE_SECRET=xxx ONE_ADMIN_PASSWORD=xxx
ExecStart=/opt/one/one-server
Restart=always