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

17 天前
 gococonut

前言

本篇将介绍两种部署方式,一种是 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

2207 次点击
所在节点    分享创造
26 条回复
xinyana
17 天前
好重,内网穿透好多轻量级工具吧
gococonut
17 天前
@xinyana 这还重?都容器化界面操作了。找的都是免费够用的,不需要自己折腾。你用啥打洞?
SakuraYuki
17 天前
一般情况下猫做好端口转发都能穿吧,除非你那 udp 被 qos 的很严重或者买的十八手宽带
gococonut
17 天前
@SakuraYuki 不懂点技术,不好处理,有些人就 NAS docker 应用界面操作搞搞。写这个目的是让更多的人能自己部署,懂技术的自己想咋弄咋弄。
hxsf
17 天前
推广[Mytesla UI], 请发推广区。
分享[Mytesla UI],可以直接分享。这文章很软文
xceszzy
17 天前
要 49 呢。充电都要用谷电电我,只能体验 5 天了。
SakuraYuki
17 天前
@gococonut #4 对不懂技术的人来说你让他们用 docker 比直接下一个 tailscale 那可难太多了
gococonut
17 天前
@SakuraYuki #7 错了,他们还真会用 docker ,我接触到的很多完全不懂技术,跟着教程也能自己搭起来。 而且 NAS 大多是 编辑 yml 文件直接页面操作的。tailscale 太不方便了,要一直开着,有时还不稳定。
Latin
17 天前
等我什么时候买的起特斯拉再说,哈哈
xceszzy
17 天前
https://imgur.com/a/2WkRuZV 这玩意儿 没有 app 么。 这样就容易推送,分享了。
fuzzsh
17 天前
> 重要提示:请勿修改此 docker-compose.yml 文件的任何内容,我们将在后续步骤中通过其他方式配置变量。

不揣测你的居心,用惯一键脚本的小白肯定不会细究 var 的用途,在明显配了 password/secret 的文件,不标出且不让他改?只要拿 http 特征上 shodan 一搜,数据一网打尽,虽说监测数据泄露不影响行车安全
Tink
17 天前
@SakuraYuki #7 小白一般是喜欢 docker compose 一把梭的
gococonut
17 天前
@fuzzsh 别断章取义,很多人甚至不知道 ${VAR} 到底意味着什么,强调的是别乱改,有太多人直接用的 teslamate 官方文档的默认账号密码,只是为了方便。你自己试一下一键脚本再来评论。 你的好意我理解,别阴阳怪气的,好好说话,还什么居心。 内网只暴露了 8080 而且有 API TOKEN ,sakura 的端口子域名都是一层保护。云服务的脚本所有密码都是自动随机生成的。
fuzzsh
17 天前
将 teslamateapi mapping 到公网,API_TOKEN 固定 LEM3nUfT5xFJGR9PhzLu ,teslamateapi 唯一的 secret 都暴露了,不知道从那里来的保护,所谓域名也算保护的话,我也无话可说
而且互联网上又不止 shodan 一家做探测,大多数是全端口探测
gococonut
17 天前
@fuzzsh #14 你家 NAS 直接暴露公网的?端口怎么就暴露了? API_TOKEN 以及各种密码我也贴条了强调了,内网的除了 API TOKEN 其他的固定也没什么问题。整个文档还挺长很多步骤,有问题你指出来没问题,都是为了安全。注意你说话方式方法。动不动揣测你的居心?这话听也太难听了。
fuzzsh
17 天前
不知道你理不理解 frp 的工作方式,mapping 到公网都不是暴露?加个域名就是保护?
行吧,我是打中文字提出的质疑,tag 上境外势力就行
1018ji
17 天前
买不起
czwstc
17 天前
上公网的后果就是你的车出现在 https://teslamap.io/?i=1 这个网站上。
安全意识很重要
gococonut
17 天前
@fuzzsh #16 不知道你理不理解我写的东西。你可以先去学学中文。
gococonut
17 天前
@czwstc 云服务加了反向代理,所有密码都是随机生成的很安全。

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

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

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

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

© 2021 V2EX