Test User 5152086668
CI / Docker build (push) Has been cancelled
CI / Frontend test and build (push) Has been cancelled
CI / Rust test (push) Has been cancelled
Release / Build and publish release (push) Has been cancelled
Initial browser fingerprint app with Gitea CI
2026-07-04 03:15:26 +08:00

浏览器暴露画像

一个纯 Rust 后端托管 TanStack 前端的单进程版本。前端使用 Vite + React + TanStack Router/Query 编译成静态文件,Rust/Axum 同时提供 /api/* 和前端静态文件,并把匿名扫描结果写入 SQLite。

本地运行

cd frontend
pnpm install
pnpm build

cd backend
cargo run

打开 http://localhost:8787。后端默认监听 0.0.0.0:8787,数据库为 backend/fingerprints.db,并自动查找 frontend/dist

开发模式

需要热更新时可以开两个终端:

  1. cd backend && cargo run
  2. cd frontend && pnpm dev

Vite dev server 会把 /api/health 代理到 http://127.0.0.1:8787

后端配置

  • DATABASE_URL: SQLite 地址,默认 sqlite://fingerprints.db
  • BIND_ADDR: 监听地址,默认 0.0.0.0:8787
  • ASSETS_DIR: 前端编译产物目录,默认自动查找 frontend/dist../frontend/distdist
  • GEOIP_CITY_DB: 可选,指定城市级 MMDB 文件;默认自动加载 backend/data/dbip-city-ipv4.mmdbbackend/data/dbip-city-ipv6.mmdb
  • GEOIP_ASN_DB: 可选,指定 ASN/ISP MMDB 文件;默认自动加载 backend/data/origin-asn.mmdb

本仓库已本地化开源 IP 数据库文件到 backend/data/。刷新数据库:

./scripts/download-geoip-mmdb.sh

当前默认数据源来自 GitHub 上的 sapics/ip-location-db Releases

  • dbip-city-ipv4.mmdb / dbip-city-ipv6.mmdb: DB-IP Lite 城市库,CC BY 4.0
  • origin-asn.mmdb: origin ASN 库,PDDL

后端只做本地文件查询,不把访客 IP 发送给第三方 IP 查询 API。

API

  • POST /api/scan: 接收匿名检测结果
  • GET /api/stats: 返回总次数、平均分、高风险数量和命中信号排行
  • GET /api/network/probe: 返回服务端可见的请求来源、Cloudflare/代理头、WebRTC 阶段会用到的本地 IP 数据库查询结果;该接口不落库
  • GET /health: 健康检查

Docker

从仓库根目录构建:

docker build -f backend/Dockerfile -t browser-fingerprint .
docker run --rm -p 8787:8787 -v "$PWD/data:/data" browser-fingerprint

容器内 Rust 服务会托管 /app/frontend/distSQLite 写到 /data/fingerprints.db

Gitea CI 与 Release

仓库使用 Gitea Actionsworkflow 位于 .gitea/workflows/

  • ci.yml: main 分支和 PR 运行前端测试/构建、Rust 格式检查/测试、Docker 构建。
  • release.yml: 推送 v* tag 时构建 release 资产,并通过 Gitea API 创建或更新 release。

本地打包:

VERSION=v0.1.0 BUILD_DOCKER=1 ./scripts/package-release.sh

手动发布到 Gitea

GITEA_TOKEN=... \
GITEA_API_URL=https://git.aiot.ml/api/v1 \
GITEA_REPOSITORY=kanshan/browser-fingerprint \
RELEASE_TAG=v0.1.0 \
./scripts/publish-gitea-release.sh release/*

更多细节见 docs/release.md

部署到 VPS

默认部署目标是 92.119.167.24,服务会监听公网 80 端口,SQLite 数据保存在服务器 /opt/browser-fingerprint/data/fingerprints.db

服务器需要先安装 Docker 和 Docker Compose 插件。SSH 连通后从本机仓库根目录执行:

./scripts/deploy-vps.sh

如果 SSH 用户或端口不同:

DEPLOY_USER=root DEPLOY_PORT=22 ./scripts/deploy-vps.sh

脚本会自动优先使用 ~/.ssh/termius_deploy_ed25519。也可以显式指定:

DEPLOY_KEY=~/.ssh/termius_deploy_ed25519 ./scripts/deploy-vps.sh

部署完成后访问 http://92.119.167.24/

后续绑定 Cloudflare 时,把域名的 A 记录指向 92.119.167.24。先用 DNS only 确认源站正常,再切到代理模式;源站当前走 HTTP 80,后续加证书或 Cloudflare Origin Certificate 后再开放 HTTPS。

S
Description
Rust backend plus TanStack frontend for browser exposure profiling
Readme
69 MiB
2026-07-03 19:16:59 +00:00
Languages
JavaScript 66.8%
Rust 20%
CSS 10.7%
Shell 2.2%
Dockerfile 0.2%
Other 0.1%