---
title: "Tự host kế hoạch du lịch của bạn với TREK và Docker"
description: "Tìm hiểu cách triển khai TREK với Docker, bảo mật qua Cloudflare R2 và Caddy, đồng thời sử dụng các tác nhân AI qua MCP để lập kế hoạch du lịch liền mạch."
canonical_url: "https://techvoyage.dev/vi/article/self-hosted-travel-planner-trek"
last_updated: "2026-09-03"
---

Phần tẻ nhạt nhất của việc lập kế hoạch du lịch là các tệp PDF đặt vé máy bay, xác nhận khách sạn, các cuộc trò chuyện với bạn đồng hành và danh sách các địa điểm muốn ghé thăm thường bị rải rác ở nhiều nơi khác nhau. Khi đến lúc tính toán tổng chi tiêu và chia hóa đơn, bạn sẽ phải tốn rất nhiều công sức để lục lọi lại toàn bộ đống dữ liệu du lịch đó.

TREK là một công cụ lập kế hoạch du lịch mã nguồn mở có thể tự lưu trữ (self-host), giúp gom toàn bộ lịch trình, thông tin đặt chỗ, ngân sách và danh sách đồ dùng cần mang theo vào một nơi duy nhất. Server MCP tích hợp sẵn cho phép các tác nhân AI (chẳng hạn như Claude Desktop) thao tác trực tiếp với dữ liệu du lịch của bạn.

Hướng dẫn này sẽ đi cùng bạn qua mọi bước, từ triển khai cài đặt đến việc quản lý hoàn chỉnh một chuyến đi thực tế từ đầu đến cuối.

### 1. Cách triển khai công cụ lập kế hoạch du lịch TREK bằng Docker

#### Cài đặt Docker trên VPS Ubuntu

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

#### Tạo khóa mã hóa

TREK sử dụng một khóa để mã hóa dữ liệu nhạy cảm. Hãy sử dụng lệnh sau hoặc [công cụ trực tuyến](/vi/tools/secret-key-hex) này để tạo khóa mã hóa:

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

Hãy lưu khóa này ở nơi an toàn; việc mất khóa đồng nghĩa với việc bạn sẽ mất quyền truy cập vào dữ liệu đã được mã hóa.

#### Khởi chạy container

```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 phải được định cấu hình chính xác** — luồng khám phá OAuth của server MCP phụ thuộc vào biến này. Hãy thiết lập nó thành địa chỉ HTTPS công khai cuối cùng của bạn ngay từ đầu.

Lần chạy đầu tiên sẽ mất một khoảng thời gian để tải image về:

![Nhật ký docker pull và run cho TREK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-docker-pull-image.webp)Xác nhận container đang hoạt động:

```bash
docker ps
```

![Xác minh trạng thái container đang chạy qua docker ps](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-docker-ps-status.webp)### 2. Thiết lập định tuyến tên miền & SSL với Caddy Reverse Proxy

Giao thức HTTPS là bắt buộc đối với passkey, và OAuth đối với MCP. Tên miền được lưu trữ trên Cloudflare, đi kèm với chứng chỉ SSL miễn phí và tính năng bảo vệ DDoS.

Caddy được thiết lập như một máy chủ reverse proxy bảo mật để trỏ về cổng 3000. Ví dụ về file cấu hình Caddyfile như sau:

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

### 3. Cấu hình ban đầu & Thiết lập quản trị viên bảo mật

Có hai cách để tạo tài khoản quản trị viên (admin):

- **ADMIN_EMAIL và ADMIN_PASSWORD** được thiết lập làm biến môi trường; các giá trị này sẽ được sử dụng trực tiếp.
- TREK tự động tạo email `admin@trek.local`, tên đăng nhập `admin`, và một **mật khẩu được tạo ngẫu nhiên in trong container log**. Chạy lệnh `docker logs trek` để lấy mật khẩu này.

Nếu không tìm thấy mật khẩu từ log, bạn có thể đặt lại bằng lệnh:

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

Bạn sẽ được nhắc đổi mật khẩu trong lần đăng nhập đầu tiên.

![Lời nhắc đăng nhập lần đầu và đặt lại mật khẩu quản trị viên](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-initial-login-password-prompt.webp)Nhấp vào mục **Admin** và cập nhật địa chỉ email:![Thiết lập email tùy chỉnh trong cài đặt quản trị viên của TREK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-admin-email-update-panel.webp)

#### 3.1 Sao lưu (Backups)

Định cấu hình sao lưu tự động với chính sách lưu trữ (retention policy) trong bảng quản trị:
![Cấu hình lịch trình sao lưu tự động và quy tắc lưu trữ](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-admin-backup-retention-policy.webp)

#### 3.2 Lưu trữ các tệp đã tải lên vào Cloudflare R2

Lưu trữ các tệp đã tải lên, ảnh và bản sao lưu trong Cloudflare R2 giúp dung lượng đĩa của VPS luôn sạch sẽ và nhẹ nhàng. TREK hỗ trợ các backend tương thích S3, và Cloudflare R2 hoàn toàn phù hợp với điều này.

1. Tạo một bucket R2 tên là `trek`.
2. Trong phần **Account Details**, tìm ID tài khoản của bạn:
  ![Tìm ID tài khoản Cloudflare trong cổng thông tin](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-r2-account-details-id.webp)
3. Nhấp vào **Manage API Tokens**:
  ![Màn hình Quản lý mã thông báo API của cổng thông tin Cloudflare](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-r2-manage-api-tokens-button.webp)
4. Nhấp vào **Create Account API token** với quyền đọc/ghi (read/write) cho bucket:
  ![Tạo mã thông báo truy cập R2 với quyền đọc và ghi](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/cloudflare-r2-create-token-permissions.webp)
5. Nhấp vào mục **Storage** trên bảng **ADMINISTRATION**:
  ![Điều hướng đến cài đặt lưu trữ trong bảng điều khiển của TREK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-administration-storage-menu.webp)
6. Nhấp vào nút **Add Backend** và điền đầy đủ endpoint, bucket cùng thông tin đăng nhập:
  ![Cấu hình chương trình lưu trữ Cloudflare R2 tương thích S3](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-storage-backend-credentials.webp)
7. Nhấp vào **Apply**, sau đó nhấp vào liên kết nút **Test**. Bạn sẽ thấy dòng chữ "Connection OK":
  ![Kiểm tra kết nối lưu trữ thành công hiển thị Connection OK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-test-storage-backend-connection-ok.webp)
8. Chuyển tất cả các danh mục lưu trữ sang Cloudflare R2 và nhấp vào **Save changes**:
  ![Định tuyến tất cả các danh mục lưu trữ tệp sang Cloudflare R2](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-switch-storage-categories-r2.webp)

#### 3.3 Đăng nhập bằng Passkey

TREK hỗ trợ đăng nhập bằng passkey, xác thực hai yếu tố (2FA) và đăng nhập một lần OIDC (SSO). Đối với passkey, hãy nhập tên miền của bạn và các origin được phép (allowed origins) trong phần cài đặt, sau đó nhấp vào **Save**:

![Đăng ký các nguồn gốc được phép để xác thực Passkey an toàn](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-passkey-allowed-origins-settings.webp)Nếu không định cấu hình mục **allowed origins**, việc đăng ký passkey sẽ không thành công.

#### 3.4 Google Maps API Key

Khóa Google Maps API giúp bổ sung thêm thông tin phong phú cho việc tìm kiếm địa điểm như xếp hạng, giờ mở cửa và hình ảnh. TREK sẽ tự động chuyển sang sử dụng OpenStreetMap nếu không có khóa, chỉ là không hiển thị xếp hạng và hình ảnh.

Truy cập [liên kết](https://mapsplatform.google.com/maps-demo-key/) này và nhấp vào **Get demo key** để yêu cầu cấp khóa:                                                  ![Yêu cầu khóa API của Google Maps Platform](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/google-maps-get-demo-api-key.webp)

Dán khóa vào cài đặt và nhấp vào **Test** để xác nhận kết nối:
![Xác minh khả năng kết nối khóa API Google Maps trong cài đặt](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-google-maps-key-test-connection.webp)

#### 3.5 Tích hợp AI

Mô hình AI được sử dụng để phân tích và chuyển đổi các email xác nhận đặt chỗ cũng như tệp PDF thành các dữ liệu đặt chỗ có cấu trúc.

Nhấp vào mục **Addons** ở menu bên trái và bật **AI Parsing**. Chọn "OpenAI" (or nhà cung cấp tương thích khác) và điền thông tin chi tiết:

![Bật tiện ích bổ sung Phân tích cú pháp AI với tích hợp OpenAI](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-addons-enable-ai-parsing-openai.webp)#### 3.6 Truy cập qua MCP

Trong mục **Addons**, bật tính năng **MCP**:

![Kích hoạt tiện ích bổ sung máy chủ MCP của Giao thức Ngữ cảnh Mô hình](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-addons-enable-mcp.webp)#### 3.7 Các Plugin

Các plugin sau đây được khuyến nghị cài đặt và rất đáng để kích hoạt:

![Danh sách các tiện ích bổ sung và plugin được khuyên dùng đang hoạt động](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-recommended-addons-plugins-activation.webp)#### 3.8 Tạo tài khoản người dùng hàng ngày

Hãy lập kế hoạch các chuyến đi với tư cách là một người dùng bình thường, thay vì dùng tài khoản quản trị viên. Tạo một người dùng thông thường và đăng nhập bằng tài khoản đó:

![Tạo tài khoản người dùng thông thường trong bảng điều khiển của TREK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-create-regular-user-form.webp)Sau khi đăng nhập, hãy thêm một passkey hoặc thiết lập xác thực 2FA để tăng cường bảo mật cho tài khoản:

![Cấu hình cài đặt bảo mật của người dùng bằng Passkey và 2FA](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-user-security-passkey-2fa-setup.webp)Nhấp vào **+ Add a passkey**, nhập mật khẩu hiện tại và xác nhận:

![Xác nhận mật khẩu để đăng ký Passkey phần cứng mới](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-passkey-confirm-password.webp)### 4. Kiểm tra cài đặt: Nhập dữ liệu du lịch trong quá khứ

Cách tuyệt vời nhất để làm quen với TREK là bắt đầu ghi lại lịch sử du lịch trước đây của bạn.

#### 4.1 Tạo chuyến đi mới

Nhấp vào **+ New Trip** và thiết lập **Start Date** cũng như **End Date** tương ứng với các ngày diễn ra chuyến đi trong quá khứ:

![Tạo một chuyến đi mới với phạm vi ngày tùy chỉnh](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-create-new-trip-details.webp)Thêm ảnh bìa (bằng cách kéo thả hoặc dán từ khay nhớ tạm) rồi nhấp vào **Create New Trip**:

![Thiết lập ảnh bìa chuyến đi chất lượng cao](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-cover-image-upload.webp)#### 4.2 Nhập thông tin đặt chỗ

Kéo thả tất cả các tệp thông tin chuyến bay, tàu hỏa và phương tiện di chuyển khác vào:

![Khu vực kéo và thả để nhập tệp PDF chuyến đi và đặt chỗ](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-import-travel-booking-files.webp)![Cửa sổ xử lý đặt chỗ đã tải lên hiển thị thông tin trích xuất](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-import-booking-pdf-processing-status.webp)Khi bật tính năng AI, các tệp PDF xác nhận đặt chỗ sẽ được phân tích tự động và trích xuất thành các bản đặt chỗ có cấu trúc rõ ràng.

Xem lại kết quả đã trích xuất và nhấp vào **Add** để lưu thông tin chi tiết đặt chỗ:

![Xem xét chi tiết đặt chỗ có cấu trúc được trích xuất bằng AI](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-review-parsed-booking-details.webp)Nếu thông tin đặt chỗ chỉ nằm trong email, hãy xuất email đó thành tệp PDF rồi kéo thả vào — quy trình trích xuất tự động tương tự sẽ được áp dụng.

Các ảnh chụp màn hình sau đây hiển thị cách hiển thị của các thông tin đặt chỗ:

![Hiển thị dòng thời gian toàn diện về các lượt đặt chỗ chuyến đi](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-bookings-timeline-view.webp)![Chế độ xem chi tiết về lượt đặt chỗ phương tiện đã được xác nhận](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-booking-confirmation-details.webp)

Trên trang **Plan**, tất cả các thông tin lưu trú sẽ được hiển thị trực quan trên bản đồ:

![Bản đồ tương tác hiển thị tất cả các nơi lưu trú](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-plan-accommodations-map-display.webp)Nhấp vào mục **Atlas** trên thanh menu trên cùng để xem danh sách (và bản đồ) hiển thị mọi quốc gia mà bạn đã từng ghé thăm:

![Tổng quan lịch sử du lịch trong trình theo dõi Atlas cá nhân](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-atlas-countries-visited-summary.webp)#### 4.3 Thêm bạn đồng hành

Nhấp vào nút **Share**:

![Mở hộp thoại chia sẻ chuyến đi trong TREK](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-share-options-button.webp)Ở cuối hộp thoại, bạn có thể thêm các khách mời đồng hành (guests):

![Thêm bạn đồng hành và khách tùy chỉnh](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-add-companions-guests.webp)#### 4.4 Ghi nhận chi phí

Nhấp vào **Add expense** để thêm các khoản chi phí khác ngoài đặt chỗ, chẳng hạn như bảo hiểm du lịch, phương tiện công cộng địa phương, thẻ SIM:

![Nhập dữ liệu chi tiêu chi tiết vào biểu mẫu chi phí](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-custom-expense-form.webp)![Bảng chia hóa đơn và sổ cái theo dõi chi phí](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-expenses-list-billing-split.webp)#### 4.5 Phân đoạn chuyến đi

Tính năng này yêu cầu plugin Trip Segment phải được kích hoạt trước.

Các chuyến đi dài ngày sẽ được chia nhỏ thành các chặng một cách đẹp mắt, trong đó mỗi chặng hiển thị rõ các thông tin đặt chỗ, địa điểm và chi phí tương ứng:

![Chia nhỏ lịch trình phức tạp thành các phân đoạn chuyến đi](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-segments-overview-display.webp)![Phân đoạn chuyến đi đang hoạt động hiển thị các địa điểm và lịch trình](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-segment-itinerary-details.webp)![Vẽ bản đồ các chặng đi riêng biệt trên dòng thời gian](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-trip-segments-interactive-map.webp)#### 4.6 Tạo hành trình (Journey) và kiểm tra atlas của bạn

Gom các chuyến đi thành một **Journey** và viết các câu chuyện trải nghiệm để chia sẻ chuyến phiêu lưu với bạn bè:

![Tổng hợp nhiều chuyến đi thành một Hành trình trực quan (Journey)](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-create-new-journey-group.webp)![Soạn thảo các câu chuyện trực quan trong bảng Hành trình](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-journey-timeline-story-writing.webp)![Bộ sưu tập phương tiện và lưới thư viện bên trong một Hành trình](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-journey-gallery-media-grid.webp)![Tạo liên kết chia sẻ công khai cho các Hành trình cộng tác](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-journey-public-share-link.webp)### 5. Thiết kế lịch trình du lịch và danh sách đồ dùng cá nhân

Nhấp vào **+ New Trip**, nhập tên chuyến đi và thiết lập ngày tháng:

![Hộp thoại nhắc ban đầu để tạo một chuyến đi không ghi ngày](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-planning-new-trip-setup.webp)**Nếu bạn chưa chốt ngày đi cụ thể, hãy để trống cả hai mục.** Một trường "số ngày" sẽ xuất hiện (cho phép lên đến 365 ngày). Lập kế hoạch trước, xếp lịch sau.

#### 5.1 Thêm địa điểm

Đây là bước tốn nhiều thời gian nhất của bất kỳ kế hoạch du lịch nào, và TREK cung cấp một số cách để thực hiện điều đó:

![Các phương pháp đa kênh để thêm địa điểm mới vào lịch trình](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-add-places-methods-overview.webp)**1. Nhấp chuột phải trên bản đồ** để tạo một địa điểm tại vị trí chính xác đó — địa chỉ sẽ được xác định tự động bằng tính năng reverse-geocoding:

![Nhấp chuột phải vào bản đồ để xác định chính xác vị trí](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-right-click-map-location.webp)![Tự động địa mã hóa ngược các tọa độ bản đồ đã chọn](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-right-click-reverse-geocode-address.webp)**2. Nhấp vào + Add Place/Activity** và tìm kiếm theo tên

![Tìm kiếm các địa điểm thực tế bằng cách nhập văn bản](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-search-place-by-name-input.webp)![Hiển thị kết quả tìm kiếm địa điểm với thông tin địa chỉ](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-select-place-search-results-list.webp)![Thẻ thông tin địa điểm toàn diện với các đánh giá và xếp hạng](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-place-details-rich-info-card.webp)**3. Dán một đường link Google Maps** (`maps.app.goo.gl/...` hoặc `maps.google.com/...`) vào trường tìm kiếm. TREK sẽ tự động phân tích tên, địa chỉ và tọa độ của địa điểm đó:

![Phân tích cú pháp địa điểm trực tiếp từ liên kết chia sẻ Google Maps được dán](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-paste-google-maps-share-link.webp)![Trích xuất thành công tọa độ từ URL bản đồ](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-google-maps-parsed-location.webp)**4. Nhập hàng loạt (Bulk import)** — cách dễ dàng nhất trong số tất cả. Nếu bạn đã lưu trữ sẵn một danh sách các địa điểm "muốn đi" trên Google Maps, hãy xuất danh sách đó dưới dạng `.gpx` (các định dạng `.kml` và `.kmz` cũng được hỗ trợ) rồi nhấp vào **Import file** ở bảng bên phải để nạp tất cả cùng lúc:

![Thực hiện nhập địa điểm hàng loạt bằng tệp GPX hoặc KML](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-bulk-import-places-gpx-file.webp)Trước tiên hãy thêm tất cả những nơi thú vị mà bạn muốn ghé thăm, bất kể chúng có phù hợp với thời gian hay không. Bạn sẽ phân bổ địa điểm vào các ngày cụ thể sau đó.

#### 5.2 Kế hoạch hàng ngày và ghi chú

Kế hoạch Ngày (Day Plan) sắp xếp các địa điểm theo ngày một cách có thứ tự. Đó là một danh sách có thể thu gọn cho từng ngày, hỗ trợ thao tác kéo thả vô cùng thuận tiện:

![Tùy chỉnh các tuyến đường hàng ngày bằng thao tác kéo và thả](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-drag-drop-ordering.webp)Những chi tiết làm nên sự hữu ích của tính năng này:

- **Di chuyển giữa các điểm dừng**: biểu tượng xe buýt ở góc trên bên trái của một ngày dùng để thêm thông tin phương tiện công cộng (tàu hỏa, xe buýt hoặc các chặng bay trong ngày):
![Đăng ký phương tiện di chuyển giữa các phân đoạn trong ngày](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-commuting-transport-button.webp)
- **Ghi chú ngày**: biểu tượng ghi chú ở góc dưới bên trái giúp đính kèm các dòng ghi chú có gắn emoji — "hôm nay xuất phát sớm", "bảo tàng này yêu cầu phải đặt vé trước":
![Thêm ghi chú tùy chỉnh có gắn thẻ biểu tượng hiển thị rõ ràng vào các ngày](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-icon-tagged-notes-button.webp)
- **Khung thời gian**: kéo một địa điểm từ bảng bên phải vào một ngày, sau đó thiết lập thời gian cụ thể. Các địa điểm có mốc thời gian cố định sẽ được kết nối lộ trình tự động trên bản đồ:
![Các tuyến đường di chuyển được tính tự động giữa các địa điểm có mốc thời gian](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-day-plan-timed-places-routing.webp)
- Vui lòng tham khảo [trang wiki Day Plans and Notes](https://github.com/liketrek/TREK/wiki/Day-Plans-and-Notes) để biết thêm thông tin về **Tối ưu hóa lộ trình** và **Thời tiết**.

#### 5.3 Collections: Danh sách địa điểm có thể tái sử dụng

Tính năng Bộ sưu tập (Collections) cho phép người dùng lưu trữ một danh sách các địa điểm độc lập với bất kỳ chuyến đi cụ thể nào. Nó có thể được chia sẻ với bạn bè và luôn sẵn sàng cho các chuyến đi kế tiếp. Các địa điểm sẽ được **sao chép** vào từng chuyến đi, do đó việc chỉnh sửa một địa điểm trong chuyến đi cụ thể sẽ không bao giờ làm thay đổi bộ sưu tập gốc của bạn và ngược lại.

Nhấp vào mục **Collections** trên thanh menu trên cùng:

![Truy cập bộ sưu tập tùy chỉnh của người dùng cho các địa điểm đã lưu](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-dashboard-view.webp)Nhấp vào **+ New list** để tạo một danh sách mới:

![Tạo danh sách tùy chỉnh trong bộ sưu tập của người dùng](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-create-new-list.webp)Nhấp vào **+ Add a place** và điền thông tin chi tiết:

![Nhập biểu mẫu thủ công để đưa địa điểm vào danh sách bộ sưu tập tùy chỉnh](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-add-place-manually-form.webp)**Lưu ý:** thanh tìm kiếm bên trong hộp thoại "Add a place" dường như chưa hoạt động tốt, vì vậy bạn cần phải nhập các thông tin chi tiết theo cách thủ công.

Nếu các địa điểm có sẵn tọa độ địa lý, chúng sẽ được hiển thị trực tiếp trên bản đồ:

![Trực quan hóa các địa điểm trong bộ sưu tập trên bản đồ tương tác](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-map-places-display.webp)Để sắp xếp các địa điểm bằng nhãn dán (labels), hãy nhấp vào biểu tượng **hộp kiểm (tick-box)**:

![Chế độ chọn để gắn nhãn hàng loạt cho các địa điểm đã lưu](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-select-places-tickbox.webp)Chọn các địa điểm muốn nhóm lại, sau đó nhấp vào **Assign label**:

![Gán nhãn mô tả cho các địa điểm bộ sưu tập đã chọn](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-group-assign-label.webp)Nhấp vào **Manage labels** để tiến hành tạo nhãn trước:

![Tạo và quản lý các nhãn tùy chỉnh](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-manage-custom-labels.webp)Chọn một nhãn và nhấp vào **Assign label**:

![Áp dụng nhãn tùy chỉnh cho các nhóm địa điểm](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-collections-confirm-label-selection.webp)#### 5.4 Chi phí và ngân sách

Chúng ta có thể thêm các khoản chi tiêu khác cho chuyến đi trên trang 'Costs'.

![Bảng chi phí toàn diện và sổ cái quyết toán số dư](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-costs-budget-overall-expenses-list.webp)Các khoản thanh toán do các bạn đồng hành chi trả có thể được thêm vào và phân chia ngay trên cùng một trang này.

Bảng quyết toán (settlement panel) áp dụng thuật toán so khớp tham lam (greedy-matching algorithm) để tính toán **số lượng giao dịch chuyển tiền tối thiểu** cần thực hiện để phân chia công bằng ai nợ ai, và nợ bao nhiêu.

### 6. Khai thác Model Context Protocol (MCP) để lập kế hoạch du lịch bằng AI

TREK tích hợp sẵn một **server MCP (Model Context Protocol)**, cho phép các tác nhân AI đọc và ghi trực tiếp dữ liệu du lịch của bạn — bao gồm hơn 150 công cụ và 30 tài nguyên quản lý các chuyến đi, địa điểm, ngân sách, danh sách đồ dùng, đặt chỗ và cộng tác.

#### 6.1 Cloudflare Zero Trust

Vì TREK hoạt động phía sau mạng lưới bảo mật [Cloudflare Zero Trust](/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp), bạn cần thêm tên miền của mình vào danh sách split tunnels inclusion. Nếu không, bạn sẽ gặp lỗi khi tiến hành xác thực OAuth. Vui lòng tham khảo vấn đề lỗi này trên GitHub: [github issue](https://github.com/liketrek/TREK/issues/1463).

<article-card description="Tìm hiểu cách hiển thị và truy cập an toàn Hermes Agent trên toàn cầu bằng nền tảng Cloudflare WARP và Zero Trust mà không cần mở bất kỳ cổng tường lửa nào." image="https://inimages.techvoyage.dev/articles/Exposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP/VI-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp" image-alt="Hiển thị an toàn Hermes Agent vào mạng riêng bằng Cloudflare Zero Trust và đường hầm WARP" label="Hướng dẫn liên quan" min-read="10" title="Cách hiển thị riêng tư Hermes Agent với Cloudflare WARP" to="/article/exposing-hermes-agent-to-private-network-using-cloudflare-warp">



</article-card>

![Thêm tên miền tùy chỉnh vào 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

Nhấp vào **+ New Client** để bắt đầu tạo một AI agent client mới:
![Đăng ký mã thông báo khách tùy chỉnh mới trong cài đặt](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-register-new-mcp-client.webp)

Chọn tab **Claude Desktop** và nhấp vào **Register Client**:

![Tạo thông tin xác thực khách của Claude Desktop](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-mcp-claude-desktop-client-credentials.webp)Một cặp thông tin bao gồm Client ID và Client Secret sẽ được hiển thị. Hãy sao chép và cất chúng ở nơi an toàn. Sau đó, nhấp vào mục **Client Configuration** để hiển thị cấu hình cấu hình MCP:

![Lấy khối cấu hình máy chủ MCP định dạng sẵn](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-mcp-client-configuration-block.webp)Trong ứng dụng Claude Desktop, nhấp vào **Edit Config** để mở tệp cấu hình máy chủ MCP cục bộ:

![Chỉnh sửa tệp json cấu hình MCP cục bộ của Claude Desktop](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-config-json.webp)Dán cấu hình của TREK vào, thay thế các phần giữ chỗ bằng thông tin xác thực của bạn:

```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>\"}"
      ]
    }
  },
```

Khởi động lại Claude Desktop, khi đó máy chủ TREK sẽ hiển thị trạng thái đã kết nối trong mục **Local MCP servers**:

![Xác minh trạng thái kết nối TREK đang hoạt động bên trong giao diện Claude](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-trek-server-connected.webp)Bây giờ, hãy thử chạy một câu lệnh (prompt):

![Yêu cầu Claude bằng ngôn ngữ tự nhiên để thao tác với dữ liệu du lịch](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-natural-language-prompt.webp)Hãy thử thêm một khoản chi phí bằng ngôn ngữ tự nhiên:

```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 sử dụng các công cụ để tự động ghi lại chi phí](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-add-expense-response.webp)Kiểm tra trang **Costs**, bạn sẽ thấy chi phí đã được tạo với trạng thái "No one paid yet" (Chưa có ai thanh toán) do không có thông tin người chi trả được nhắc đến trong câu lệnh:

![Xác nhận chi phí AI mới được phân tích cú pháp trong chế độ xem Chi phí](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-costs-page-mcp-parsed-expense.webp)Việc thêm đồ dùng vào danh sách hành lý cũng hoạt động tương tự:

![Claude thêm các đồ dùng cần chuẩn bị bằng cách nhập ngôn ngữ tự nhiên](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/claude-desktop-mcp-add-packing-items.webp)Tải lại trang **Packing List** và bạn sẽ thấy cả ba vật dụng đã xuất hiện ở đó:

![Xác nhận các đồ dùng mới được phân tích trên trang Danh sách chuẩn bị hành lý](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/trek-packing-list-mcp-parsed-items.webp)#### 6.3 Gemini CLI (Đăng ký động)

Gemini CLI hỗ trợ tính năng **đăng ký động (dynamic registration)**, nghĩa là bạn không cần tạo trước client. Chỉ cần thêm đoạn sau vào `.gemini/settings.json`:

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

Chạy lệnh `gemini` trong terminal và nhấp vào **Approve** khi hộp thoại yêu cầu xác thực xuất hiện:
![Phê duyệt quyền truy cập OAuth cho máy chủ TREK MCP](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/mcp-client-oauth-authorization-prompt.webp)

Sau đó bắt đầu bằng một câu lệnh đơn giản:

![Yêu cầu Gemini CLI tìm lịch trình du lịch](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/gemini-cli-mcp-prompt-itinerary.webp)![Gemini CLI hiển thị thành công thông tin chuyến đi có cấu trúc](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/gemini-cli-mcp-display-itinerary.webp)#### 6.4 Kimi CLI (Đăng ký động)

Cách tiếp cận tương tự — thêm đoạn cấu hình vào file `mcp.json` nằm trong thư mục `/Users/<user>/.kimi/`:

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

Chạy lệnh `kimi mcp auth trek` trong terminal và nhấp vào **Approve**:
![Phê duyệt quyền truy cập OAuth cho máy chủ TREK MCP](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/mcp-client-oauth-authorization-prompt.webp)

Sau khi hoàn tất xác thực, danh sách các công cụ có sẵn sẽ được liệt kê:

![Kimi CLI hiển thị các công cụ có sẵn sau khi ủy quyền thành công](https://inimages.techvoyage.dev/articles/Self%20hosted%20travel%20planner%20TREK/kimi-cli-mcp-authorized-tools-list.webp)### 7. Trải nghiệm trên thiết bị di động

TREK là một Ứng dụng Web Lũy tiến (PWA) trên các thiết bị di động. Một service worker sẽ lưu bộ nhớ đệm (cache) cho các phần bản đồ và dữ liệu API, giúp lịch trình của bạn luôn có thể đọc được ngay cả khi ngoại tuyến (offline). Tuy nhiên, tính năng thông báo đẩy có thể gặp một chút độ trễ so với ứng dụng gốc (native app)."

### Lời kết

Kết nối các tác nhân AI thông qua giao thức MCP giúp giảm thiểu phần lớn công việc tẻ nhạt khi nhập dữ liệu đặt chỗ chuyến bay và chỗ ở. Ngoài ra, các tác nhân cũng có thể đề xuất các địa điểm tham quan thú vị dựa trên ngày du lịch và mùa cụ thể trong năm của bạn. Chỉ với một cuộc hội thoại duy nhất với một AI agent, bạn có thể xử lý toàn bộ quy trình, từ tìm kiếm nghiên cứu, xây dựng lịch trình cho đến theo dõi ngân sách và sắp xếp hành lý.

Tuy nhiên, ứng dụng vẫn tồn tại một số lỗi kỹ thuật nhỏ. Ví dụ: khi nhập dữ liệu đặt chỗ từ tệp PDF, đơn vị tiền tệ sẽ tự động đặt mặc định theo đồng tiền gốc của chuyến đi thay vì đơn vị tiền tệ thực tế đã thanh toán. Ngoài ra, khi tạo một danh sách mới trong Collections, bất kỳ ảnh bìa nào được thêm vào trong quá trình tạo đều sẽ biến mất sau khi lưu, mặc dù bạn hoàn toàn có thể tự đính kèm lại một cách thủ công khi chỉnh sửa.

Bên cạnh đó, việc tự lưu trữ cũng tạo ra một rào cản kỹ thuật nhỏ khi bạn cần phải vận hành nó trên máy chủ của riêng mình. TREK được thiết kế chủ yếu dành cho những người đi du lịch thường xuyên và có kỳ vọng rất cao về cách họ quản lý và tổ chức dữ liệu du lịch của mình. Chúng tôi khuyên bạn nên thử nghiệm bản demo chính thức tại [demo.liketrek.com](https://demo.liketrek.com/) trước khi quyết định tự host.

### Tài liệu tham khảo:

- [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)
