Files
uploader/README.md
2026-03-11 23:23:40 +08:00

153 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```