
使用Docker与TREK自托管您的个性化智能旅行日程:一站式深度规划并轻松管理预订、财务和行李清单
本文详细介绍如何使用Docker部署开源旅行规划系统TREK。我们将带您配置Caddy反向代理和Cloudflare R2对象存储,实现数据的安全备份与图片的高效加载。此外,还将演示如何利用MCP(模型上下文协议)连接Claude等AI智能体,通过自然语言对话一键生成您的专属旅行日程,开启完美旅程。
目录
在规划旅行时,最繁琐的部分莫过于那些零散的数据:机票预订PDF、酒店确认信、旅伴之间的聊天记录、想去的景点清单等,都散落在不同的角落。而当需要汇总总花销、拆分账单时,又得在海量的出行记录中不停翻找,极为耗费精力。
TREK是一款可以自托管的开源旅行规划系统,能够将您的行程、预订、财务预算和行李清单一站式整合到同一个平台中。其内置的MCP(Model Context Protocol)服务器还允许AI智能体(如Claude Desktop)直接操作您的出行数据。
本教程将带您一步步完成从系统部署到完整管理一次真实旅行的全过程。
1. 如何使用Docker部署TREK旅行规划器
在Ubuntu VPS上安装Docker
# Add Docker's official GPG key and set up the Docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add the official Docker repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update package list
sudo apt update
# Install Docker Engine, Docker Community Edition, and containerd runtime
sudo apt install docker-ce docker-ce-cli containerd.io -y
# Verify docker is installed
docker --version
# Starts automatically when your system boots
sudo systemctl enable docker
生成加密密钥
TREK使用一个专门的密钥来加密敏感数据。您可以使用以下命令或这个在线工具来生成加密密钥:
openssl rand -hex 32
请务必将其妥善保存在安全的地方。如果遗失该密钥,您将无法访问已加密的数据。
启动容器
docker run -d \
--name trek \
-p 3000:3000 \
-e ENCRYPTION_KEY="<generated_key>" \
-e APP_URL="https://trek.pafor.me" \
-v ./data:/app/data \
-v ./uploads:/app/uploads \
--restart unless-stopped \
mauriceboe/trek:latest
- 必须正确设置
APP_URL—— 因为MCP服务器的OAuth授权发现流程完全依赖于它。请在一开始就将其设置为您最终的公开HTTPS地址。
首次运行需要一些时间来拉取镜像:

验证容器是否成功运行:
docker ps

2. 使用Caddy反向代理配置域名路由与SSL证书
通行密钥(Passkeys)功能和MCP所需的OAuth授权都强制要求HTTPS加密。我们的域名托管在提供免费SSL证书和DDoS保护的Cloudflare上。
我们将Caddy配置为安全的反向代理服务器,用来指向容器的3000端口。Caddyfile配置示例如下:
{$TREK_DOMAIN} {
encode zstd gzip
reverse_proxy host.docker.internal:3000
}
3. 初始配置与安全的管理员设置
创建管理员账户有两种方式:
- 在环境配置中直接设置
ADMIN_EMAIL和ADMIN_PASSWORD变量,系统将直接使用该凭证。 - TREK会自动生成一个邮箱
admin@trek.local、用户名admin,以及一个随机生成的密码,并打印到容器日志中。运行docker logs trek即可获取。
如果您在日志中找不到密码,可以通过以下命令进行手动重置:
docker exec -it -e RESET_ADMIN_EMAIL=admin@trek.local -e RESET_ADMIN_PASSWORD='YourNewPassword' trek node server/reset-admin.js
在首次登录时,系统会提示您修改初始密码。

点击 Admin(管理员) 选项卡并更新您的电子邮箱:
3.1 备份策略
在管理员后台,可以非常方便地配置带有保留策略的自动备份方案:

3.2 将上传的文件存储到Cloudflare R2
将上传的文件、照片和备份数据保存在Cloudflare R2中,能够让您的VPS磁盘保持干净和轻量。TREK全面支持S3兼容的存储后端,而Cloudflare R2正是这一需求的完美解决方案。
- 新建一个名为
trek的R2存储桶。 - 在 Account Details(账户详情) 区域,找到您的账户ID:

- 点击 Manage API Tokens(管理API令牌):

- 点击 Create Account API token(创建账户API令牌),并授予针对该桶的读写权限:

- 在管理员面板中,点击 Storage(存储) 配置页:

- 点击 Add Backend(添加后端) 按钮,填入您的Endpoint(终结点)、Bucket(存储桶名称)和API凭证:

- 点击 Apply(应用),然后点击 Test(测试) 链接。当看到“Connection OK”字样时,说明连接测试成功:

- 将所有存储类别切换为Cloudflare R2并点击 Save changes(保存修改):

3.3 通行密钥(Passkey)登录
TREK支持通行密钥、双重身份验证(2FA)以及基于OIDC的单点登录。如果想开启通行密钥,请在设置中输入您的域名和Allowed Origins(允许的源),然后保存即可:

如果没有正确配置 Allowed Origins,通行密钥注册将会失败。
3.4 Google Maps API密钥
配置Google Maps密钥可以让您的地点检索功能变得更丰富,自动补充评分、营业时间和地点实景图。如果您不配置密钥,TREK会默认降级使用免费的OpenStreetMap(只是不显示评分和实景照片)。
访问此链接并点击 Get demo key 即可申请一个测试密钥: 
将获取到的API Key粘贴到设置中,然后点击 Test 验证连接是否通畅:

3.5 AI集成
内置的AI解析引擎主要用于处理您的预订确认邮件和PDF,将它们自动转换为结构化的预订数据。
点击左侧菜单中的 Addons(附加组件) 并启用 AI Parsing。选择“OpenAI”(或其它兼容的AI提供商)并填写相应的凭证信息:

3.6 MCP访问权限
同样在 Addons 选项中,开启 MCP 协议:

3.7 插件推荐
以下几款官方插件非常推荐您顺手激活:

3.8 创建您的日常使用账户
在平时规划旅行时,建议使用普通用户账户,而非管理员账户。让我们在后台创建一个日常账户并登录:

登录后,建议立刻绑定通行密钥或设置2FA来强化该账户的安全级别:

点击 + Add a passkey,输入当前密码,然后按照浏览器提示完成安全确认:

4. 测试您的部署:导入历史出行数据
快速上手并熟悉TREK系统的一个极佳方式是,将您过去走过的旅行足迹录入其中。
4.1 创建旅行计划
点击 + New Trip(新建旅行),并根据那次历史旅行的真实起止时间设定 Start Date 和 End Date:

上传一张好看的封面图(可以直接将图片拖入或从剪贴板粘贴),接着点击 Create New Trip:

4.2 导入预订信息
将您当时留存的机票、火车票和其它交通工具预订确认文件直接拖放到上传区域:


由于我们已经启用了AI解析引擎,预订确认PDF文件会被自动分析,提取出结构化的预订日程。
检查解析结果无误后,点击 Add 将其正式写入预订数据中:

如果有些预订确认仅保存在邮件中,您可以将其导出为PDF格式并上传,同样可以走这套提取流程。
在系统中,已导入的预订信息会以极具现代感的方式呈现:


在 Plan(日程规划) 页面中,所有的酒店和住宿点都会在地图上被优雅地标注出来:

点击上方的 Atlas(旅行足迹),您将能从清单和世界地图上直观地看到所有已拜访的国家:

4.3 添加旅行同伴
点击 Share(分享) 按钮:

在弹出的对话框底部,可以直接添加旅行同伴为Guest(嘉宾):

4.4 记录旅行费用
点击 Add expense(添加开销),来记录那些无法通过PDF预订单自动解析的杂项支出,例如境外险、当地公共交通费、临时SIM卡等:


4.5 拆分旅行阶段
该功能需要提前在后台激活“Trip Segment”插件。
对于那些超长周期的旅程,将其拆分为不同的阶段能让脉络更清晰,每个阶段都可以有自己独立的预订项目、待办事项和成本账单:



4.6 创建Journal(日志)并查看旅行足迹(Atlas)
您还可以将几次旅行串联成一个 Journey(旅程),并图文并茂地撰写游记故事,方便分享给您的朋友们:




5. 设计自定义行程与行李清单
点击 + New Trip,输入旅行的专属名称并指定起止日期:

如果具体的出行时间还没有敲定,可以将日期项留空。 此时系统会显示一个“天数配置(最高支持365天)”字段,您可以先设计每日的游玩内容,等后续买好机票后再一键锚定日期。
5.1 添加地点/景点
这是旅行规划中最耗时的一步,但TREK提供了四种极具效率的方式来帮助您添加地点:

1. 直接在地图上右键点击: 会在该坐标处直接创建新地点,其标准地址会被系统自动逆地理编码解析出来:


2. 点击 + Add Place/Activity: 在搜索框中直接通过关键字进行检索



3. 直接粘贴谷歌地图分享链接: (如 maps.app.goo.gl/… 或 maps.google.com/…)粘贴到检索栏中。TREK会自动抓取该地点的名称、地址和经纬度:


4. 批量导入数据: 这是最轻松的方案。如果您在Google Maps中维护着自己的“想去清单”,可以将其导出为 .gpx 文件(.kml 或 .kmz 格式亦支持),然后点击右侧面板的 Import file,一键拉取所有数据:

推荐您可以先把所有感兴趣的项目都添加进来。至于如何将它们科学地归入到每一天的日程中,后续可以直接在面板里拖拽处理。
5.2 每日日程与备注
Day Plan(每日计划)的核心逻辑是将所有的目的地按每日访问顺序进行排序。整个界面是一个可以折叠、支持任意拖放的模块:

这些细节机制设计得极其精妙实用:
- 中间移动方式:点击每日日程左上角的公共汽车图标,可以设定各节点之间的过渡交通方式(如地铁、自驾、甚至是直达航班):

- 每日备忘:点击左下角的便签图标可以附加各种定制化提醒(例如:“今天需要提早出发”、“美术馆门票需提前预约”):

- 指定时间段:从右侧拖拽地点并给它分配一个开始时间。设置了时间的地点会自动在地图上生成推荐的行进路线:

- 关于智能路线优化(Route optimisation)以及气候(Weather),您可以查阅 Day Plans and Notes的Wiki文档。
5.3 收藏夹:可重复使用的地点清单
Collections(收藏夹)允许用户在具体的旅行项目之外,保存并分类管理自己精心收集的宝藏地点。您可以将其打包分享给朋友。这些地点在加入旅行时是采用复制的方式,因此在旅行日程中对其进行的任何个性化标注,都不会破坏您收藏夹里的原始干净数据。
点击顶部菜单栏中的 Collections:

点击 + New list 建立新的分类列表:

点击 + Add a place 并填入该地点的详细情况:

注意: 收藏夹内的搜索组件偶尔可能会因网络原因失效,如果发生该情况,您可以通过手动输入来创建。
当地点带有准确的GPS坐标时,它们会精美地展示在地图中:

如需批量组织这些地标,可以点击 checkbox(勾选框) 图标:

多选目标后,点击 Assign label(分配标签):

在分配之前,先点击 Manage labels(管理标签) 来新建一些醒目的彩色分组标签:

点击一个具体标签,接着选择一键绑定:

5.4 费用与预算
在 Costs(财务管理) 页面中,我们可以录入其它的预备预算和旅途支出。

在结伴出行时,您可以在此页记录每个人的垫付账单,并选定分摊规则。
系统的结算后台采用了一种贪心匹配算法,计算并生成最简化的转账精算方案,帮大家用最少的转账次数轻松对齐账目。
6. 利用Model Context Protocol(MCP)实现AI驱动的旅行规划
TREK内置了 MCP(模型上下文协议)服务器。这意味着,AI智能体可以直接“读写”您的行程规划数据。它提供了超过150个精细的原子工具和30个核心数据源,全方位覆盖行程、地点、账目、行李、预订和多人协作。
6.1 Cloudflare Zero Trust网络配置
由于我们的自托管服务运行在 Cloudflare Zero Trust 内网环境下,我们需要在“Split Tunnels(分流隧道)”配置中,将该服务的域名加入到 Inclusion List(包含/直连白名单)中。否则在进行 OAuth 登录授权发现时,接口调用会被网络策略阻断。具体的配置排障可以参考这个 GitHub 讨论贴:GitHub Issue。

相关指南
教程:使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络
本文深入探讨如何使用 Cloudflare WARP 与 Zero Trust 技术,在完全不需要开启任何防火墙入站端口的情况下,安全地将您的 Hermes Agent 暴露到私有网络中,从而实现全球范围内的安全访问。这为您构建专属私有远程 AI 基础设施打下坚实基础。
5 分钟阅读
6.2 Claude Desktop客户端配置
点击 + New Client 创设一个新的 AI 客户端接口:

选择 Claude Desktop 选项卡,然后点击 Register Client(注册客户端):

系统此时会展示唯一的 Client ID 和 Client Secret,请妥善保存。接着点击 Client Configuration(客户端配置) 调出我们需要在本地写入的 JSON 代码片段:

在 Claude Desktop 软件中,点击 Edit Config 会在代码编辑器中打开您本地的 MCP server 配置文件:

将 TREK 的 MCP 代码块粘贴进去,并把占位符部分替换为上一步生成的客户端凭证:
"mcpServers": {
"trek": {
"command": "npx",
"args": [
"mcp-remote",
"https://trek.pafor.me/mcp",
"--static-oauth-client-info",
"{\"client_id\": \"<your_client_id>\", \"client_secret\": \"<your_client_secret>\"}"
]
}
},
重新启动 Claude Desktop 客户端。此时在 Local MCP servers(本地MCP服务)列表中就会看到 TREK 已经成功连接:

现在,您可以直接用日常口语来下达规划指令了:

例如,我们用纯中文录入一笔非标准化的日常开支:
For the West Europe trip, the Grab from KLIA1 to the hotel cost RM115.90 on 26/4/2025. Please add it as an expense without split to the trip.

回到后台,刷新 Costs 面板。我们可以看到这笔打车费用已经被精确地记录下来,且因为命令中并未提及“由谁付款”,系统体贴地将付款人项归纳为了“No one paid yet(尚未有人支付)”:

管理行李清单的方式也完全一致:

再次刷新 Packing List 页面,指定的这三样出行装备已经被整齐地加入到了清单之中:

6.3 Gemini CLI(动态注册)
Gemini CLI 对 Dynamic Registration(动态注册机制) 提供了极佳的支持,这使得您完全无需在系统后台手动预注册任何客户端凭证。直接将以下代码追加到您本地的 .gemini/settings.json 文件中:
"trek": {
"httpUrl": "https://trek.pafor.me/mcp",
"oauth": {
"enabled": true
}
}
在终端运行 gemini 命令,并在随后拉起的网页授权页面中点击 Approve(批准) 即可:

现在便可以通过极简的命令行终端向 AI 提问了:


6.4 Kimi CLI(动态注册)
原理基本相同。请在本地 /Users/<您的用户名>/.kimi/ 目录下找到 mcp.json 并写入以下连接配置:
"trek": {
"type": "http",
"url": "https://trek.pafor.me/mcp",
"auth": "oauth"
}
在终端执行 kimi mcp auth trek 并在网页上点击 Approve 完成快速授权:

完成授权后,您将能够在命令行直接调用所有关联的微服务工具:

7. 移动端使用体验
在手机和移动设备上,TREK是以 PWA(渐进式Web应用)的形式呈现的。其内置的 Service Worker 能够将地图网格瓦片和日程 API 数据离线缓存,确保在野外或没有网络信号的极佳状态下,您依然能够流畅查看已制定的全部行程。不过,离线状态下的推送通知响应速度相较原生应用会有微小的延迟。
写在最后
通过 MCP 将 AI 智能体接入您的日常旅行规划,可以帮您省去那些因手动键入繁多的航班和酒店确认单而产生的大量枯燥劳动。不仅如此,AI 还能根据您指定的具体出行节点和所处季节,智能推荐周边的特色景点。仅仅通过几句随意的对话,AI 就能轻松打通从前期灵感检索、行程路线设计,再到后期预算拆分和行李打包的完整全链路。
不过在目前的版本中,依然存在一些微小的体验瑕疵。例如:通过 PDF 智能解析导入订单时,账单货币会默认对齐到旅行项目的主货币,而不是当时实际刷卡结算的付款货币。此外,在 Collections 收藏夹中新建清单列表时,如果在列表尚未保存时就给它配置封面,该封面可能在保存后失效(您需要在列表正式建立后,点击“编辑”来重新添加并保存,即可解决)。
此外,因为它需要您拥有一定的 VPS 运维基础来亲自运行这套程序,对一般用户确实存在一些上手门槛。TREK 更适合那些重度旅行爱好者、数字游民以及对于自身出行数据隐私和排版有着高水准要求的极客用户。我们由衷地建议您在下定决心搭建自托管服务之前,可以先在 demo.liketrek.com 上完整试用一下官方提供的公测 DEMO,看它是否切中您的日常痛点。
参考资料:
相关文章

协作
自建 Block 旗下 Buzz 协作平台:轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间
本教程将手把手带您在 Ubuntu VPS 上部署自托管的 Block 旗下 Nostr 中继服务 Buzz,并配置 Cloudflare DNS 安全网络。我们将帮助您搭建起一个安全性的共享工作空间,让您的团队成员与多个 AI 智能体(如 Claude、Kimi)能够基于加密身份进行高效沟通、共享项目上下文并实现无缝协作。
11 分钟阅读
Cloudflare
基于Cloudflare Workers与MCP协议构建个人专属的AI持久化记忆系统,解决Context空白痛点
学习如何利用Cloudflare Workers、Vectorize与MCP协议构建自托管的AI持久化记忆系统(Second Brain)。在Claude、Gemini和Obsidian之间实现多Agent上下文共享。
35 分钟阅读
AI 与智能体
从传统初始化模板脚本到智能体:AI Agent 技能如何优雅地取代 Nuxt 应用程序脚手架构建脚本
轻松在 Cloudflare Workers 上快速构建 Nuxt 应用程序脚手架。深入剖析并学习我们如何使用功能强大、极其灵活、支持自我修复且拥有决策能力的 AI 智能体技能来彻底取代脆弱的传统 Shell 脚本,并详细演示如何通过官方 the npx skills 命令行工具将其无缝安装到您的开发工作流中。
2 分钟阅读
上一篇
从传统初始化模板脚本到智能体:AI Agent 技能如何优雅地取代 Nuxt 应用程序脚手架构建脚本
轻松在 Cloudflare Workers 上快速构建 Nuxt 应用程序脚手架。深入剖析并学习我们如何使用功能强大、极其灵活、支持自我修复且拥有决策能力的 AI 智能体技能来彻底取代脆弱的传统 Shell 脚本,并详细演示如何通过官方 the npx skills 命令行工具将其无缝安装到您的开发工作流中。

下一篇
自建 Block 旗下 Buzz 协作平台:轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间
本教程将手把手带您在 Ubuntu VPS 上部署自托管的 Block 旗下 Nostr 中继服务 Buzz,并配置 Cloudflare DNS 安全网络。我们将帮助您搭建起一个安全性的共享工作空间,让您的团队成员与多个 AI 智能体(如 Claude、Kimi)能够基于加密身份进行高效沟通、共享项目上下文并实现无缝协作。