自动提交token

This commit is contained in:
2026-03-11 23:23:40 +08:00
commit 68a169980d
4 changed files with 785 additions and 0 deletions

152
README.md Normal file
View File

@@ -0,0 +1,152 @@
# uploader
一个常驻扫描器:定期扫描目录中的 `.json` 文件,并以 `multipart/form-data` 方式上传到一个或多个 HTTP 接口;上传成功/跳过/失败会写入本地 SQLite 状态库,避免重复上传。
## 运行环境
- Python 3.9+(建议 3.10/3.11
- 依赖见 `requirements.txt`
## 快速开始(本地)
```bash
cd /opt/uploader
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
# 运行(示例)
./.venv/bin/python uploader.py --dir /opt/uploader --interval 360
```
## 配置(环境变量 / .env
脚本会在启动时尝试加载当前工作目录下的 `.env`(需要安装了 `python-dotenv`)。
建议在 `/opt/uploader/.env` 配置:
```ini
# 鉴权 token必填
UPLOAD_TOKEN=your_token_here
# 上传接口列表(推荐用 ; 或 , 分隔;不要用 ':' 分隔)
# 示例使用本机地址;请按你的实际服务地址修改
UPLOAD_ENDPOINTS=http://127.0.0.1:8317/v0/management/auth-files;http://127.0.0.1:46344/v0/management/auth-files
# JSON 子目录(可选):从这些目录递归扫描 *.json
# 注意:该变量支持 os.pathsep 分隔Linux 为 ':'Windows 为 ';'),也支持逗号
UPLOAD_JSON_SUBDIR=/usr/local/openai_register/tokens
# 或多个UPLOAD_JSON_SUBDIRS=/path/a:/path/b
# 默认 endpoint当未设置 UPLOAD_ENDPOINTS 且未传 --endpoint 时使用)
UPLOAD_ENDPOINT=http://127.0.0.1:8317/v0/management/auth-files
# 默认 SQLite DB 文件名(当未传 --db 时使用)
UPLOAD_DB=upload_state.sqlite3
```
### 环境变量说明
- `UPLOAD_TOKEN`:上传鉴权 token支持 `Bearer xxx` 或直接 token
- `UPLOAD_ENDPOINTS`:多个上传接口 URL`;``,` 分隔(不要用 `:` 分隔,因为 URL 自己包含 `http://` 和端口)
- `UPLOAD_ENDPOINT`:默认接口 URL兜底用
- `UPLOAD_DB`:默认 SQLite 状态库文件名(兜底用)
- `UPLOAD_JSON_SUBDIRS` / `UPLOAD_JSON_SUBDIR`:扫描子目录(可选;不设置则扫描 `--dir` 本身)
## 命令行参数
```bash
./.venv/bin/python uploader.py \
--dir /opt/uploader \
--interval 360 \
--endpoint http://XXX:8317/v0/management/auth-files \
--db upload_state.sqlite3 \
--timeout 60 \
--once
```
常用参数:
- `--dir`:工作目录
- `--interval`:扫描间隔(秒)
- `--endpoint`:当未配置 `UPLOAD_ENDPOINTS` 时使用的单个 endpoint
- `--db`SQLite 文件名/路径
- `--once`:只跑一轮就退出
## Linux 部署systemd 推荐)
### 1) 放置项目
```bash
mkdir -p /opt/uploader
# 将 uploader.py、requirements.txt、.env 放到 /opt/uploader
```
### 2) 安装依赖
```bash
cd /opt/uploader
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt
```
### 3) 创建 systemd 服务
创建 `/etc/systemd/system/uploader.service`
```ini
[Unit]
Description=uploader daemon
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/uploader
ExecStart=/opt/uploader/.venv/bin/python /opt/uploader/uploader.py --dir /opt/uploader --interval 360
Restart=always
RestartSec=3
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
```
启用并启动:
```bash
systemctl daemon-reload
systemctl enable --now uploader
systemctl status uploader
```
## 实时看日志
### 方式 A直接看 systemd 日志(推荐)
```bash
journalctl -u uploader -f -o cat
```
### 方式 B输出到文件再 tail
`uploader.service``[Service]` 增加:
```ini
StandardOutput=append:/var/log/uploader/uploader.log
StandardError=append:/var/log/uploader/uploader.err.log
```
并创建目录(如果服务用非 root 用户运行,请确保有写权限):
```bash
mkdir -p /var/log/uploader
# 如果 service 里设置了 User=uploader
# chown -R uploader:uploader /var/log/uploader
systemctl daemon-reload
systemctl restart uploader
tail -n 200 -f /var/log/uploader/uploader.log
```