无公网 IP 部署 Teslamate 并实现内网穿透 以及 云服务器部署 Teslamate 指北 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
gococonut
V2EX    分享创造

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

  •  1
     
  •   gococonut 44 天前 2504 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    本篇将介绍两种部署方式,一种是 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 和 Docker Compose 的 NAS 或树莓派设备。
    • 基础的 SSH 或命令行操作知识或 NAS 后台 docker 应用。
    • 一个 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 脚本功能特性

    • 自动安装 Docker 和 Docker Compose
    • 交互式配置环境变量
    • 自动生成安全密码
    • 配置 SSL 证书( Let's Encrypt )
    • 基础认证保护
    • 使用 Mytesla 优化镜像
    • 支持百度地图精确定位
    • 自动启动服务
    • 支持更新服务
    • 支持备份以及恢复数据

    5. Mytesla UI 推荐

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

    5.1 Mytesla UI 特色功能

    实时车辆监控

    • 电池状态实时显示
    • 充电进度跟踪
    • 位置信息监控

    数据分析

    • 详细的行驶数据分析
    • 能耗统计报告
    • 充电费用统计
    • 峰谷用电充电自动计费

    通知提醒

    • 充电完成通知
    • 行程完成通知
    • 周期数据统计
    • 更新车机 OTA 提醒

    5.2 获取 Mytesla UI

    第 1 条附言    44 天前
    NAS 用户,第一步:准备 Docker Compose 文件 部分的补充。

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

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

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

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

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

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

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

    mytesla UI 是浏览器直接与 mytesla/teslamateapi 建立连接的,不会经过任何服务器,不是服务器访问所以也就没有 IP 白名单的说法。
    czwstc
        24
    czwstc  
       43 天前
    你是不是暴露的不是 Teslamate ,而是一个叫 mytesla/teslamateapi 的容器端口。
    我觉得可以把 image 名字命名成 api4teslamate 更加合理一些
    gococonut
        25
    gococonut  
    OP
       43 天前
    @czwstc #22 加了 basic auth 账号密码登录。
    yunbin678
        26
    yunbin678  
       28 天前
    @czwstc #24 可以下一个
    @czwstc #24 特特管家
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3544 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 04:16 PVG 12:16 LAX 21:16 JFK 00:16
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86