跳到主要内容

已有 TeslaMate 集成

如果您已经部署了 TeslaMate,只需要添加 TeslaMateAPI 服务即可使用 Mytesla。

适合人群
  • 已经运行 TeslaMate 的用户
  • 熟悉 Docker 的用户
  • 希望保留现有配置的用户
注意

强烈建议操作前进行数据备份 Backup and Restore

已使用 teslmate 2.0 测试。较低版本未测试。

集成概览

在现有 TeslaMate 基础上添加:

前置检查

在开始之前,请确认您的现有系统:

必需条件

  • ✅ TeslaMate 正常运行
  • ✅ PostgreSQL 数据库可访问
  • ✅ 知道数据库连接信息
  • ENCRYPTION_KEY 与 TeslaMate 相同

获取现有配置信息

首先,找到您的 TeslaMate 容器名称:

# 查找 TeslaMate 容器名称
docker ps | grep teslamate

# 输出示例会显示容器名称,如:teslamate、teslamate_teslamate_1 等

然后,使用正确的容器名称获取配置信息:

# 查看现有 TeslaMate 容器配置(将 'teslamate' 替换为您的实际容器名称)
docker inspect teslamate | grep -A 20 "Env"

# 使用 exec 查找重要的环境变量
docker exec teslamate env | grep -E "(DATABASE|ENCRYPTION|MQTT)"

# 备选方案:查看所有环境变量并手动筛选
docker exec teslamate printenv
找到容器名称

如果 docker ps | grep teslamate 显示多个容器或使用不同的命名(如 teslamate_teslamate_1),请在后续的 docker inspectdocker exec 命令中使用输出中显示的确切容器名称。

您需要记录以下信息:

  • 数据库用户名 (DATABASE_USER)
  • 数据库密码 (DATABASE_PASS)
  • 数据库名称 (DATABASE_NAME)
  • 数据库主机 (DATABASE_HOST)
  • 加密密钥 (ENCRYPTION_KEY) ⚠️ 必须相同!
安全建议

强烈建议为 TeslaMateAPI 设置 API_TOKEN 以防止未授权访问。将其添加到您的 .env 文件中:

# 生成安全令牌
API_TOKEN=$(openssl rand -hex 32)
echo "API_TOKEN=$API_TOKEN" >> .env

方案一:Docker Compose 集成(推荐)

步骤 1: 备份现有配置

# 备份现有的 docker-compose.yml
cp docker-compose.yml docker-compose.yml.backup

# 备份环境变量文件
cp .env .env.backup

步骤 2: 添加 TeslaMateAPI 服务

大陆网络优化

由于大陆网络环境的特殊性,如果无法拉取 Docker 镜像,可以使用镜像加速服务:

  • mytesla/teslamateapi:latestdocker.1ms.run/mytesla/teslamateapi:latest

其他常用镜像也可以类似替换,例如:

  • postgres:17docker.1ms.run/postgres:17
  • eclipse-mosquitto:2docker.1ms.run/eclipse-mosquitto:2

在您的 docker-compose.yml 文件中添加以下服务:

services:
# ... 您现有的服务配置 ...

# 添加 TeslaMateAPI 服务
teslamateapi:
image: mytesla/teslamateapi:latest
container_name: teslamateapi
restart: unless-stopped
environment:
- DATABASE_USER=${TM_DB_USER} # 与 TeslaMate 相同
- DATABASE_PASS=${TM_DB_PASS} # 与 TeslaMate 相同
- DATABASE_NAME=${TM_DB_NAME} # 与 TeslaMate 相同
- DATABASE_HOST=database # 您的数据库服务名
- ENCRYPTION_KEY=${TM_ENCRYPTION_KEY} # ⚠️ 必须与 TeslaMate 完全相同!
- MQTT_HOST=mosquitto # 如果使用 MQTT
- TZ=${TZ:-Asia/Shanghai} # 📍 请替换为您的时区,参考 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- API_TOKEN=${API_TOKEN} # 🔐 强烈建议设置以提高安全性
ports:
- "8080:8080" # 可修改为其他端口
volumes:
- teslamateapi-data:/opt/app/data
depends_on:
- database # 确保与您的数据库服务名匹配
- teslamate
- mosquitto

# 添加 Sakura FRP 服务(可选 - 用于网络暴露)
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:
teslamateapi-data:
driver: local
sakurafrp-data:
重要提示

ENCRYPTION_KEY 必须与 TeslaMate 使用的加密密钥完全相同,否则无法读取加密的数据!

步骤 3: 配置环境变量

如果使用 Sakura FRP,在 .env 文件中添加以下内容:

# Sakura FRP 配置(可选)
NATFRP_TOKEN=您的_sakura_frp_密钥

步骤 4: 启动服务

# 启动新的服务
docker-compose up -d teslamateapi sakurafrp

# 查看启动日志
docker-compose logs -f teslamateapi
docker-compose logs -f sakurafrp

# 检查服务状态
docker-compose ps

环境变量配置参考

必需环境变量

所有必需的环境变量都必须设置,即使有默认值可用:

变量名类型默认值说明
DATABASE_USERstringteslamate数据库用户名
DATABASE_PASSstringsecret数据库密码
DATABASE_NAMEstringteslamate数据库名称
DATABASE_HOSTstringdatabase数据库主机地址
ENCRYPTION_KEYstring⚠️ 必须与 TeslaMate 的加密密钥完全一致
MQTT_HOSTstringmosquittoMQTT 代理主机
TZstringEurope/Berlin时区设置(参考 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)

可选环境变量

变量名类型默认值说明
TESLAMATE_SSLbooleanfalse是否使用 SSL 连接 TeslaMate
TESLAMATE_HOSTstringteslamateTeslaMate 主机地址
TESLAMATE_PORTstring4000TeslaMate 端口
API_TOKENstring🔐 API 访问令牌(强烈建议设置)
API_TOKEN_DISABLEstringfalse禁用 API 令牌验证(生产环境不建议)
DATABASE_PORTinteger5432数据库端口
DATABASE_TIMEOUTinteger60000数据库连接超时时间(毫秒)
DATABASE_SSLbooleantrue是否使用 SSL 连接数据库
DEBUG_MODEbooleanfalse启用调试日志
DISABLE_MQTTbooleanfalse禁用 MQTT 功能
MQTT_TLSbooleanfalse是否使用 TLS 连接 MQTT
MQTT_PORTinteger1883 (TLS 时为 8883)MQTT 代理端口
MQTT_USERNAMEstringMQTT 用户名
MQTT_PASSWORDstringMQTT 密码
MQTT_NAMESPACEstringMQTT 主题命名空间
MQTT_CLIENTIDstring随机 4 位字符MQTT 客户端 ID

方案二:独立容器部署

如果您不使用 Docker Compose,可以独立运行 TeslaMateAPI 容器:

创建数据卷

首先,创建容器将使用的数据卷:

# 创建命名卷用于持久化数据
docker volume create teslamateapi-data

创建独立容器

# 获取现有网络名称
NETWORK_NAME=$(docker inspect teslamate --format='{{range .NetworkSettings.Networks}}{{.NetworkID}}{{end}}')

# 运行 TeslaMateAPI 容器
# 注意:如果网络环境无法拉取镜像,可将 mytesla/teslamateapi:latest 替换为 docker.1ms.run/mytesla/teslamateapi:latest
docker run -d \
--name teslamateapi \
--network $NETWORK_NAME \
--restart unless-stopped \
-p 8080:8080 \
-e DATABASE_USER=teslamate \
-e DATABASE_PASS=your_db_password \
-e DATABASE_NAME=teslamate \
-e DATABASE_HOST=your_db_host \
-e API_TOKEN=your_secure_api_token \
-e ENCRYPTION_KEY=your_encryption_key \
-e MQTT_HOST=your_mqtt_host \
-e TZ=Asia/Shanghai \ # 📍 请替换为您的时区,参考 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
-v teslamateapi-data:/opt/app/data \
mytesla/teslamateapi:latest

添加网络暴露

为了让 Mytesla 能够访问您的 TeslaMateAPI,需要配置网络暴露。

可选方案:

  1. Tailscale - 零配置 VPN 解决方案
  2. Cloudflare Tunnel - 企业级隧道服务
  3. Sakura FRP - 专业内网穿透服务(国内推荐)

如果使用 Sakura FRP:

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

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

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

    • 在左侧菜单进入 服务 -> 子域绑定 页面。
    • 点击"绑定子域名",配置如下图。
  4. 远程管理配置

    • 启动服务后,回到 Sakura FRP 网站,在左侧菜单进入 服务 -> 远程管理
    • 您应该能看到一个在线的设备。选择它。
    • 启动密码 处,填入 qYMeu4yq1deFoGlutd4
    • 点击"连接",即可远程管理您的 FRP 客户端。
  5. 验证连接:

    docker logs -f sakurafrp

验证集成

检查服务状态

# 查看所有容器状态
docker-compose ps

# 检查 TeslaMateAPI 日志
docker-compose logs teslamateapi

# 验证 API 健康状态
curl -f http://localhost:8080/health

Mytesla 前端集成

获取 API 端点地址

根据您选择的网络暴露方案:

  • Tailscale: https://api.mytesla.ts.net
  • Cloudflare: https://your-domain.com
  • Sakura FRP: https://your-subdomain.nyat.apphttps://your-domain.com
  • 本地访问: http://您的IP:8080

在 Mytesla.cc 中配置

  1. 访问 Mytesla.cc
  2. 进入设置页面
  3. 添加您的 API 端点地址
  4. 测试连接状态