绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

2026-07-28 21:35:24 0点赞 4收藏 0评论

一、TREK 项目介绍

TREK 是一个自托管的旅行规划工具,支持多人实时协作。简单来说,你可以把它理解为一个团队版的”旅行计划本”,所有参与者可以同时看到最新的行程变动。

核心功能

🗺️ 行程规划

  • 拖拽式日程安排,支持跨天移动

  • 交互式地图(Leaflet 或 Mapbox GL),支持 3D 建筑、地形、路线可视化

  • 地点搜索(Google Places 或免费 OpenStreetMap)

  • 支持导入 Google Maps 分享列表、GPX/KML/KMZ/GeoJSON 地图文件

  • 16 天天气预报(Open-Meteo,无需 API Key)

🧳 旅行管理

  • 预订管理:机票、住宿、餐厅,支持导入确认邮件和 PDF

  • 费用追踪:Splitwise 风格的分账、多币种支持

  • 打包清单:分类、模板、成员分配、进度追踪

  • 文档管理:附件、票据、PDF 导出

🤝 协作功能

  • WebSocket 实时同步,所有改动即时可见

  • 多用户行程,基于角色的访问控制

  • 邀请链接(一次性或可重复使用,带有效期)

  • SSO 单点登录(OIDC,支持 Google、Apple、Authentik、Keycloak 等)

  • 双因素认证(TOTP + 备用码)、Passkeys 无密码登录

📱 移动端 & PWA

  • 可安装为 PWA,iOS 和 Android 直接通过浏览器安装,无需应用商店

  • 离线支持,Service Worker 缓存

  • 触摸优化,移动端专属布局

其他亮点:20 种语言支持(含简体/繁体中文)、AI 辅助(可让 AI 创建行程、生成打包清单等)、管理员面板、自动备份。

技术栈:NestJS 11 + Zustand + WebSocket 实时同步 + JWT/OAuth 2.1/OIDC/WebAuthn 认证

二、部署项目

1、在docker文件夹中创建trek文件夹;

2、打开docker-选择项目-创建-项目名称输入trek-存放路径自动带出;

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

3、粘贴docker compose;

# ============================================================================= # Docker Compose 配置文件 - TREK 旅行规划应用 # 项目主页: https://github.com/liketrek/TREK # 镜像: mauriceboe/trek:latest (官方 Docker Hub) # ============================================================================= services: # ------------------------------------------------------------------------- # 主应用服务 # ------------------------------------------------------------------------- trek: # 使用官方镜像,建议固定版本号(如 mauriceboe/trek:3.4.1)避免意外升级 image: mauriceboe/trek:latest # 容器名称,便于管理(docker logs trek, docker stop trek 等) container_name: trek # ======== 安全加固 ======== # 根文件系统只读,防止应用意外修改容器内的系统文件 read_only: true # 禁止容器进程获取新权限(如 setuid/setgid 提权) security_opt: - no-new-privileges:true # 删除所有 Linux Capabilities,仅添加必需的最小权限集 cap_drop: - ALL cap_add: - CHOWN # 允许更改文件所有者(上传文件时需修改权限) - SETUID # 允许设置进程用户 ID(安全上下文切换) - SETGID # 允许设置进程组 ID # 临时文件存储:使用内存 tmpfs,限制大小并禁用执行 tmpfs: - /tmp:noexec,nosuid,size=64m # noexec 防止执行恶意脚本,size 限制内存占用 # ======== 端口映射 ======== # 宿主机端口(你通过浏览器访问的端口): 容器内端口(应用实际监听的端口) # 重要:官方镜像默认监听 3000,且环境变量 PORT 可能被忽略, # 因此宿主机端口设为 10000,容器端口保持 3000,以保持兼容。 # 访问地址:http://你的NAS_IP:10000 ports: - "10000:3000" # ======== 环境变量 ======== # 所有变量均支持从外部 .env 文件注入(${VAR:-default} 语法) environment: # ---- 基础必填 ---- # 运行环境:生产环境务必设为 production,否则性能下降且泄露堆栈信息 - NODE_ENV=production # 容器内部监听端口(建议保持 3000,与端口映射的容器端一致) # 如果镜像忽略此变量,则默认仍是 3000,不影响映射 - PORT=3000 # 加密密钥:用于加密会话、JWT 及数据库敏感字段(API 密钥、MFA 备用码等) # 必须设置!请用命令生成:openssl rand -hex 32 # 将生成的 64 位十六进制字符串填入 .env 文件中的 ENCRYPTION_KEY=xxx # 警告:密钥一旦设置,切勿丢失或随意更改,否则已加密数据将永久无法解密! - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} # 时区:建议设为 Asia/Shanghai,使日志和日程时间符合中国习惯 - TZ=${TZ:-Asia/Shanghai} # 日志级别:可选 debug/info/warn/error,生产环境推荐 info - LOG_LEVEL=${LOG_LEVEL:-info} # 跨域来源(CORS):多个域名用逗号分隔,生产环境应明确指定 # 若留空,可能允许所有来源(不安全),建议填入你的访问域名/IP - ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-} # 应用外部访问 URL:用于生成邮件链接、OIDC 回调地址等。 # 必须填写,否则功能异常。示例:http://192.168.1.100:10000 - APP_URL=${APP_URL:-} # ---- 可选配置(根据需求取消注释) ---- # 如果使用 HTTP 协议访问(非 HTTPS),必须设为 false,否则浏览器会拒绝 Cookie - COOKIE_SECURE=false # 如果应用部署在 HTTPS 反向代理(如 Nginx)后面,且代理已终结 TLS, # 则取消注释以下两行,并注释掉上面的 COOKIE_SECURE=false # - FORCE_HTTPS=true # - TRUST_PROXY=1 # ---------- OIDC 单点登录(SSO)配置 ---------- # 如需启用 OIDC 登录,请取消注释并填写实际值 # - OIDC_ISSUER=https://auth.example.com # - OIDC_CLIENT_ID=trek # - OIDC_CLIENT_SECRET=supersecret # - OIDC_DISPLAY_NAME=SSO # - OIDC_ADMIN_CLAIM=groups # - OIDC_ADMIN_VALUE=app-trek-admins # ======== 数据持久化 ======== # 将宿主机的目录挂载到容器内,保证数据在容器重启/更新后不丢失 volumes: # 应用数据(SQLite 数据库、配置文件、日志等) - ./data:/app/data # 用户上传的文件(图片、附件等) - ./uploads:/app/uploads # 重启策略:除非手动停止,否则容器退出后自动重启(适合生产环境) restart: unless-stopped # ======== 健康检查 ======== # Docker 定期检查应用是否存活,便于监控和自动恢复 healthcheck: # 用 wget 访问健康检查端点(容器内部访问 localhost:3000,因为映射不影响内部) test: ["CMD", "wget", "-qO-", "http://localhost:3000/api/health"] interval: 30s # 每 30 秒检查一次 timeout: 10s # 单次检查超时时间 retries: 3 # 连续失败 3 次标记为不健康 start_period: 15s # 容器启动后等待 15 秒再开始检查,避免启动期间误判

4、点击立即部署-等待跑码

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

5、还在跑码,有点慢呢。。。

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

6、这个时候你要在本地电脑创建一个.env文件,上传到trek文件夹中

env文件内容:

ENCRYPTION_KEY=你生成的32字节十六进制密钥 TZ=Asia/Shanghai LOG_LEVEL=info APP_URL=http://你的NAS_IP:10000 ALLOWED_ORIGINS=http://你的NAS_IP:10000绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

7、这个时候docker就完成了;

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

8、查看容器的日志,日志中会有email和password,复制保存一下;

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

9、容器启动后,在浏览器访问:http://你的NAS_IP:10000;如:http://192.168.100.100:10000;

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

10、输入保存的email和password,会要求设置新密码,输入自己的密码;

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

11、报错了。。。

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

12、记住密码要有大写小字母、数字和特殊字符,一共要8位;例如:国际通用密码:Aa123456.

13、感谢使用。。。

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

14、进入界面

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

15、开始旅行。。。

  • 货币小知识:CNY:在岸人民币-CNY全称是Chinese Yuan;CNH:离岸人民币-CHN全称是Chinese Yuan in HONG KONG

绿联NAS:搭建TREK一个自托管的旅行/旅行规划工具

16、祝大家有个美好的旅程,哈哈。。出发GOGOGO

三、参考文档:

1、项目地址:https://github.com/liketrek/TREK

2、演示地址:https://demo.liketrek.com/

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
4
扫一下,分享更方便,购买更轻松