---
title: "使用Docker与TREK自托管您的个性化智能旅行日程：一站式深度规划并轻松管理预订、财务和行李清单"
description: "本文详细介绍如何使用Docker部署开源旅行规划系统TREK。我们将带您配置Caddy反向代理和Cloudflare R2对象存储，实现数据的安全备份与图片的高效加载。此外，还将演示如何利用MCP（模型上下文协议）连接Claude等AI智能体，通过自然语言对话一键生成您的专属旅行日程，开启完美旅程。"
canonical_url: "https://techvoyage.dev/zh/article/self-hosted-travel-planner-trek"
last_updated: "2026-09-03"
---

在规划旅行时，最繁琐的部分莫过于那些零散的数据：机票预订PDF、酒店确认信、旅伴之间的聊天记录、想去的景点清单等，都散落在不同的角落。而当需要汇总总花销、拆分账单时，又得在海量的出行记录中不停翻找，极为耗费精力。

TREK是一款可以自托管的开源旅行规划系统，能够将您的行程、预订、财务预算和行李清单一站式整合到同一个平台中。其内置的MCP（Model Context Protocol）服务器还允许AI智能体（如Claude Desktop）直接操作您的出行数据。

本教程将带您一步步完成从系统部署到完整管理一次真实旅行的全过程。

### 1. 如何使用Docker部署TREK旅行规划器

#### 在Ubuntu VPS上安装Docker

```bash
# 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使用一个专门的密钥来加密敏感数据。您可以使用以下命令或这个[在线工具](/zh/tools/secret-key-hex)来生成加密密钥：

```bash
openssl rand -hex 32
```

请务必将其妥善保存在安全的地方。如果遗失该密钥，您将无法访问已加密的数据。

#### 启动容器

```bash
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地址。

首次运行需要一些时间来拉取镜像：

![TREK 的 Docker 拉取和运行日志](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-docker-pull-image.webp)验证容器是否成功运行：

```bash
docker ps
```

![通过 docker ps 验证运行中的容器状态](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-docker-ps-status.webp)### 2. 使用Caddy反向代理配置域名路由与SSL证书

通行密钥（Passkeys）功能和MCP所需的OAuth授权都强制要求HTTPS加密。我们的域名托管在提供免费SSL证书和DDoS保护的Cloudflare上。

我们将Caddy配置为安全的反向代理服务器，用来指向容器的3000端口。Caddyfile配置示例如下：

```json
{$TREK_DOMAIN} {
  encode zstd gzip
  reverse_proxy host.docker.internal:3000
}
```

### 3. 初始配置与安全的管理员设置

创建管理员账户有两种方式：

- **在环境配置中直接设置 ADMIN_EMAIL 和 ADMIN_PASSWORD** 变量，系统将直接使用该凭证。
- TREK会自动生成一个邮箱 `admin@trek.local`、用户名 `admin`，以及一个**随机生成的密码，并打印到容器日志中**。运行 `docker logs trek` 即可获取。

如果您在日志中找不到密码，可以通过以下命令进行手动重置：

```bash
docker exec -it -e RESET_ADMIN_EMAIL=admin@trek.local -e RESET_ADMIN_PASSWORD='YourNewPassword' trek node server/reset-admin.js
```

在首次登录时，系统会提示您修改初始密码。

![初始登录和管理员密码重置提示](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-initial-login-password-prompt.webp)点击 **Admin（管理员）** 选项卡并更新您的电子邮箱：![在 TREK 管理员设置中配置自定义电子邮件](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-admin-email-update-panel.webp)

#### 3.1 备份策略

在管理员后台，可以非常方便地配置带有保留策略的自动备份方案：
![配置自动备份计划和保留规则](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-admin-backup-retention-policy.webp)

#### 3.2 将上传的文件存储到Cloudflare R2

将上传的文件、照片和备份数据保存在Cloudflare R2中，能够让您的VPS磁盘保持干净和轻量。TREK全面支持S3兼容的存储后端，而Cloudflare R2正是这一需求的完美解决方案。

1. 新建一个名为 `trek` 的R2存储桶。
2. 在 **Account Details（账户详情）** 区域，找到您的账户ID：
  ![在控制台中定位 Cloudflare 帐户 ID](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-r2-account-details-id.webp)
3. 点击 **Manage API Tokens（管理API令牌）**：
  ![Cloudflare 控制台中的管理 API 令牌界面](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-r2-manage-api-tokens-button.webp)
4. 点击 **Create Account API token（创建账户API令牌）**，并授予针对该桶的读写权限：
  ![创建具有读写权限的 R2 访问令牌](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-r2-create-token-permissions.webp)
5. 在管理员面板中，点击 **Storage（存储）** 配置页：
  ![导航到 TREK 控制面板中的存储设置](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-administration-storage-menu.webp)
6. 点击 **Add Backend（添加后端）** 按钮，填入您的Endpoint（终结点）、Bucket（存储桶名称）和API凭证：
  ![配置 S3 兼容的 Cloudflare R2 存储后端](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-storage-backend-credentials.webp)
7. 点击 **Apply（应用）**，然后点击 **Test（测试）** 链接。当看到“Connection OK”字样时，说明连接测试成功：
  ![存储后端连接测试成功，显示 Connection OK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-test-storage-backend-connection-ok.webp)
8. 将所有存储类别切换为Cloudflare R2并点击 **Save changes（保存修改）**：
  ![将所有 file 存储分类路由到 Cloudflare R2](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-switch-storage-categories-r2.webp)

#### 3.3 通行密钥（Passkey）登录

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

![注册用于安全金钥（Passkey）身份验证的允许源](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-passkey-allowed-origins-settings.webp)如果没有正确配置 **Allowed Origins**，通行密钥注册将会失败。

#### 3.4 Google Maps API密钥

配置Google Maps密钥可以让您的地点检索功能变得更丰富，自动补充评分、营业时间和地点实景图。如果您不配置密钥，TREK会默认降级使用免费的OpenStreetMap（只是不显示评分和实景照片）。

访问此[链接](https://mapsplatform.google.com/maps-demo-key/)并点击 **Get demo key** 即可申请一个测试密钥：                                                  ![申请 Google Maps Platform API 密钥](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/google-maps-get-demo-api-key.webp)

将获取到的API Key粘贴到设置中，然后点击 **Test** 验证连接是否通畅：
![在设置中验证 Google Maps API 密钥的连通性](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-google-maps-key-test-connection.webp)

#### 3.5 AI集成

内置的AI解析引擎主要用于处理您的预订确认邮件和PDF，将它们自动转换为结构化的预订数据。

点击左侧菜单中的 **Addons（附加组件）** 并启用 **AI Parsing**。选择“OpenAI”（或其它兼容的AI提供商）并填写相应的凭证信息：

![启用带有 OpenAI 集成的 AI 解析插件](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-addons-enable-ai-parsing-openai.webp)#### 3.6 MCP访问权限

同样在 **Addons** 选项中，开启 **MCP** 协议：

![启用 Model Context Protocol MCP 服务器插件](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-addons-enable-mcp.webp)#### 3.7 插件推荐

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

![活跃的推荐插件和扩展列表](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-recommended-addons-plugins-activation.webp)#### 3.8 创建您的日常使用账户

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

![在 TREK 面板中创建普通用户账户](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-create-regular-user-form.webp)登录后，建议立刻绑定通行密钥或设置2FA来强化该账户的安全级别：

![使用安全金钥（Passkey）和双重认证配置用户安全设置](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-user-security-passkey-2fa-setup.webp)点击 **+ Add a passkey**，输入当前密码，然后按照浏览器提示完成安全确认：

![确认密码以注册新的硬件安全金钥](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-passkey-confirm-password.webp)### 4. 测试您的部署：导入历史出行数据

快速上手并熟悉TREK系统的一个极佳方式是，将您过去走过的旅行足迹录入其中。

#### 4.1 创建旅行计划

点击 **+ New Trip（新建旅行）**，并根据那次历史旅行的真实起止时间设定 **Start Date** 和 **End Date**：

![创建具有自定义日期范围的新旅行](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-create-new-trip-details.webp)上传一张好看的封面图（可以直接将图片拖入或从剪贴板粘贴），接着点击 **Create New Trip**：

![配置高质量的旅行封面图片](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-cover-image-upload.webp)#### 4.2 导入预订信息

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

![用于导入旅行 PDF 和预订文件的拖拽区域](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-import-travel-booking-files.webp)![已上传预订的处理窗口，显示提取状态](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-import-booking-pdf-processing-status.webp)由于我们已经启用了AI解析引擎，预订确认PDF文件会被自动分析，提取出结构化的预订日程。

检查解析结果无误后，点击 **Add** 将其正式写入预订数据中：

![审查由 AI 提取的结构化预订细节](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-review-parsed-booking-details.webp)如果有些预订确认仅保存在邮件中，您可以将其导出为PDF格式并上传，同样可以走这套提取流程。

在系统中，已导入的预订信息会以极具现代感的方式呈现：

![旅行预订的完整时间线展示](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-bookings-timeline-view.webp)![已确认交通预订的详细视图](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-booking-confirmation-details.webp)

在 **Plan（日程规划）** 页面中，所有的酒店和住宿点都会在地图上被优雅地标注出来：

![标有所有酒店住宿的交互式地图](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-plan-accommodations-map-display.webp)点击上方的 **Atlas（旅行足迹）**，您将能从清单和世界地图上直观地看到所有已拜访的国家：

![个人 Atlas 追踪器中的旅行历史概述](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-atlas-countries-visited-summary.webp)#### 4.3 添加旅行同伴

点击 **Share（分享）** 按钮：

![在 TREK 中打开旅行分享对话框](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-share-options-button.webp)在弹出的对话框底部，可以直接添加旅行同伴为Guest（嘉宾）：

![添加自定义旅行同伴和随行客人](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-add-companions-guests.webp)#### 4.4 记录旅行费用

点击 **Add expense（添加开销）**，来记录那些无法通过PDF预订单自动解析的杂项支出，例如境外险、当地公共交通费、临时SIM卡等：

![在支出表单中输入详细的花费数据](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-custom-expense-form.webp)![分摊账单明细和费用追踪账本](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-expenses-list-billing-split.webp)#### 4.5 拆分旅行阶段

该功能需要提前在后台激活“Trip Segment”插件。

对于那些超长周期的旅程，将其拆分为不同的阶段能让脉络更清晰，每个阶段都可以有自己独立的预订项目、待办事项和成本账单：

![将复杂的行程拆分为旅行段](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-segments-overview-display.webp)![显示地点和计划的活跃旅行段](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-segment-itinerary-details.webp)![在时间线上绘制不同的旅行航段](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-segments-interactive-map.webp)#### 4.6 创建Journal（日志）并查看旅行足迹（Atlas）

您还可以将几次旅行串联成一个 **Journey（旅程）**，并图文并茂地撰写游记故事，方便分享给您的朋友们：

![将多次旅行合并为一个可视化的旅程](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-create-new-journey-group.webp)![在旅程面板中撰写可视化故事](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-journey-timeline-story-writing.webp)![旅程内部的媒体收集和画廊网格](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-journey-gallery-media-grid.webp)![为协同旅程生成公开分享链接](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-journey-public-share-link.webp)### 5. 设计自定义行程与行李清单

点击 **+ New Trip**，输入旅行的专属名称并指定起止日期：

![创建未定日期旅行的初始提示对话框](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-planning-new-trip-setup.webp)**如果具体的出行时间还没有敲定，可以将日期项留空。** 此时系统会显示一个“天数配置（最高支持365天）”字段，您可以先设计每日的游玩内容，等后续买好机票后再一键锚定日期。

#### 5.1 添加地点/景点

这是旅行规划中最耗时的一步，但TREK提供了四种极具效率的方式来帮助您添加地点：

![向行程添加新地点的多种途径](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-places-methods-overview.webp)**1. 直接在地图上右键点击：** 会在该坐标处直接创建新地点，其标准地址会被系统自动逆地理编码解析出来：

![在地图界面右键点击以精确定位](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-right-click-map-location.webp)![所选地图坐标的自动逆地理编码](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-right-click-reverse-geocode-address.webp)**2. 点击 + Add Place/Activity：** 在搜索框中直接通过关键字进行检索

![使用文本输入搜索真实地点](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-search-place-by-name-input.webp)![显示带有地址标注的地点搜索结果列表](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-select-place-search-results-list.webp)![包含评论和评分的完整地点信息卡](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-place-details-rich-info-card.webp)**3. 直接粘贴谷歌地图分享链接：** （如 `maps.app.goo.gl/…` 或 `maps.google.com/…`）粘贴到检索栏中。TREK会自动抓取该地点的名称、地址和经纬度：

![直接从粘贴的 Google 地图分享链接解析地点](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-paste-google-maps-share-link.webp)![成功从地图 URL 中提取坐标](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-google-maps-parsed-location.webp)**4. 批量导入数据：** 这是最轻松的方案。如果您在Google Maps中维护着自己的“想去清单”，可以将其导出为 `.gpx` 文件（`.kml` 或 `.kmz` 格式亦支持），然后点击右侧面板的 **Import file**，一键拉取所有数据：

![使用 GPX 或 KML 文件批量导入地点](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-bulk-import-places-gpx-file.webp)推荐您可以先把所有感兴趣的项目都添加进来。至于如何将它们科学地归入到每一天的日程中，后续可以直接在面板里拖拽处理。

#### 5.2 每日日程与备注

Day Plan（每日计划）的核心逻辑是将所有的目的地按每日访问顺序进行排序。整个界面是一个可以折叠、支持任意拖放的模块：

![使用拖放操作自定义每日路线顺序](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-drag-drop-ordering.webp)这些细节机制设计得极其精妙实用：

- **中间移动方式**：点击每日日程左上角的公共汽车图标，可以设定各节点之间的过渡交通方式（如地铁、自驾、甚至是直达航班）：
![登记日行程各段之间的通勤交通方式](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-commuting-transport-button.webp)
- **每日备忘**：点击左下角的便签图标可以附加各种定制化提醒（例如：“今天需要提早出发”、“美术馆门票需提前预约”）：
![为天行程添加显眼的、带有图标的自定义备注](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-icon-tagged-notes-button.webp)
- **指定时间段**：从右侧拖拽地点并给它分配一个开始时间。设置了时间的地点会自动在地图上生成推荐的行进路线：
![带时间点的地点之间自动计算的交通路线](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-timed-places-routing.webp)
- 关于智能路线优化（**Route optimisation**）以及气候（**Weather**），您可以查阅 [Day Plans and Notes的Wiki文档](https://github.com/liketrek/TREK/wiki/Day-Plans-and-Notes)。

#### 5.3 收藏夹：可重复使用的地点清单

Collections（收藏夹）允许用户在具体的旅行项目之外，保存并分类管理自己精心收集的宝藏地点。您可以将其打包分享给朋友。这些地点在加入旅行时是采用**复制**的方式，因此在旅行日程中对其进行的任何个性化标注，都不会破坏您收藏夹里的原始干净数据。

点击顶部菜单栏中的 **Collections**：

![访问保存地点的自定义用户收藏夹](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-dashboard-view.webp)点击 **+ New list** 建立新的分类列表：

![在收藏夹中创建自定义列表](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-create-new-list.webp)点击 **+ Add a place** 并填入该地点的详细情况：

![手动输入表单以填充自定义收藏列表](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-add-place-manually-form.webp)**注意：** 收藏夹内的搜索组件偶尔可能会因网络原因失效，如果发生该情况，您可以通过手动输入来创建。

当地点带有准确的GPS坐标时，它们会精美地展示在地图中：

![在交互式地图上可视化自定义收藏中的地点](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-map-places-display.webp)如需批量组织这些地标，可以点击 **checkbox（勾选框）** 图标：

![批量标记已保存地点的选择模式](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-select-places-tickbox.webp)多选目标后，点击 **Assign label（分配标签）**：

![为选定的收藏地点分配描述性标签](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-group-assign-label.webp)在分配之前，先点击 **Manage labels（管理标签）** 来新建一些醒目的彩色分组标签：

![创建和管理自定义标签](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-manage-custom-labels.webp)点击一个具体标签，接着选择一键绑定：

![应用自定义标签到成组的地点](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-confirm-label-selection.webp)#### 5.4 费用与预算

在 **Costs（财务管理）** 页面中，我们可以录入其它的预备预算和旅途支出。

![完整的支出表格和余额结算账本](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-costs-budget-overall-expenses-list.webp)在结伴出行时，您可以在此页记录每个人的垫付账单，并选定分摊规则。

系统的结算后台采用了一种贪心匹配算法，计算并生成**最简化的转账精算方案**，帮大家用最少的转账次数轻松对齐账目。

### 6. 利用Model Context Protocol（MCP）实现AI驱动的旅行规划

TREK内置了 **MCP（模型上下文协议）服务器**。这意味着，AI智能体可以直接“读写”您的行程规划数据。它提供了超过150个精细的原子工具和30个核心数据源，全方位覆盖行程、地点、账目、行李、预订和多人协作。

#### 6.1 Cloudflare Zero Trust网络配置

由于我们的自托管服务运行在 [Cloudflare Zero Trust](/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp) 内网环境下，我们需要在“Split Tunnels（分流隧道）”配置中，将该服务的域名加入到 Inclusion List（包含/直连白名单）中。否则在进行 OAuth 登录授权发现时，接口调用会被网络策略阻断。具体的配置排障可以参考这个 GitHub 讨论贴：[GitHub Issue](https://github.com/liketrek/TREK/issues/1463)。

<article-card description="本文深入探讨如何使用 Cloudflare WARP 与 Zero Trust 技术，在完全不需要开启任何防火墙入站端口的情况下，安全地将您的 Hermes Agent 暴露到私有网络中，从而实现全球范围内的安全访问。这为您构建专属私有远程 AI 基础设施打下坚实基础。" image="https://inimages.techvoyage.dev/articles/Exposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP/ZH-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp" image-alt="通过 Cloudflare Zero Trust 和 WARP 隧道安全地将 Hermes Agent 暴露至私有网络" label="相关指南" min-read="5" title="教程：使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络" to="/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp">



</article-card>

![向 Cloudflare Warp 分流隧道（Split Tunnels）添加自定义域名](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-zero-trust-split-tunnels-domain.webp)#### 6.2 Claude Desktop客户端配置

点击 **+ New Client** 创设一个新的 AI 客户端接口：
![在设置中注册新的自定义客户端令牌](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-register-new-mcp-client.webp)

选择 **Claude Desktop** 选项卡，然后点击 **Register Client（注册客户端）**：

![生成 Claude Desktop 客户端凭据](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-mcp-claude-desktop-client-credentials.webp)系统此时会展示唯一的 Client ID 和 Client Secret，请妥善保存。接着点击 **Client Configuration（客户端配置）** 调出我们需要在本地写入的 JSON 代码片段：

![获取预格式化的 MCP 服务器配置块](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-mcp-client-configuration-block.webp)在 Claude Desktop 软件中，点击 **Edit Config** 会在代码编辑器中打开您本地的 MCP server 配置文件：

![编辑 Claude Desktop 的本地 MCP 配置文件 json](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-config-json.webp)将 TREK 的 MCP 代码块粘贴进去，并把占位符部分替换为上一步生成的客户端凭证：

```json
"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 已经成功连接：

![在 Claude 界面中验证活跃的 TREK 连接状态](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-trek-server-connected.webp)现在，您可以直接用日常口语来下达规划指令了：

![使用自然语言提示 Claude 操作旅行数据](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-natural-language-prompt.webp)例如，我们用纯中文录入一笔非标准化的日常开支：

```text
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.
```

![Claude 调用工具自动记录一笔支出](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-add-expense-response.webp)回到后台，刷新 **Costs** 面板。我们可以看到这笔打车费用已经被精确地记录下来，且因为命令中并未提及“由谁付款”，系统体贴地将付款人项归纳为了“No one paid yet（尚未有人支付）”：

![在费用视图中确认最新由 AI 解析的支出](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-costs-page-mcp-parsed-expense.webp)管理行李清单的方式也完全一致：

![Claude 使用自然语言提示添加打包清单物品](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-add-packing-items.webp)再次刷新 **Packing List** 页面，指定的这三样出行装备已经被整齐地加入到了清单之中：

![在打包清单页面中确认最新解析的打包物品](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-packing-list-mcp-parsed-items.webp)#### 6.3 Gemini CLI（动态注册）

Gemini CLI 对 **Dynamic Registration（动态注册机制）** 提供了极佳的支持，这使得您完全无需在系统后台手动预注册任何客户端凭证。直接将以下代码追加到您本地的 `.gemini/settings.json` 文件中：

```json
"trek": {
      "httpUrl": "https://trek.pafor.me/mcp",
      "oauth": {
        "enabled": true
      }
    }
```

在终端运行 `gemini` 命令，并在随后拉起的网页授权页面中点击 **Approve（批准）** 即可：
![批准针对 TREK MCP 服务器的 OAuth 访问授权](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/mcp-client-oauth-authorization-prompt.webp)

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

![使用 Gemini CLI 提示获取旅行行程](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/gemini-cli-mcp-prompt-itinerary.webp)![Gemini CLI 成功展示结构化的旅行信息](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/gemini-cli-mcp-display-itinerary.webp)#### 6.4 Kimi CLI（动态注册）

原理基本相同。请在本地 `/Users/<您的用户名>/.kimi/` 目录下找到 `mcp.json` 并写入以下连接配置：

```json
"trek": {
      "type": "http",
      "url": "https://trek.pafor.me/mcp",
      "auth": "oauth"
    }
```

在终端执行 `kimi mcp auth trek` 并在网页上点击 **Approve** 完成快速授权：
![批准针对 TREK MCP 服务器的 OAuth 访问授权](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/mcp-client-oauth-authorization-prompt.webp)

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

![授权成功后 Kimi CLI 显示的可用工具列表](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/kimi-cli-mcp-authorized-tools-list.webp)### 7. 移动端使用体验

在手机和移动设备上，TREK是以 PWA（渐进式Web应用）的形式呈现的。其内置的 Service Worker 能够将地图网格瓦片和日程 API 数据离线缓存，确保在野外或没有网络信号的极佳状态下，您依然能够流畅查看已制定的全部行程。不过，离线状态下的推送通知响应速度相较原生应用会有微小的延迟。

### 写在最后

通过 MCP 将 AI 智能体接入您的日常旅行规划，可以帮您省去那些因手动键入繁多的航班和酒店确认单而产生的大量枯燥劳动。不仅如此，AI 还能根据您指定的具体出行节点和所处季节，智能推荐周边的特色景点。仅仅通过几句随意的对话，AI 就能轻松打通从前期灵感检索、行程路线设计，再到后期预算拆分和行李打包的完整全链路。

不过在目前的版本中，依然存在一些微小的体验瑕疵。例如：通过 PDF 智能解析导入订单时，账单货币会默认对齐到旅行项目的主货币，而不是当时实际刷卡结算的付款货币。此外，在 Collections 收藏夹中新建清单列表时，如果在列表尚未保存时就给它配置封面，该封面可能在保存后失效（您需要在列表正式建立后，点击“编辑”来重新添加并保存，即可解决）。

此外，因为它需要您拥有一定的 VPS 运维基础来亲自运行这套程序，对一般用户确实存在一些上手门槛。TREK 更适合那些重度旅行爱好者、数字游民以及对于自身出行数据隐私和排版有着高水准要求的极客用户。我们由衷地建议您在下定决心搭建自托管服务之前，可以先在 [demo.liketrek.com](https://demo.liketrek.com/) 上完整试用一下官方提供的公测 DEMO，看它是否切中您的日常痛点。

### 参考资料:

- [TREK Quick Start](https://github.com/liketrek/TREK/wiki/Quick-Start)
- [TREK Troubleshooting](https://github.com/liketrek/TREK/wiki/Troubleshooting)
- [TREK MCP Scopes](https://github.com/liketrek/TREK/wiki/MCP-Scopes)
