无公网 IP 部署 Teslamate 并实现内网穿透 以及 云服务器部署 Teslamate 指北

2025 年 8 月 27 日
 yekk

前言

本篇将介绍两种部署方式,一种是 NAS/树莓派部署,一种是云服务器部署。

NAS/树莓派部署 Teslamate 并实现 API 内网穿透指北

本指南将带您一步步完成以下目标:

  1. 在您的 NAS 或树莓派(等支持 Docker 的设备)上,通过 Docker Compose 部署 Teslamate 、Grafana 、PostgreSQL 数据库、Mosquitto MQTT 服务以及 TeslamateAPI 。
  2. 配置并启动 Sakura FRP (樱花穿透)服务,将内网的 TeslamateAPI 端口暴露到公网。
  3. 将您的车辆授权给本地 Teslamate 服务进行数据记录。
  4. 将穿透后的公网 API 地址和令牌配置到 portal.mytesla.cc,解锁高级数据统计、自动计费和实时通知等强大功能。

准备工作:


第一步:准备 Docker Compose 文件

首先,在您的 NAS 或树莓派上创建一个新的工作目录,例如 teslamate ,然后进入该目录。

mkdir teslamate
cd teslamate

接着,创建一个名为 docker-compose.yml 的文件,并将您提供的以下内容完整地复制粘贴进去。

重要提示:请勿修改此 docker-compose.yml 文件的任何内容,我们将在后续步骤中通过其他方式配置变量。

# docker-compose.yml
services:
  teslamate:
    image: docker.1ms.run/mytesla/teslamate:v2.1
    restart: always
    environment:
      - ENCRYPTION_KEY=wJrM9nILN5wM5Zm4Z
      - DATABASE_USER=teslamate
      - DATABASE_PASS=44TqZYlH8odDc2hqPYE
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
      - BD_MAP_AK=
      - BD_MAP_SK=
    ports:
      - "4000:4000"
    volumes:
      - ./import:/opt/app/import
    cap_drop:
      - all

  database:
    image: docker.1ms.run/postgres:17
    restart: always
    environment:
      - POSTGRES_USER=teslamate
      - POSTGRES_PASSWORD=44TqZYlH8odDc2hqPYE
      - POSTGRES_DB=teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: docker.1ms.run/mytesla/grafana:v2.1
    restart: always
    environment:
      - DATABASE_USER=teslamate
      - DATABASE_PASS=teslamate
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
    ports:
      - "3000:3000"
    volumes:
      - teslamate-grafana-data:/var/lib/grafana

  mosquitto:
    image: docker.1ms.run/eclipse-mosquitto:2
    restart: always
    command: mosquitto -c /mosquitto-no-auth.conf
    volumes:
      - mosquitto-conf:/mosquitto/config
      - mosquitto-data:/mosquitto/data

  teslamateapi:
    image: mytesla/teslamateapi:latest
    container_name: teslamateapi
    restart: unless-stopped
    environment:
      - DATABASE_USER=teslamate
      - DATABASE_PASS=44TqZYlH8odDc2hqPYE
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - ENCRYPTION_KEY=wJrM9nILN5wM5Zm4Z
      - MQTT_HOST=mosquitto
      - TZ=Asia/Shanghai
      - API_TOKEN=LEM3nUfT5xFJGR9PhzLu
    ports:
      - "8080:8080"
    volumes:
      - teslamateapi-data:/opt/app/data
    depends_on:
      - database

  sakurafrp:
    image: natfrp.com/launcher:latest
    restart: always
    ports:
      - "7102:7102"
    environment:
      LANG: zh_CN.UTF-8
      TZ: Asia/Shanghai
      NATFRP_TOKEN: ${NATFRP_TOKEN}
      NATFRP_REMOTE: qYMeu4yq1deFoGlutd4
    volumes:
      - sakurafrp-data:/run

volumes:
  teslamate-db:
  teslamate-grafana-data:
  mosquitto-conf:
  mosquitto-data:
  teslamateapi-data:
  sakurafrp-data:

第二步:配置 Sakura FRP 内网穿透

要让 portal.mytesla.cc 能够访问到我们部署在内网的 TeslamateAPI ,我们需要一个公网地址。Sakura FRP 就是来实现这一点的工具。

  1. 注册并获取访问密钥 (Token)

    • 访问 https://www.natfrp.com/ 并注册一个账户。
    • 登录后,在左侧菜单进入 用户中心 -> API 信息 页面。
    • 找到您的 访问密钥,点击“复制”按钮。这个密钥就是我们需要的 NATFRP_TOKEN
  2. 创建隧道

    • 在左侧菜单进入 服务 -> 隧道列表 页面。
    • 点击“创建隧道”,配置如下图。
  3. 绑定子域名

    • 在左侧菜单进入 服务 -> 子域绑定 页面。
    • 点击“绑定子域名”,配置如下图。

    至此,您应该拥有了两个关键信息:

    • 公网地址: mycar.xxx.com:远程端口号 (请替换为您自己的子域名和端口号)
    • 访问密钥 (Token): 从第一步获取的一长串字符。

第三步:启动 Docker 服务

  1. 配置访问密钥 修改 docker-compose.yml 文件,将 ${NATFRP_TOKEN} 的值替换为从 Sakura FRP 网站复制的访问密钥。

  2. 启动所有容器teslamate 目录下,运行以下命令以后台模式启动所有服务或直接在 NAS 后台 docker 应用中启动所有服务。 首次启动会下载所有镜像,请耐心等待。启动完成后,可以通过 docker-compose ps 命令查看所有容器是否都处于 runningup 状态。

  3. 远程管理配置 此时, sakurafrp 容器应该已经成功连接到了服务器。 回到 Sakura FRP 网站,在左侧菜单进入 服务 -> 远程管理。 您应该能看到一个在线的设备。选择它。 在 启动密码 处,填入 docker-compose.ymlsakurafrp 服务里 NATFRP_REMOTE 字段的值: qYMeu4yq1deFoGlutd4 。 点击“连接”,即可远程管理您的 FRP 客户端(例如查看日志、重载配置等)。 做下如图操作:

第四步:授权车辆给 Teslamate

  1. 在浏览器中访问您的 Teslamate 主面板:http://<你的 NAS 或树莓派 IP>:4000
  2. 您会看到一个登录界面。按照页面提示,您需要获取特斯拉账户的 Access TokenRefresh Token
  3. 点击页面上的链接,或使用其他第三方工具(如 Auth for Tesla App )生成这两个令牌。
  4. 将获取到的两个令牌粘贴到输入框中,点击登录。
  5. 如果一切顺利,Teslamate 将开始从特斯拉服务器拉取您车辆的历史数据和实时信息。这可能需要一些时间。

第五步:在 portal.mytesla.cc 中配置 API

  1. 登录您的 mytesla.cc 账户。
  2. 进入 设置 页面,并切换到 Teslamate 选项卡。
  3. TeslamateAPI 地址: 填写您在 第二步 中获取的 完整公网地址,格式为 https://mycar.xxx.com:远程端口号。注意,协议是 https,并且必须包含端口号。
  4. TeslamateAPI 令牌: 填写 docker-compose.yml 文件中 teslamateapi 服务里 API_TOKEN 字段的值:LEM3nUfT5xFJGR9PhzLu
  5. 点击“保存”。

如果配置正确, mytesla.cc 将会显示“连接成功”的提示。稍等片刻,您就可以在 mytesla.cc 的仪表盘、行程、充电等页面看到由您自己部署的 Teslamate 所提供的精准数据了!同时,行程结束通知、充电完成通知、每日/每周/每月统计报告等高级功能也将自动启用。

恭喜!您已成功搭建了一套完全由自己掌控的特斯拉数据记录与分析系统。

云服务器部署 TeslaMate 指北

TeslaMate 是一个功能强大的 Tesla 车辆数据记录和分析平台。本指南将帮助您在海外腾讯云服务器上安全部署 TeslaMate (支持用户名登录),包括域名、服务器配置、SSL 证书配置等完整流程。

1. 准备工作

2. 云服务器以及域名

推荐购买企鹅云新加坡轻应用服务器即可( 99/年)

3. 配置 DNS 解析

3.1 添加 A 记录

在腾讯云 DNS 解析控制台:

  1. 主机记录: teslamate(或您喜欢的子域名)
  2. 记录类型: A
  3. 记录值: 您的服务器公网 IP
  4. TTL: 600

3.2 添加 CNAME 记录(可选)

如果需要 www 访问:

  1. 主机记录: www
  2. 记录类型: CNAME
  3. 记录值: teslamate.yourdomain.com
  4. TTL: 600

4. 一键部署脚本

提供了一个交互式安装脚本,可以自动完成所有配置:

4.1 登录服务器

bash -c "$(curl -sSL https://s.mytesla.cc/install.sh)"

4.2 脚本功能特性

5. Mytesla UI 推荐

在成功部署 TeslaMate 后,强烈推荐您使用 Mytesla UI

5.1 Mytesla UI 特色功能

实时车辆监控

数据分析

通知提醒

5.2 获取 Mytesla UI

3319 次点击
所在节点    分享创造
26 条回复
czwstc
2025 年 8 月 27 日
你好,你是作者吗?我有几个问题
我是 Teslamate 多年的用户,的确觉得 teslamate 的 UI 不够好看。如果是一个付费 UI ,我是愿意购买的。
如果付费的 UI 价格更贵,例如 49 美金,我觉得 Tesla 社区应该也会不少人支持。
但我也是不愿意把硬件服务暴露到公网的。
我大概看了下这个服务的文档,我找到了大量端口穿透的教程。。但是没理解穿透的端口是 mytesla 的端口还是 teslamate 的端口?

所以我的问题是:
1.mytesla 能否部署在本地,在本地连接 teslamate
2.mytesla 如果部署云端需要访问 Teslamate ,能否提供访问 IP 的列表,这样可以方便开启白名单。
czwstc
2025 年 8 月 27 日
@gococonut 虽然加了反向代理,但是对你这个域名扫一下一样,teslamate 直接上公网每个人都可以看到了吧
yekk
2025 年 8 月 27 日
@czwstc #21

打洞是暴露了一个 RESTful 服务。是 mytesla/teslamateapi 的服务。

> 1.mytesla 能否部署在本地,在本地连接 teslamate

目前不支持部署在本地,但是你可以用 http://lan.mytesla.cc 访问内网数据,可以不打洞。

> 2.mytesla 如果部署云端需要访问 Teslamate ,能否提供访问 IP 的列表,这样可以方便开启白名单。

mytesla UI 是浏览器直接与 mytesla/teslamateapi 建立连接的,不会经过任何服务器,不是服务器访问所以也就没有 IP 白名单的说法。
czwstc
2025 年 8 月 27 日
你是不是暴露的不是 Teslamate ,而是一个叫 mytesla/teslamateapi 的容器端口。
我觉得可以把 image 名字命名成 api4teslamate 更加合理一些
yekk
2025 年 8 月 27 日
@czwstc #22 加了 basic auth 账号密码登录。
yunbin678
2025 年 9 月 11 日
@czwstc #24 可以下一个
@czwstc #24 特特管家

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1155161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX