This commit is contained in:
dekun
2026-05-27 07:45:16 +08:00
parent 1f695799bf
commit 703fd912f8
4 changed files with 652 additions and 388 deletions
+105
View File
@@ -0,0 +1,105 @@
# 更新说明 — crypto_key
本文档记录各版本功能变更与升级注意事项。
---
## v2.0.0(当前)
### 新增
- **登录系统**:用户名 + 密码(单用户),凭据保存在 `.env`
- **数据加密**`data.json` 使用 Fernet(AES)加密存储,密钥为 `DATA_ENCRYPTION_KEY``.env`
- **凭证类型扩展**
- 交易所 APIBinance / OKX / Gate
- 网站账号(网址可点击)
- 邮箱账户(mailto / 网页登录链接)
- 企业微信机器人、钉钉机器人
- 微信(微信号 + 手机号)、QQ(QQ 号 + 手机号)
- **自定义类型**:系统设置中自行添加字段(如小红书、抖音、快手)
- **系统设置页**
- 修改登录用户名/密码(写入 `.env`
- 管理自定义类型(增删、搜索)
- **查询机制**:添加后不自动展示;按类型 + 关键词 +「确认」后显示
- **类型搜索**:添加/查询时支持输入过滤类型
- **旧数据迁移**:明文 `data.json` 首次加载自动转为加密格式
### 变更
- 监听地址由 `127.0.0.1` 改为 **`0.0.0.0`**,支持局域网访问
- API 主路径由 `/api/accounts` 扩展为 `/api/credentials`(保留旧路径兼容)
- 数据模型由固定 `username/api_key/api_secret` 改为 `type_id + fields` 结构
- 依赖增加:`python-dotenv``cryptography``werkzeug`
### 安全
- 浏览器 **不** 使用 localStorage/sessionStorage 存储明文
- Session Cookie 设置 `HttpOnly``SameSite=Lax`
- `.env``data.json``settings.json` 默认加入 `.gitignore`
### 升级注意(从 v1.x 升级)
1. 备份现有 `data.json`
```bash
cp data.json data.json.bak
```
2. 安装新依赖:
```bash
pip install -r requirements.txt
```
3. 配置 `.env`(可复制 `.env.example`,或首次运行自动生成):
- `SECRET_KEY`
- `AUTH_USERNAME` / `AUTH_PASSWORD`
- `DATA_ENCRYPTION_KEY`
4. 启动服务,旧明文数据将 **自动迁移** 为加密格式。
5. 使用默认或自定义账号登录,在「系统设置」中修改密码。
6. PM2 用户执行:`pm2 restart api-key-manager`
> **重要**:升级后切勿删除或修改 `.env` 中的 `DATA_ENCRYPTION_KEY`,否则无法解密已有数据。
---
## v1.2.0
### 新增
- 交易所下拉:Binance / OKX / Gate
- OKX 专用 Passphrase 字段
- 按交易所查询(下拉 + 确认)
- 添加成功后默认不展示列表
- 敏感字段打码显示(复制仍为明文)
### 变更
- 支持局域网访问(`0.0.0.0:5200`
---
## v1.1.0
### 新增
- PM2 守护进程支持(`ecosystem.config.cjs`
- Ubuntu `/opt/crypto_key` 部署脚本与文档
- 启动脚本:`pm2-start.sh` / `pm2-start.ps1`
---
## v1.0.0
### 初始功能
- Flask 后端 + 单页前端(黑色主题)
- 多账户 API 密钥管理:`username`、`api_key`、`api_secret`
- 本地 `data.json` 明文存储
- 每条记录三个复制按钮
- 端口 5200,无登录
---
## 版本规划(待定)
- [ ] 可选 HTTPS / 反向代理说明模板
- [ ] 凭证编辑(当前仅支持添加、删除)
- [ ] 导出/导入加密备份包
- [ ] 登录失败次数限制
+208 -197
View File
@@ -1,118 +1,131 @@
# 部署文档 — crypto_keyUbuntu /opt
> 仓库地址[https://git.bz121.com/dekun/crypto_key](https://git.bz121.com/dekun/crypto_key.git)
> 仓库:[https://git.bz121.com/dekun/crypto_key](https://git.bz121.com/dekun/crypto_key.git)
> 部署路径:**`/opt/crypto_key`**
> 进程守护:**PM2** · 服务端口:**5200**
币圈 API 密钥本地管理工具。数据保存在服务器本地 `data.json`,无登录,监听 `0.0.0.0:5200`(本机 + 局域网可访问)。
> 进程守护:**PM2** · 端口:**5200**
---
## 一、架构
## 一、架构说明
```
浏览器(本机局域网) → http://<服务器IP>:5200
PM2 (api-key-manager)
/opt/crypto_key/venv/python app.py
/opt/crypto_key/data.json
浏览器(本机 / 局域网)
→ http://<IP>:5200
PM2 (api-key-manager)
→ venv/python app.py (Flask)
→ .env (登录账号 + 加密主密钥)
→ data.json (加密后的凭证数据)
→ settings.json (自定义类型配置)
```
| 路径 | 说明 |
|------|------|
| `/opt/crypto_key` | 项目根目录(从 Git 克隆) |
| `/opt/crypto_key/data.json` | 账户数据(不纳入 Git |
| `/opt/crypto_key/logs/` | PM2 日志 |
| `/opt/crypto_key/venv/` | Python 虚拟环境 |
| 文件 | 说明 | 是否提交 Git |
|------|------|----------------|
| `.env` | `SECRET_KEY``AUTH_*``DATA_ENCRYPTION_KEY` | 否 |
| `data.json` | 加密凭证库 | 否 |
| `settings.json` | 自定义类型定义 | 否(建议备份) |
| `venv/` | Python 虚拟环境 | 否 |
---
## 二、服务器要求
## 二、环境要求
| 项目 | 要求 |
|------|------|
| 系统 | Ubuntu 20.04 / 22.04 / 24.04 LTS |
| 权限 | 具备 `sudo` 的普通用户或 root |
| Python | 3.8+`python3` |
| Node.js | 16+(用于 PM2 |
| 磁盘 | ≥ 100MB |
| 系统 | Ubuntu 20.04 / 22.04 / 24.04 LTSWindows 见附录) |
| Python | 3.8+ |
| Node.js | 16+PM2 守护时需要 |
| 权限 | `sudo`(一键安装脚本 |
| 磁盘 | ≥ 200MB |
### Python 依赖
```
flask>=3.0.0
python-dotenv>=1.0.0
cryptography>=42.0.0
werkzeug>=3.0.0
```
---
## 三、首次部署(推荐:一键脚本
## 三、首次部署(Ubuntu 推荐)
### 3.1 克隆仓库并执行安装
### 3.1 克隆仓库
```bash
# 若仓库尚未克隆,可先克隆再安装
sudo mkdir -p /opt
sudo git clone https://git.bz121.com/dekun/crypto_key.git /opt/crypto_key
cd /opt/crypto_key
```
### 3.2 配置环境变量
```bash
cp .env.example .env
```
编辑 `.env`(若留占位符,首次启动会自动生成合法密钥):
| 变量 | 说明 |
|------|------|
| `SECRET_KEY` | Flask 会话密钥,随机长字符串 |
| `AUTH_USERNAME` | 登录用户名 |
| `AUTH_PASSWORD` | 登录密码(保存为哈希) |
| `DATA_ENCRYPTION_KEY` | Fernet 密钥,用于加密 data.json |
生成 Fernet 密钥:
```bash
python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
```
### 3.3 一键安装并启动
```bash
sudo bash scripts/install-ubuntu.sh
```
脚本将自动完成:安装 `python3` / `git` / `Node.js` / `PM2` → 创建 `venv` → 安装 Flask → PM2 启动服务
脚本将:安装系统依赖 → 创建 `venv` `pip install` → PM2 启动 → `pm2 save`
### 3.2 验证
### 3.4 验证
```bash
pm2 status
curl -s http://127.0.0.1:5200/api/accounts
# api-key-manager 应为 online
curl -s http://127.0.0.1:5200/api/auth/status
# {"logged_in":false}
```
访问地址
浏览器访问:
| 场景 | 地址 |
|------|------|
| 服务器本机 | http://127.0.0.1:5200 |
| 局域网其他设备 | `http://<局域网IP>:5200` |
查看服务器局域网 IP
| 局域网 | `http://<服务器IP>:5200` |
```bash
hostname -I | awk '{print $1}'
# 或
ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v 127.0.0.1
```
示例:若 IP 为 `192.168.1.100`,手机/电脑在同一 WiFi 下访问 **http://192.168.1.100:5200**
首次登录默认可能是 `admin` / `admin123`,请登录后在 **系统设置** 中修改。
---
## 四、手动部署(逐步)
适合需要自定义权限或不用一键脚本的环境。
### 4.1 安装系统依赖
### 4.1 系统依赖
```bash
sudo apt update
sudo apt install -y python3 python3-venv python3-pip git curl
# Node.js + PM2
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo npm install -g pm2
```
### 4.2 克隆到 /opt
```bash
sudo mkdir -p /opt
sudo git clone https://git.bz121.com/dekun/crypto_key.git /opt/crypto_key
cd /opt/crypto_key
```
若目录已存在,更新代码:
```bash
cd /opt/crypto_key
sudo git pull
```
### 4.3 Python 环境
### 4.2 Python 环境
```bash
cd /opt/crypto_key
@@ -121,6 +134,10 @@ source venv/bin/activate
pip install -r requirements.txt
```
### 4.3 配置 .env
见第三节 3.2。
### 4.4 PM2 启动
```bash
@@ -128,168 +145,160 @@ cd /opt/crypto_key
mkdir -p logs
chmod +x pm2-start.sh pm2-stop.sh
./pm2-start.sh
# 或: pm2 start ecosystem.config.cjs && pm2 save
```
或:
```bash
pm2 start ecosystem.config.cjs
pm2 save
```
### 4.5 目录权限(可选)
若用普通用户运行 PM2,建议将项目目录属主改为该用户:
```bash
sudo chown -R $USER:$USER /opt/crypto_key
```
---
## 五、开机自启
### 4.5 开机自启
```bash
pm2 startup
# 终端会输出一行 sudo 命令,复制并执行
# 按提示执行输出的 sudo 命令
pm2 save
```
重启后检查:
### 4.6 目录权限(推荐)
```bash
pm2 status
# api-key-manager 应为 online
sudo chown -R $USER:$USER /opt/crypto_key
chmod 600 /opt/crypto_key/.env /opt/crypto_key/data.json 2>/dev/null || true
```
---
## 六、日常运维
### 查看状态与日志
```bash
pm2 status
pm2 logs api-key-manager
pm2 logs api-key-manager --lines 100
```
### 重启 / 停止
```bash
cd /opt/crypto_key
./pm2-start.sh # 启动
# 或
pm2 restart api-key-manager
./pm2-stop.sh # 停止
# 或
pm2 stop api-key-manager
```
### 更新代码
```bash
cd /opt/crypto_key
git pull
source venv/bin/activate
pip install -r requirements.txt
pm2 restart api-key-manager
```
### 备份数据
```bash
sudo cp /opt/crypto_key/data.json /opt/crypto_key/data.json.bak.$(date +%F)
```
`data.json` 含明文 API 密钥,请加密存储或限制文件权限:
```bash
chmod 600 /opt/crypto_key/data.json
```
---
## 七、PM2 配置说明
文件:`/opt/crypto_key/ecosystem.config.cjs`
| 配置 | 值 |
|------|-----|
| 进程名 | `api-key-manager` |
| 工作目录 | 项目根目录(自动) |
| Python | `venv/bin/python` |
| 自动重启 | 是 |
| 日志 | `logs/pm2-out.log` / `logs/pm2-error.log` |
---
## 八、项目文件结构
```
/opt/crypto_key/
├── app.py
├── index.html
├── requirements.txt
├── ecosystem.config.cjs
├── pm2-start.sh
├── pm2-stop.sh
├── scripts/
│ └── install-ubuntu.sh
├── logs/
├── venv/
├── data.json # 运行时生成,已 .gitignore
├── README.md
└── DEPLOY.md
```
---
## 九、故障排查
| 现象 | 处理 |
|------|------|
| `pm2 status` 为 errored | `pm2 logs api-key-manager --err`;确认 `venv` 已创建 |
| 端口 5200 占用 | `sudo ss -tlnp \| grep 5200`;修改 `app.py``port``pm2 restart` |
| `git clone` 需认证 | 配置 SSH Key 或 `git config credential.helper store` |
| 局域网无法访问 | 检查防火墙是否放行 5200;`sudo ufw allow 5200/tcp` |
| 无法访问页面 | `pm2 logs api-key-manager`;确认 `ss -tlnp \| grep 5200` 显示 `0.0.0.0:5200` |
| 更新后异常 | `pip install -r requirements.txt``pm2 restart api-key-manager` |
---
## 十、安全说明
- 服务绑定 **0.0.0.0:5200**,同一局域网内设备均可访问。
- **无登录鉴权**,切勿将端口映射到公网或暴露于不可信网络。
- `data.json` 已加入 `.gitignore`,不会推送到仓库。
- 建议:仅在家/办公室可信局域网使用;云服务器请配合防火墙限制来源 IP。
### 防火墙(Ubuntu
```bash
# 仅允许局域网网段访问(示例 192.168.0.0/16
sudo ufw allow from 192.168.0.0/16 to any port 5200 proto tcp
# 或临时开放(测试用,范围更大)
sudo ufw allow 5200/tcp
```
---
## 十一、Windows 本地开发(附录)
## 五、Windows 本地部署
```powershell
cd C:\path\to\crypto_key
python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .env
# 编辑 .env 或首次运行 python app.py 自动生成
python app.py
```
PM2 守护(可选):
```powershell
npm install -g pm2
.\pm2-start.ps1
```
访问:http://127.0.0.1:5200
---
## 六、PM2 运维
| 命令 | 说明 |
|------|------|
| `pm2 status` | 查看状态 |
| `pm2 logs api-key-manager` | 查看日志 |
| `pm2 restart api-key-manager` | 重启 |
| `pm2 stop api-key-manager` | 停止 |
| `./pm2-start.sh` | 启动(Linux |
| `.\pm2-start.ps1` | 启动(Windows |
配置文件:`ecosystem.config.cjs`(进程名 `api-key-manager`Python 使用 `venv` 内解释器)。
---
## 七、更新升级
```bash
cd /opt/crypto_key
cp data.json data.json.bak.$(date +%F)
cp .env .env.bak.$(date +%F)
git pull
source venv/bin/activate
pip install -r requirements.txt
pm2 restart api-key-manager
```
升级说明与破坏性变更见 [CHANGELOG.md](./CHANGELOG.md)。
---
## 八、备份与恢复
### 8.1 必须备份的文件
```bash
sudo cp /opt/crypto_key/.env /opt/crypto_key/.env.bak
sudo cp /opt/crypto_key/data.json /opt/crypto_key/data.json.bak
sudo cp /opt/crypto_key/settings.json /opt/crypto_key/settings.json.bak 2>/dev/null || true
```
### 8.2 恢复
1.`.env``data.json``settings.json` 放回项目根目录。
2. **`.env` 中的 `DATA_ENCRYPTION_KEY` 必须与备份时一致**,否则无法解密。
3. `pm2 restart api-key-manager`
### 8.3 迁移到新服务器
```bash
# 旧服务器打包
tar czvf crypto_key_backup.tar.gz .env data.json settings.json
# 新服务器克隆代码后解压到 /opt/crypto_key/
tar xzvf crypto_key_backup.tar.gz -C /opt/crypto_key/
# 再执行 venv 安装与 PM2 启动
```
---
## 九、防火墙
服务监听 **0.0.0.0:5200**,局域网可访问。建议限制来源:
```bash
# 仅允许局域网段(示例)
sudo ufw allow from 192.168.0.0/16 to any port 5200 proto tcp
# 或测试时临时开放
sudo ufw allow 5200/tcp
```
**切勿**将 5200 端口直接暴露到公网;务必启用登录并修改默认密码。
---
## 十、故障排查
| 现象 | 处理 |
|------|------|
| PM2 `errored` | `pm2 logs api-key-manager --err`;检查 `venv` 与依赖 |
| 无法登录 | 检查 `.env``AUTH_*`;删除错误密码哈希后重启,用自动生成默认账号 |
| 数据无法解密 | `DATA_ENCRYPTION_KEY` 是否与备份一致 |
| 局域网无法访问 | `ss -tlnp \| grep 5200` 应显示 `0.0.0.0:5200`;检查 ufw |
| 401 未登录 | 重新登录;检查 `SECRET_KEY` 是否被改动(会导致 Session 失效) |
| 旧明文 data.json | 启动后自动迁移;迁移前务必备份 |
---
## 十一、目录结构
```
/opt/crypto_key/
├── app.py # Flask 入口
├── storage.py # 加密存储与迁移
├── env_config.py # .env 读写
├── index.html # 前端(登录 + 主界面 + 设置)
├── requirements.txt
├── ecosystem.config.cjs # PM2
├── .env.example
├── settings.json # 自定义类型(运行时)
├── scripts/
│ └── install-ubuntu.sh
├── pm2-start.sh / pm2-stop.sh
├── pm2-start.ps1 / pm2-stop.ps1 / pm2-restart.ps1
├── logs/
├── venv/
├── README.md
├── USAGE.md # 使用说明
├── DEPLOY.md # 本文档
└── CHANGELOG.md # 更新说明
```
---
@@ -298,10 +307,12 @@ npm install -g pm2
```bash
# 首次部署
sudo git clone https://git.bz121.com/dekun/crypto_key.git /opt/crypto_key
cd /opt/crypto_key && sudo bash scripts/install-ubuntu.sh
cd /opt/crypto_key && cp .env.example .env && sudo bash scripts/install-ubuntu.sh
# 日常
pm2 status
pm2 restart api-key-manager
cd /opt/crypto_key && git pull && pm2 restart api-key-manager
pm2 logs api-key-manager --lines 50
```
使用细节请参阅 **[USAGE.md](./USAGE.md)**。
+45 -81
View File
@@ -1,130 +1,94 @@
# crypto_key — 凭证保险库
本地 Web 工具,管理交易所 API、网站、邮箱、机器人、微信/QQ 及自定义类型凭证。数据 **AES 加密**`data.json`,登录凭据与加密主密钥在 `.env`
本地 / 局域网 Web 工具,集中管理交易所 API、网站、邮箱、机器人、微信/QQ 及自定义类型凭证。数据 **AES 加密**储,**用户名密码登录**,浏览器不缓存明文
| 项目 | 说明 |
|------|------|
| 仓库 | [git.bz121.com/dekun/crypto_key](https://git.bz121.com/dekun/crypto_key.git) |
| Ubuntu 部署路径 | `/opt/crypto_key` |
| 服务端口 | `5200` |
| 进程守护 | PM2 |
| 端口 | `5200``0.0.0.0`,局域网可访问) |
| Ubuntu 部署 | `/opt/crypto_key` + PM2 |
---
## 功能
## 文档导航
- **登录**:用户名 + 密码(`.env`),浏览器不缓存明文
- **内置类型**:交易所 API、网站、邮箱、企业微信/钉钉机器人、微信、QQ
- **自定义类型**:系统设置中添加(如小红书、抖音、快手)
- **查询**:类型搜索 + 关键词 + 确认后显示;网站/邮箱可点击跳转
- **旧 data.json**:首次启动自动迁移为加密格式
- 黑色专业界面,列表展示 + 每项 3 个复制按钮(**复制始终为明文**)
- 可选界面打码显示,不影响复制内容
- 数据持久化至 `data.json`
| 文档 | 说明 |
|------|------|
| **[USAGE.md](./USAGE.md)** | 使用说明(登录、添加、查询、系统设置) |
| **[DEPLOY.md](./DEPLOY.md)** | 部署文档(Ubuntu/Windows、PM2、备份、排错) |
| **[CHANGELOG.md](./CHANGELOG.md)** | 更新说明与版本升级注意 |
---
## 首次配置
## 快速开始
```bash
cp .env.example .env
# 编辑 .envSECRET_KEY、AUTH_USERNAME、AUTH_PASSWORD、DATA_ENCRYPTION_KEY
git clone https://git.bz121.com/dekun/crypto_key.git
cd crypto_key
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env # 可选,首次运行也会自动生成
python app.py
```
默认首次运行会自动生成 `.env`(用户名 `admin` / 密码 `admin123`,请立即在「系统设置」中修改)。
浏览器打开:
## Ubuntu 服务器部署(/opt
- 本机:http://127.0.0.1:5200
- 局域网:`http://<本机IP>:5200`
完整步骤见 **[DEPLOY.md](./DEPLOY.md)**。
默认账号(请尽快在系统设置中修改):`admin` / `admin123`
---
## 主要功能
- 登录鉴权(凭据在 `.env`Session 在服务端)
- 内置类型:交易所、网站、邮箱、企微/钉钉机器人、微信、QQ
- 自定义类型:系统设置中添加(小红书、抖音等)
- 查询后显示 + 类型/关键词搜索 + 敏感字段打码(复制为明文)
- 旧版明文 `data.json` 自动迁移加密
---
## Ubuntu 一键部署
```bash
sudo git clone https://git.bz121.com/dekun/crypto_key.git /opt/crypto_key
cd /opt/crypto_key
cp .env.example .env # 并编辑
cp .env.example .env
sudo bash scripts/install-ubuntu.sh
```
访问:
- 本机:**http://127.0.0.1:5200**
- 局域网:**http://<服务器局域网IP>:5200**(如 `http://192.168.1.100:5200`
查看本机 IP`hostname -I``ip addr`
```bash
pm2 status
pm2 logs api-key-manager
```
详见 [DEPLOY.md](./DEPLOY.md)。
---
## 本地开发
```bash
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.py
```
浏览器打开 http://127.0.0.1:5200(局域网内其他设备用 `http://<本机IP>:5200`
PM2 守护:`./pm2-start.sh`Linux)或 `.\pm2-start.ps1`Windows
---
## 文件说明
## 项目文件
| 文件 | 说明 |
|------|------|
| `app.py` | Flask 后端 |
| `index.html` | 前端页面 |
| `storage.py` | 加密存储与迁移 |
| `env_config.py` | `.env` 管理 |
| `index.html` | 前端单页 |
| `ecosystem.config.cjs` | PM2 配置 |
| `scripts/install-ubuntu.sh` | Ubuntu 一键安装 |
| `DEPLOY.md` | 完整部署文档 |
---
## 数据格式
```json
{
"id": "uuid",
"exchange": "binance",
"username": "账户名称",
"api_key": "API Key",
"api_secret": "API Secret",
"password": "仅 OKX 需要"
}
```
---
## API
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/` | 前端页面 |
| GET | `/api/accounts` | 获取全部账户 |
| GET | `/api/accounts?exchange=binance` | 按交易所筛选 |
| POST | `/api/accounts` | 新增账户 |
| DELETE | `/api/accounts/<id>` | 删除账户 |
| `scripts/install-ubuntu.sh` | Ubuntu 安装脚本 |
---
## 安全提示
- 无认证,监听 `0.0.0.0`(局域网可访问),请勿暴露到公网;建议仅在可信局域网使用
- `data.json` 为明文密钥,已 `.gitignore`,请定期备份
- 仅在可信局域网使用,勿将 5200 映射到公网
- 定期备份 `.env``data.json`(密钥丢失将无法解密)
- 勿将 `.env``data.json` 提交到 Git
---
## 依赖
```
flask>=3.0.0,<4.0.0
flask, python-dotenv, cryptography, werkzeug
```
服务器另需:Python 3.8+、Node.jsPM2
服务器 PM2 部署另需 Node.js 16+。
+184
View File
@@ -0,0 +1,184 @@
# 使用说明 — crypto_key 凭证保险库
本文档介绍日常使用方法。部署与安装请参阅 [DEPLOY.md](./DEPLOY.md)。
---
## 1. 产品简介
**crypto_key** 是一款在浏览器中使用的本地/局域网凭证管理工具,用于集中保存:
- 交易所 APIBinance、OKX、Gate
- 网站账号(可点击打开网址)
- 邮箱账户(可点击发邮件或打开网页登录)
- 企业微信 / 钉钉机器人 Webhook
- 微信、QQ(微信号/QQ号 + 手机号)
- 自定义类型(如小红书、抖音、快手等,在系统设置中自行添加)
所有敏感数据在服务器上以 **加密形式** 写入 `data.json`;访问前需 **登录**。浏览器 **不会** 把密码写入 localStorage。
| 项目 | 说明 |
|------|------|
| 默认端口 | 5200 |
| 访问方式 | 本机 `http://127.0.0.1:5200` 或局域网 `http://<IP>:5200` |
---
## 2. 首次登录
1. 启动服务后,在浏览器打开上述地址。
2. 输入 **用户名****密码**
3. 首次部署时,若未配置 `.env`,系统可能自动生成默认账号:
- 用户名:`admin`
- 密码:`admin123`
4. **登录后请立即进入「系统设置」修改用户名和密码。**
> 登录状态保存在服务端 SessionHttpOnly Cookie),关闭浏览器后需重新登录(约 30 分钟无操作也会失效)。
---
## 3. 界面总览
登录成功后主界面包含三块:
| 区域 | 作用 |
|------|------|
| **添加凭证** | 选择类型、填写字段、保存 |
| **查询凭证** | 按类型/关键词筛选,点击「确认」后展示列表 |
| **凭证列表** | 展示查询结果;支持打码显示与复制 |
右上角:
- **系统设置**:修改登录账号、管理自定义类型
- **退出**:清除登录状态
---
## 4. 添加凭证
### 4.1 选择类型
1. 在「添加凭证」区域的 **凭证类型** 输入框中输入关键字(如「交易所」「邮箱」「小红书」)。
2. 从下拉列表中点击需要的类型。
3. 下方会显示「已选:xxx」,并出现对应表单。
### 4.2 各类型必填说明
| 类型 | 主要字段 |
|------|----------|
| 交易所 API | 交易所、账户名称、API Key、API Secret**OKX 额外必填 Passphrase 密码** |
| 网站账号 | 名称、网址、用户名、密码 |
| 邮箱账户 | 名称、邮箱地址、密码;可选网页登录地址 |
| 企业微信机器人 | 名称、Webhook |
| 钉钉机器人 | 名称、Webhook |
| 微信 | 名称、微信号、手机号 |
| QQ | 名称、QQ 号、手机号 |
| 自定义类型 | 按你在系统设置中定义的字段填写 |
### 4.3 提交
1. 填写完成后点击 **「添加」**。
2. 添加成功后会提示:**不会自动显示在列表中**。
3. 需要到「查询凭证」区域选择类型并点击 **「确认」** 才能查看。
---
## 5. 查询凭证
### 5.1 基本查询
1. 在「查询凭证」中选择或搜索 **类型**(下拉框支持输入过滤)。
2. (可选)在 **关键词** 中输入名称、账号、邮箱等片段。
3. 若类型为 **交易所 API**,可再选 Binance / OKX / Gate。
4. 点击右侧 **「确认」**。
5. 列表显示该条件下所有记录。
### 5.2 列表操作
| 操作 | 说明 |
|------|------|
| **隐藏敏感字段** | 勾选后界面以圆点显示密码、Key 等;**复制按钮仍为真实明文** |
| **复制** | 每条字段右侧「复制」按钮 |
| **链接** | 网站「网址」、邮箱「邮箱地址」、邮箱「网页登录地址」可点击跳转 |
| **删除** | 卡片右上角「删除」,需确认 |
### 5.3 未查询时
默认显示:「选择类型并点击「确认」查看」——不会展示任何凭证内容。
---
## 6. 系统设置
点击右上角 **「系统设置」** 进入。
### 6.1 修改登录账号(写入 .env)
1. 填写 **新用户名**、**新密码**(至少 6 位)。
2. 填写 **当前密码** 以确认身份。
3. 点击 **「保存登录设置」**。
4. 修改后请使用新账号重新登录。
> 登录凭据保存在服务器 `.env` 文件中,不会出现在浏览器缓存。
### 6.2 自定义凭证类型
适用于小红书、抖音、快手等未内置的类型。
**新增类型:**
1. **类型 ID**:英文小写+下划线,如 `xiaohongshu`(创建后不可改)。
2. **显示名称**:如 `小红书`
3. **字段列表**:点击「+ 添加字段」
- `key`:英文标识,如 `account`
- `显示名`:如 `账号`
- `类型`:文本 / 敏感 / 链接 / 邮箱 / 手机
- **必填**:是否必填
4. 点击 **「保存自定义类型」**。
**搜索 / 删除:**
- 顶部搜索框可过滤已有自定义类型。
- 「删除」会同时删除该类型下的 **所有凭证记录**
---
## 7. 安全与使用建议
1. **仅在可信局域网使用**,不要将 5200 端口映射到公网。
2. **定期备份** `data.json``.env`(见 [DEPLOY.md](./DEPLOY.md) 备份章节)。
3. **不要**`.env``data.json` 提交到 Git 或发给他人。
4. 若更换服务器,需同时拷贝 `.env``data.json`,否则无法解密数据。
5. 复制敏感内容后,尽快粘贴使用,避免长时间留在系统剪贴板。
---
## 8. 常见问题
**Q:登录提示用户名或密码错误?**
A:检查 `.env``AUTH_USERNAME` / `AUTH_PASSWORD`;或使用部署时的默认 `admin` / `admin123` 后在设置中修改。
**Q:添加成功但查询不到?**
A:确认查询的类型与添加时一致;交易所需选对 Binance/OKX/Gate。
**Q:局域网手机打不开?**
A:确认手机与服务器同一 WiFi;防火墙放行 5200;使用 `http://服务器IP:5200` 而非 127.0.0.1。
**Q:复制按钮无效?**
A:使用 `http://` 访问(非 `file://`);浏览器需允许剪贴板权限。
**Q:更新代码后无法登录或数据打不开?**
A:执行 `pip install -r requirements.txt` 并重启 PM2;确认 `.env``DATA_ENCRYPTION_KEY` 未变。
**Q:旧版明文 data.json 还能用吗?**
A:可以。服务启动后首次读取会自动迁移为加密格式,建议迁移前备份原文件。
---
## 9. 相关文档
| 文档 | 内容 |
|------|------|
| [README.md](./README.md) | 项目概览 |
| [DEPLOY.md](./DEPLOY.md) | 安装与运维 |
| [CHANGELOG.md](./CHANGELOG.md) | 版本更新记录 |