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

21 天前
 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

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

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

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

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

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

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

mytesla UI 是浏览器直接与 mytesla/teslamateapi 建立连接的,不会经过任何服务器,不是服务器访问所以也就没有 IP 白名单的说法。
czwstc
21 天前
你是不是暴露的不是 Teslamate ,而是一个叫 mytesla/teslamateapi 的容器端口。
我觉得可以把 image 名字命名成 api4teslamate 更加合理一些
gococonut
21 天前
@czwstc #22 加了 basic auth 账号密码登录。
yunbin678
6 天前
@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