「我在这里」只负责采集位置,数据存到你自己部署的服务里 —— 不走任何第三方。这个服务叫 here-server。
先确认你走哪条路
- 已经有人给了你地址和口令:不用往下看,直接回到 App 的「位置共享」填进去,点「测试连接」。
- 要自己部署:继续往下。你需要一台常开的 Linux 机器(家里的电脑、树莓派、或者一台云服务器),并且手机能访问到它。
1. 装好 Docker,三条命令起步
git clone https://github.com/yinguobing/here-server.git && cd here-server
echo "ADMIN_TOKEN=$(openssl rand -hex 16)" > .env
docker compose up -d --build
第一次构建要编译 Rust 依赖,大约 5–15 分钟。国内网络慢,可以走镜像:
docker compose build --build-arg CARGO_MIRROR=https://rsproxy.cn && docker compose up -d
服务默认监听 9001 端口。
2. 创建一个用户,拿到口令
docker compose exec here-server here add-user "你的名字"
输出里有一个用户 ID 和一个口令。口令只在创建时完整显示一次;忘了就用 here rotate-token <用户ID> 换一个新的。
3. 填进手机
- 服务器地址
http://<你的地址>:9001/location- 口令
- 上一步拿到的口令
地址要写到 /location 结尾。App 就是往你填的这个完整地址 POST 数据的,少一段路径会返回 404。
填完先点「测试连接」:显示「连接正常,口令有效」才算成功。保存后 App 也会自动探测一次,结论会当场告诉你。
4. 验证服务活着
curl http://<你的地址>:9001/health # → ok
接给你的 AI agent(MCP)
服务自带 MCP 端点,agent 侧加一段配置就能读位置(X-Admin-Token 用 .env 里那个):
{
"mcpServers": {
"here-server": {
"url": "http://<你的地址>:9001/mcp",
"headers": { "X-Admin-Token": "<ADMIN_TOKEN>" }
}
}
}
手机访问不到服务器?
- 同一个 Wi-Fi:地址填内网 IP,例如
http://192.168.1.10:9001/location。 - 不在一起:用 Tailscale / ZeroTier 之类的组网把两端放进同一个虚拟内网,比开放公网端口安全得多。也可以参考 鸿蒙6如何与智能体共享位置信息 里的中转方案。
- 云服务器:除了防火墙,还要在云厂商的安全组里放行 9001。
要暴露到公网,请套一层 HTTPS。口令是明文放在请求头里的,纯 http 在公网上等于把口令公开。用 Nginx 或 Caddy 反代到 9001 加上证书即可;地址填 https://你的域名/location。
两件容易踩的事
- 数据默认只留 24 小时。
docker-compose.yml里的MAX_HOURS: "24"就是保留时长,想留更久把这个值改大再重启。 - 口令就是你的身份。它泄露了,等于别人能读你的位置;怀疑泄露就
here rotate-token <用户ID>,然后在 App 里重新填。
常见报错对照
- 口令无效(401)
- 口令不对,或者已经被轮换过。
- 地址不存在(404)
- 地址少了
/location,或者反向代理没把路径转过去。 - 地址不对:返回的不是服务接口
- 这个地址打到的是网页,不是接口——多半是少了
/location,或者反代把请求重定向(301)走了。用浏览器打开这个地址,看到的是你的博客或首页,就是这种情况。 - 无法连接
- 手机访问不到这个地址:不在同一网络、端口没放行、服务没起来。
- 服务起不来
docker compose logs here-server看日志;.env里必须有ADMIN_TOKEN。