Skip to content

yushu200403/APIKEY-Manager

Repository files navigation

APIKEY Manager

APIKEY Manager 是一个本地运行的 API Key 管理器。它主要用来保存、管理和测试大模型 API Key,也可以保存搜索服务、机器人、平台应用这类通用密钥和配置项。

数据默认只保存在你的电脑里,并使用 SQLCipher 加密。启用 Backblaze B2 异地备份后,应用会上传加密数据库副本;不会连接本项目之外的统计或分析服务。

本项目使用 GPT 5.5 编写,作者可以保证本项目的可用性。

功能

  • 管理多个大模型供应商,支持记录 API 端点和官网地址。
  • 支持 OpenAI Chat CompletionsOpenAI ResponseAnthropic Messages 三类接口格式。
  • 每个供应商可以保存多个 API Key,并指定其中一个作为测试密钥。
  • 每个供应商单独设置测试模型;测试 Prompt 在设置页统一管理。
  • 测试密钥时显示进行中状态,测试结果通过详情弹窗查看,包含测试时间、输出内容和可选推理内容。
  • 刷新并缓存模型列表,支持模型 ID 复制和前端搜索。
  • 大模型供应商、通用密钥类别和密码条目都支持自定义分组及组内排序。
  • 通用密钥按类别管理,一个类别下可以保存多个键值对。
  • 密码管理器只负责保存密码,不限制密码长度、字符或格式,并支持可选的 2FA 关联。
  • 2FA 提供独立验证码查看页,支持二维码截图识别和手动输入 Base32 密钥。
  • 支持配置 Backblaze B2 异地备份,每次启动检查当天备份状态,也可以手动备份和恢复。
  • 支持 JSON 导入;导出支持 JSON、Markdown 和加密数据库文件。
  • 界面使用本地图标字体,复制、编辑、删除等常用按钮不依赖外部网络加载图标。
  • 删除等危险操作使用应用内确认浮窗,不调用浏览器原生弹窗。
  • 右上角显示后端连接状态,断开连接时会给出明确提示。
  • 时间默认按 UTC+8 展示。

画廊

登录入口

大模型管理页

通用密钥管理页

快速开始

直接运行当前目录下已经构建好的程序:

APIKEY-Manager.exe

启动后会在本机开启服务,并自动打开默认浏览器:

http://127.0.0.1:5157

第一次打开时需要创建主密码。主密码不会明文保存,也无法找回;忘记主密码就无法打开原来的数据库。

Docker Compose 部署

服务器安装 Docker Compose 后,在项目目录执行一条命令即可构建并启动:

docker compose up -d --build

启动后访问 http://服务器IP:5157。Compose 默认将宿主机项目目录下的 ./data 绑定到容器的 /data,数据库实际保存为 ./data/apikeys.db,重建或删除容器不会删除该文件。

如果需要把数据库放到指定硬盘目录,可以在启动时指定宿主机路径:

APIKEY_MANAGER_DATA_PATH=/srv/apikey-manager-data docker compose up -d --build

也可以通过 APIKEY_MANAGER_PORT 修改对外端口,容器内部端口保持不变。停止服务使用 docker compose down,不要删除宿主机数据目录。

基本用法

大模型密钥

  1. 添加供应商,填写名称、API 端点、官网地址和接口格式。
  2. 添加一个或多个 API Key。
  3. 选择一个 API Key 作为测试密钥。
  4. 填写该供应商的测试模型。
  5. 刷新模型列表,或测试指定密钥。

模型列表会缓存在本地,可以直接搜索和复制模型 ID。测试完成后,可点击状态旁的信息按钮查看测试时间、响应输出和模型推理内容。

通用密钥

  1. 先创建类别,比如 TavilyQQ机器人支付平台
  2. 在类别下添加键名、键值和描述。
  3. 使用时点击复制即可。

密码管理器

  1. 创建密码分组,或直接使用“默认分组”。
  2. 保存条目名称、用户名、密码、网站地址和备注。
  3. 密码不会进行强度评估,也不会因为格式特殊而被拒绝。
  4. 如需关联 2FA,先在 2FA 页面添加密钥,再在密码条目中选择对应的 2FA。

2FA 验证码

在 2FA 页面上传二维码截图,或粘贴 otpauth:// URI、Base32 密钥。验证码在本地生成;除启用 Backblaze 时上传 SQLCipher 加密数据库副本外,不会向外部服务发送明文 2FA 密钥。

云端异地备份

在设置页的“云端异地备份”中配置 Backblaze B2。备份文件是已经由 SQLCipher 加密的数据库文件;自动备份每天最多生成一份,手动备份受冷却时间限制。恢复前会验证备份文件,并保留当前数据库安全副本。

数据导入导出

在设置页打开数据导入导出弹窗:

  • 导入仅支持本应用导出的 JSON,可从文件或剪贴板导入;导入会替换当前数据库内容。
  • JSON 和 Markdown 导出默认使用精简模式,不包含测试配置、测试记录、模型缓存和推理内容。
  • 勾选“导出测试相关数据”后,会导出完整测试配置和记录。
  • JSON、Markdown 和数据库文件都可能包含真实密钥,请只保存到可信位置。
  • 下载数据库会保存原始 apikeys.db 文件,该文件仍受 SQLCipher 主密码保护。

数据保存位置

默认数据库文件为 apikeys.db

  • Windows:%APPDATA%\APIKEY-Manager\apikeys.db
  • macOS:~/Library/Application Support/APIKEY-Manager/apikeys.db
  • Linux:~/.apikey-manager/apikeys.db

高级用户也可以通过环境变量指定数据目录:

$env:APIKEY_MANAGER_DATA_DIR="C:\path\to\data"
.\APIKEY-Manager.exe

高级用法:从源代码启动

如果你想改代码或自己调试,可以从源码启动:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python run.py

源码方式启动后同样会自动打开:

http://127.0.0.1:5157

高级用法:重新打包 exe

项目提供了 PyInstaller 打包脚本,会使用根目录下的 favicon.ico 作为图标,并把 app/static 下的样式、脚本和本地图标字体一起打包。

先安装 PyInstaller:

python -m pip install pyinstaller

开始打包:

python build_pyinstaller.py

打包完成后,APIKEY-Manager.exe 会移动到项目根目录,dist/build/build-spec/ 等临时目录会自动删除。

打包前脚本会检查 app/static/fonts/fa-solid-900.woff2 是否存在;缺少该文件时会停止打包,避免生成缺图标的程序。

如果想隐藏控制台窗口:

python build_pyinstaller.py --windowed

注意:程序本质上仍是本地 Web 应用。启动 exe 后会在本机启动服务,并自动打开浏览器访问 http://127.0.0.1:5157。如果想看到彩色控制台说明和停止提示,不要使用 --windowed

开发命令

python run.py
python -m unittest discover -s tests
python -m py_compile build_pyinstaller.py
python build_pyinstaller.py

前端脚本语法检查:

node --check app\static\app.js

依赖

  • Flask
  • requests
  • SQLCipher Python 绑定:sqlcipher3
  • 本地图标字体:app/static/fonts/fa-solid-900.woff2

如果 sqlcipher3 安装失败,通常是当前平台缺少可用 wheel,或缺少 SQLCipher / C++ 编译环境。

安全提醒

  • 主密码不会明文保存,忘记后无法恢复数据库内容。
  • 数据库文件使用 SQLCipher 加密。
  • API Key 只会在你主动测试密钥或刷新模型列表时发送到你配置的 API 地址。
  • 复制到剪贴板的内容可能被其他应用读取,使用后可以手动清空剪贴板。
  • 导出的 JSON、Markdown 和数据库文件可能包含真实密钥,分享前请先确认内容。
  • 可以在设置页配置 Backblaze B2 异地备份;自动备份每天最多一次,手动备份有冷却时间限制。仍建议定期导出或保存额外的数据库副本。

About

完全本地、加密存储的简易APIKEY管理系统,方便地管理多提供商的KEY凭证

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages