已有 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 inspect
和 docker 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:latest
→docker.1ms.run/mytesla/teslamateapi:latest
其他常用镜像也可以类似替换,例如:
postgres:17
→docker.1ms.run/postgres:17
eclipse-mosquitto:2
→docker.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_USER | string | teslamate | 数据库用户名 |
DATABASE_PASS | string | secret | 数据库密码 |
DATABASE_NAME | string | teslamate | 数据库名称 |
DATABASE_HOST | string | database | 数据库主机地址 |
ENCRYPTION_KEY | string | ⚠️ 必须与 TeslaMate 的加密密钥完全一致 | |
MQTT_HOST | string | mosquitto | MQTT 代理主机 |
TZ | string | Europe/Berlin | 时区设置(参考 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) |
可选环境变量
变量名 | 类型 | 默认值 | 说明 |
---|---|---|---|
TESLAMATE_SSL | boolean | false | 是否使用 SSL 连接 TeslaMate |
TESLAMATE_HOST | string | teslamate | TeslaMate 主机地址 |
TESLAMATE_PORT | string | 4000 | TeslaMate 端口 |
API_TOKEN | string | 🔐 API 访问令牌(强烈建议设置) | |
API_TOKEN_DISABLE | string | false | 禁用 API 令牌验证(生产环境不建议) |
DATABASE_PORT | integer | 5432 | 数据库端口 |
DATABASE_TIMEOUT | integer | 60000 | 数据库连接超时时间(毫秒) |
DATABASE_SSL | boolean | true | 是否使用 SSL 连接数据库 |
DEBUG_MODE | boolean | false | 启用调试日志 |
DISABLE_MQTT | boolean | false | 禁用 MQTT 功能 |
MQTT_TLS | boolean | false | 是否使用 TLS 连接 MQTT |
MQTT_PORT | integer | 1883 (TLS 时为 8883) | MQTT 代理端口 |
MQTT_USERNAME | string | MQTT 用户名 | |
MQTT_PASSWORD | string | MQTT 密码 | |
MQTT_NAMESPACE | string | MQTT 主题命名空间 | |
MQTT_CLIENTID | string | 随机 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,需要配置网络暴露。
可选方案:
- Tailscale - 零配置 VPN 解决方案
- Cloudflare Tunnel - 企业级隧道服务
- Sakura FRP - 专业内网穿透服务(国内推荐)
如果使用 Sakura FRP:
-
注册并获取访问密钥 (Token)
- 访问 https://www.natfrp.com/ 并注册一个账户。
- 登录后,在左侧菜单进入 用户中心 -> API 信息 页面。
- 找到您的 访问密钥,点击"复制"按钮。这个密钥就是我们需要的
NATFRP_TOKEN
。
-
创建隧道
- 在左侧菜单进入 服务 -> 隧道列表 页面。
- 点击"创建隧道",配置如下图。
-
绑定子域名
- 在左侧菜单进入 服务 -> 子域绑定 页面。
- 点击"绑定子域名",配置如下图。
-
远程管理配置
- 启动服务后,回到 Sakura FRP 网站,在左侧菜单进入 服务 -> 远程管理。
- 您应该能看到一个在线的设备。选择它。
- 在 启动密码 处,填入
qYMeu4yq1deFoGlutd4
。 - 点击"连接",即可远程管理您的 FRP 客户端。
-
验证连接:
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.app
或https://your-domain.com
- 本地访问:
http://您的IP:8080
在 Mytesla.cc 中配置
- 访问 Mytesla.cc
- 进入设置页面
- 添加您的 API 端点地址
- 测试连接状态