公开入口:
- TROTracker: https://www.trotracker.com/
- 张兆新律师个人网站: https://coolxincool2026.github.io/
- TROTracker 工具介绍页: https://coolxincool2026.github.io/trotracker.html
- 张兆新律师官方专业人员页: https://www.tclawfirm.com/content-1727.html
这个仓库对应的是 TROTracker / TRO稻草人 Docket 相关的公开技术资产。对外它承接的是跨境电商 TRO / Schedule A 案件查询、Docket 追踪和公开信息检索需求;对内它是张兆新律师与 TRO稻草人 内容矩阵的一部分。
一个面向跨境电商 TRO / Schedule A 场景的案件监控站点原型。当前版本采用双源策略:
CourtListener负责全国发现、回填和低成本实时更新优先目录公开页面负责补品牌、原告律所和更完整的卖家时间线
当前版本已经实现:
- 以
CourtListener search为主数据源,检索2025-01-01以来的 TRO / Schedule A 案件 - 以
优先目录公开页面为补充数据源,补品牌、原告律所、公开 docket 时间线 - 本地
SQLite去重、缓存、分页查询 - 前端案件列表、详情页、docket 时间线
- 中文翻译缓存,避免重复翻译同一段案件标题或 docket 文本
PACER预算闸门和PACERMonitor/PACER适配器占位- 启动即同步,并支持每 10 分钟轮询
- 支持后台持续
backfill,逐步补齐 2025 年以来历史案件 - 支持
优先目录单案懒加载补源,以及批量目录回补
- 已接入一个可用的
CourtListener API token - 该 token 当前实测结果:
search可用dockets可用docket-entries当前返回403
- 这意味着:
- 可以稳定发现新案
- 可以刷新案件级元数据,例如
date_last_filing - 但还不能从 CourtListener 直接拉到完整逐条 docket entries
- 当前本地库已经回填出一批
2025-01-01以来的 TRO / Schedule A 案件,后续可继续跑backfill
cd /Users/serendipitypku/Documents/Playground/tro-case-watch
cp .env.example .env
npm start打开 http://localhost:4127。
这套项目当前最适合部署到 Google Compute Engine VM,而不是 Cloud Run。原因很直接:
- 当前应用依赖本地
SQLite - 应用内有常驻定时同步
- 还需要稳定的磁盘持久化
仓库已经带好一套适合 Google Compute Engine + Docker Compose + Caddy 的部署文件:
Dockerfiledeploy/gcp/create-vm.shdeploy/gcp/compose.ymldeploy/gcp/Caddyfiledeploy/gcp/install-docker.shdeploy/gcp/deploy.sh
如果你已经在本机装好了 gcloud CLI,可以直接用:
cd /Users/serendipitypku/Documents/Playground/tro-case-watch
PROJECT_ID=your-project-id ZONE=us-central1-a bash deploy/gcp/create-vm.sh如果你更习惯控制台,建议选:
Compute EngineUbuntue2-standard-2- 系统盘至少
50GB - 保留一个静态公网 IP
- 放通
22、80、443
gcloud compute ssh trotracker-prod --zone=us-central1-a服务器里建议放在:
sudo mkdir -p /opt
sudo chown "$USER":"$USER" /opt
cd /opt
git clone https://github.com/coolxincool2026/tro-case-watch.git
cd tro-case-watchGoogle 生产环境的数据目录不要继续放在代码目录里。当前部署脚本会默认把 SQLite 挂到:
/var/lib/tro-case-watch/data这样后面你更新 /opt/tro-case-watch 代码时,不会把线上数据库一起删掉。
cd /opt/tro-case-watch
bash deploy/gcp/install-docker.sh执行完后重新登录一次,让 docker 用户组生效。
cd /opt/tro-case-watch
cp .env.example .env至少填这些值:
COURTLISTENER_API_TOKENADMIN_TOKEN
建议同步把这几个值显式写进 .env:
PACER_ENABLED=falsePACERMONITOR_PUBLIC_ENABLED=trueENABLE_SCHEDULER=trueENABLE_BACKFILL_SCHEDULER=true
cd /opt/tro-case-watch
bash deploy/gcp/deploy.sh如果这是第一次从旧版本迁移,脚本会自动尝试把旧的 /opt/tro-case-watch/data 迁到新的持久目录。
如果你需要把服务器数据库直接切换到仓库自带的最新种子快照,可在服务器上执行:
cd /opt/tro-case-watch
FORCE_SEED_RESTORE=1 bash deploy/gcp/deploy.sh这会用仓库里的 seed/tro-watch.sqlite.gz 直接覆盖 /var/lib/tro-case-watch/data/tro-watch.sqlite。
假设 create-vm.sh 输出的静态 IP 是 X.X.X.X,DNS 建议这样配:
A记录:trotracker.com -> X.X.X.XA记录:www.trotracker.com -> X.X.X.X
当前 deploy/gcp/Caddyfile 已经内置:
trotracker.com永久重定向到https://www.trotracker.comwww.trotracker.com反向代理到应用容器
curl http://X.X.X.X/api/health
curl https://www.trotracker.com/api/health
docker compose -f deploy/gcp/compose.yml ps
docker compose -f deploy/gcp/compose.yml logs -f app
docker compose -f deploy/gcp/compose.yml logs -f caddy部署完成后,可以直接打开:
https://www.trotracker.com/ops.html
这个页面会调用现有的异步管理接口,不需要再挂着 SSH 等长任务跑完。前提是服务器 .env 里已经设置了:
ADMIN_TOKEN=你自己的长随机字符串
可用按钮包括:
跑 Recent跑 优先目录跑 PACERMonitor跑法院源跑律所源
页面还会额外显示:
- 当前明显没补满的案件列表
优先目录 / PACERMonitor哪一层还缺PACERMonitor challenge的案件数量- 一个“强制补首个命中案”的单案入口
如果页面点击后返回 401,通常是 ADMIN_TOKEN 还没设置,或者浏览器里填的 token 不对。
这个项目依赖常驻 Node 进程、定时同步和本地 SQLite,不适合部署到会休眠或临时磁盘的免费 PaaS。当前仓库已经带好一套适合 Oracle Cloud Always Free VM 的部署文件:
Dockerfiledeploy/oci/compose.ymldeploy/oci/Caddyfiledeploy/oci/install-docker.shdeploy/oci/deploy.sh
- 建议选择
Ubuntu镜像 - 公网开放
22、80、443 - 把这整个项目目录传到服务器,例如
/opt/tro-case-watch
示例:
rsync -avz /Users/serendipitypku/Documents/Playground/tro-case-watch/ ubuntu@YOUR_VM_IP:/opt/tro-case-watch/登录服务器后:
cd /opt/tro-case-watch
cp .env.example .env至少填这些值:
COURTLISTENER_API_TOKENADMIN_TOKEN
如果你暂时不做翻译,可把:
OPENAI_API_KEY=
保持为空。
cd /opt/tro-case-watch
bash deploy/oci/install-docker.sh脚本执行后重新登录一次服务器,让 docker 用户组生效。
cd /opt/tro-case-watch
bash deploy/oci/deploy.sh这会启动两部分:
app- Node 服务,监听容器内
4127
- Node 服务,监听容器内
caddy- 对外监听
80/443 - 自动申请 HTTPS 证书
- 把
trotracker.com重定向到www.trotracker.com
- 对外监听
当前 Caddyfile 已经按以下域名写死:
www.trotracker.comtrotracker.com
DNS 建议这样配:
A记录:trotracker.com -> YOUR_VM_PUBLIC_IPA记录:www.trotracker.com -> YOUR_VM_PUBLIC_IP
如果你的 DNS 面板更习惯 CNAME,也可以:
A记录:trotracker.com -> YOUR_VM_PUBLIC_IPCNAME记录:www -> trotracker.com
curl http://YOUR_VM_PUBLIC_IP/api/health
curl https://www.trotracker.com/api/health
docker compose -f deploy/oci/compose.yml ps看日志:
docker compose -f deploy/oci/compose.yml logs -f app
docker compose -f deploy/oci/compose.yml logs -f caddyCOURTLISTENER_API_TOKEN- 没有 token 时,仍可抓
search结果。 - 但如果你要抓完整 docket / docket-entries,这个 token 基本是必需的。
- 没有 token 时,仍可抓
OPENAI_API_KEY- 用于把案件标题和 docket 文本翻译成中文。
- 代码里做了翻译缓存,相同文本不会重复调用。
COURTLISTENER_ENABLE_DOCKET_SYNC=true- 只有在你确认 token 有
dockets/docket-entries访问权限时再打开。
- 只有在你确认 token 有
PRIORITY_FEED_ENABLED=true- 默认已打开,使用公开页面补源。
PRIORITY_FEED_MIN_INTERVAL_MS=1500- 两次公开页面请求的最小间隔,避免对第三方站点造成太大压力。
PRIORITY_FEED_TIMEOUT_MS=15000- 单次公开页面请求超时,避免批量补源卡死。
PRIORITY_FEED_MAX_CASES_PER_RUN=3PRIORITY_FEED_BACKFILL_MAX_CASES_PER_RUN=12- 控制每轮公开补源的案件数。
PACERMONITOR_ENABLED=truePACERMONITOR_API_BASE_URL=...PACERMONITOR_API_KEY=...- 这部分我先留了适配器接口。你给我真实 API 文档或样例响应后,我就能继续接。
PACER_ENABLED=true- 当前只建议在小范围、明确预算、按案号定向抓取的模式下启用。
CourtListener search是当前最稳的全国发现入口。优先目录不是官方 API,而是公开 HTML 页面补源。CourtListener dockets/docket-entries不是所有账户都能直接拿到。PACERMonitor没有公开稳定文档时,不建议直接猜接口。- 直接从
PACER / CM-ECF自动化全国轮询,费用和维护风险都很高,所以这版默认不打开。 优先目录如果改版 HTML 结构,解析器需要跟着更新。
npm start
npm run sync:recent
npm run sync:backfill
npm run sync:catalogsync:catalog- 单独跑一轮
优先目录历史补源,不动 PACER。
- 单独跑一轮
CourtListener账号和 API token- 一个中文翻译 provider 的 API key
- 当前代码默认接
OpenAI
- 当前代码默认接
- 如果你坚持接
PACERMonitor- 企业 API 文档
- base URL
- key 或账号认证方式
- 如果你坚持直接接
PACER- PACER 账户
- client code
- 是否启用 MFA
- 允许接入的法院范围
- 你的日预算上限
- 主链路用
CourtListener,不要用PACER做全国 10 分钟轮询。 PACER只对以下情况补抓:- CourtListener 没抓到的新案
- 某些重点法院的重点案件
- 律师手动点名要追的案号
- 中文翻译只翻新文本,并做缓存。
- 大规模历史回填先跑
CourtListener,再挑高价值案件补 PACER。
- 如果后续真的需要从 PACER 拉数据,优先考虑
CourtListener recap-fetch- 好处是不用自己维护脆弱的法院站点自动化流程
- 风险是它仍然会用你的 PACER 凭据去购买数据,所以 PACER 账单照样会产生
- 只有在以下条件同时满足时,才建议启用:
- 你已经给出日预算或单次预算
- 只抓指定案号、指定法院或指定日期范围
- 默认关闭
parties and counsel - 只取自上次检查后的增量 docket
- 开发和联调用
PACER QA,不要先在生产 PACER 上试脚本