📌 项目地址mauriceboe/TREK | ⭐ 6,442 颗星 | 🔧 TypeScript | 📜 未标注

这个项目解决了什么问题?

市面上旅行规划工具不少,但要么是商业产品(TripIt、Google Trips),数据在别人服务器上;要么功能单一,只能记账或列清单。当你和三五好友一起策划一次长途旅行时,需求会变得很具体:我们需要一起编辑行程、实时看到别人的修改、在地图上标记要去的地方、记录各自花销、分配打包物品——这一切最好还能离线查看,并且数据完全由自己掌控。

TREK 就是为这个场景设计的。它把实时协作交互地图预算管理打包清单文档管理PDF导出等能力打包成一个 Docker 容器,你自己部署,所有数据留在自己手里。

从哪里开始入手?

官方推荐的方式是 Docker Compose。如果你本地有 Docker 环境,建一个 docker-compose.yml

services:
  app:
    image: ghcr.io/mauriceboe/trek:latest
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
    environment:
      - DATABASE_URL=file:/app/data/trek.db
      - JWT_SECRET=your-secret-here

然后启动:

docker compose up -d

浏览器打开 http://localhost:8080 就能看到登录页面。首次使用会引导你创建管理员账号。

TREK 还支持 SSO(OIDC),可以用 Google、Apple、Authentik、Keycloak 登录,也可以开启 TOTP 双因素认证Passkeys(WebAuthn 无密码登录),这些在设置里按需打开就行。

它在实际使用中表现如何?

创建一个新旅行,你会得到一张交互地图。搜索地点有三种方式:

  1. Google Places:需要 API key,但能获取照片、评分、营业时间。
  2. OpenStreetMap:免费,无需 key,数据齐全。
  3. 导入:可以从共享的 Google Maps 列表、Naver Maps 列表导入,也支持 GPX、KML、KMZ、GeoJSON 格式。

把地点拖到日期规划里,可以跨天移动。每个地点可以加笔记(带标签和时间戳),笔记也能拖拽排序。

实时协作靠的是 WebSocket。你添加一个地点,队友手机上 1 秒内就能看到。邀请功能支持单次链接或可重复使用的链接,还能设置过期时间。

费用追踪类似 Splitwise:记录一笔开销,选择参与的人,系统自动算出谁欠谁,最后可以结算。支持多币种,所以跨国旅行也能用。

打包清单有预设模板,可以给不同成员分配物品,还能追踪每人的行李重量(iOS 风格的重量分配界面)。

PDF 导出功能会把整个旅行计划转成一份包含封面、图片和笔记的文档,出发前打印一份很方便。

它和同类工具有什么不同?

跟商业产品(如 TripIt)比,TREK 最大的区别是自托管。你自己控制数据库,没有隐私担忧,也没有订阅费。

跟其他开源方案(如 Traggo、Hitchcock)比,TREK 的功能覆盖面更广:它不仅做记录,还包含实时协作、地图、预算、清单、文档管理,甚至内置了组内聊天和投票。README 里提到它还支持 KDE Itinerary 的导入(从确认邮件和 PDF 中自动解析预订信息),这点在开源项目里很少见。

另一个值得说的是它的 Addon 系统。管理员可以在后台自由开关功能模块——比如团队协作、费用管理、文档管理、组内聊天、世界地图统计等。不需要的功能关掉,界面干净,性能也有保障。

需要注意的事情

  • 部署门槛:需要自己维护 Docker 主机、数据库(默认 SQLite,但可以换 PostgreSQL)、以及可能的反向代理和 SSL。如果你不熟悉 Docker 和基本的运维,上手会有点吃力。
  • 地图 API 选择:如果用 Google Places,需要自己去申请 API key 并绑定支付方式(有限度免费配额)。OpenStreetMap 不用 key,但照片和评分功能就没了。
  • 文件大小限制:文档上传上限是 50MB,文件大的话需要考虑替代方案。
  • 开发状态:截止到 README 撰写时,项目仍在新功能迭代中。如果遇到 bug 或缺少某个功能,建议去 GitHub Issues 看看,或者考虑贡献代码。
  • 移动端体验:虽然 PWA 支持离线和服务 worker 缓存,但它本质上是个 Web App,不是原生应用。如果对离线功能和系统集成要求很高,需要自己评估。

哪些场景下它特别有价值?

一个典型的例子:三五个朋友计划一次为期两周的欧洲背包旅行。要用共享地图标记每个城市要去的地点、共同记账分摊房租和餐费、分配谁带帐篷谁带充电宝。每个人用手机就能随时查看最新行程,离线也能读。这些场景下,TREK 比纸笔 + 微信群 + Excel 的组合高效得多。

另一个场景:注重隐私的旅行者,不愿意把自己的行程数据交给商业平台,愿意付出一点运维成本换回对数据的完全控制。

如果你是 solo 旅行者,功能可能过重——但你也可以只关掉协作模块,把它当作一个带地图的个人旅行笔记本来用。

这篇文章对你有帮助吗?

发表回复