绿联 NAS 安装 TeslaMate
李二花 / 2024-05-24
背景
昨天看了一篇少数派的文章,特斯拉 Tesla model Y 提车指南, 准备事项里有一项是提前安装好 TeslaMate, 我本来是准备提车之后再说的,但是经过了解后发现,部署好 TeslaMate 之前的数据是无法回补的,所以就需要提前把服务部署好。
随便在 YouTube 上刷了刷,很多博主介绍自己的经验,TuTu 生活志讲了她使用 OrangePi 部署的方法,还有博主讲到部署到自己 VPS 的, 具体的部署流程大同小异,只不过有些是为了给没有 Linux 使用基础的非程序员群体降低使用门槛做了很好的一键傻瓜部署方案, 但是核心都是基于 TeslaMate 的文档来的。
下面就记录下我在我的绿联 DH2600 上部署 TeslaMate 的流程, 跟在 Linux 机器不一样的点是绿联的机器是 OpenWrt 系统的,加上绿联自己的一些魔改, 因此前面的步骤会有一些特殊的地方。
机器
绿联 NAS 系统是 OpenWrt(OpenWrt 项目是一个针对嵌入式设备的 Linux 操作系统), 绿联没有直接开放 sshd, 需要在界面上打开,并且每次时限是 3 天。
打开之后, 会给到一个 secret key, 然后使用如下命令登录机器
ssh root@youip -P 922
安装 docker-compose
Docker 界面
因为机器上已经有 Docker 了,因此只需要再安装 docker-compose
就好,执行如下命令之一,注意替换为对应的版本号。
curl -L "https://github.com/docker/compose/releases/download/{版本号}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
如果下载缓慢,可以在本地机器下载好,然后复制到绿联上。
去 https://github.com/docker/compose/releases 下载对应的 linux_x86-64 版本的 docker-compose
然后使用 scp 复制到机器里
scp -P 922 docker-compose(下载的二进制文件) root@ip:/tmp/
这样就把下载的二进制文件复制到了目标机器的 /tmp/ 文件下
然后把他移动到 /usr/bin/ 下,然后增加可执行权限即可
chmod +x /usr/bin/docker-compose
部署 TeslaMate
首先在绿联上找一个位置,创建一个 teslamate
的文件夹,我们之后所有的数据等都在这个目录中。
然后在命令行界面,使用如下命令找到这个目录所在的位置
command: find / -name teslamate
result: /mnt/dm-0/.ugreen_nas/197515/teslamate
然后在这个目录下创建一个 docker-compose.yml, 注意修改里面的 key 相关的变量。
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
environment:
- ENCRYPTION_KEY=ENCRYPTION_KEY #replace with a secure key to encrypt your Tesla API tokens
- DATABASE_USER=teslamate
- DATABASE_PASS=DATABASE_PASS #insert your secure database password!
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
ports:
- 4000:4000
volumes:
- ./import:/opt/app/import
cap_drop:
- all
database:
image: postgres:15
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=DATABASE_PASS #insert your secure database password!
- POSTGRES_DB=teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data
grafana:
image: teslamate/grafana:latest
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=DATABASE_PASS #insert your secure database password!
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
ports:
- 3000:3000
volumes:
- teslamate-grafana-data:/var/lib/grafana
mosquitto:
image: eclipse-mosquitto:2
restart: always
command: mosquitto -c /mosquitto-no-auth.conf
# ports:
# - 1883:1883
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
volumes:
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:
然后 docker-compose up -d
启动即可。
启动之后,在 docker 的管理界面会有如下的显示
启动之后,访问 NasIp:3000
和 NasIp:4000
就可以看到如下两个界面
- Grafana(初始用户名和密码都是 admin, 需要自己改密码)
- TeslaMate(需要填入令牌和刷新令牌,这个可以下载对应的 app 获取,iOS 使用 auth app for tesla)
暴露出来
之前一篇文章cloudflare 内网穿透与鉴权讲过如何把外网服务暴露到公网,并且加上邮箱验证的, 按照这个方案,又安装启动了一个 cloudflared, 然后把这两个端口的服务暴露到了公网环境即可。
其他注意
文档写了很多其他的东西,其中需要特别注意的是数据的备份与恢复,可以写一个定时脚本,定期备份数据
docker compose exec -T database pg_dump -U teslamate teslamate > "teslamate.$(date +"%Y-%m-%d").back"
TODO: 之后还可以写一个 crontab 来执行 dairy 事项。
结束
当然,鸡蛋不能放在一个篮子里,我还在我的 VPS 部署了一套,因为是标准的 Linux 环境,部署非常简单,这样主备都有,不容易出问题。
多看 TeslaMate 的文档,里面还有很多有意思的项目。