V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
gococonut
V2EX  ›  分享创造

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

  •  1
     
  •   gococonut · 9 天前 · 2058 次点击

    前言

    本篇将介绍两种部署方式,一种是 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 条附言  ·  9 天前
    NAS 用户,第一步:准备 Docker Compose 文件 部分的补充。

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

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

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

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

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

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

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

    mytesla UI 是浏览器直接与 mytesla/teslamateapi 建立连接的,不会经过任何服务器,不是服务器访问所以也就没有 IP 白名单的说法。
    czwstc
        24
    czwstc  
       9 天前
    你是不是暴露的不是 Teslamate ,而是一个叫 mytesla/teslamateapi 的容器端口。
    我觉得可以把 image 名字命名成 api4teslamate 更加合理一些
    gococonut
        25
    gococonut  
    OP
       9 天前
    @czwstc #22 加了 basic auth 账号密码登录。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   935 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:09 · PVG 06:09 · LAX 15:09 · JFK 18:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.