环境介绍

注意:安装前请准备好如下东西

  • 一个给teslamate使用的二级域名,比如tesla.xxx.com,并解析到你当前服务器的公网ip上
名称 版本
系统名称 Ubuntu 20.04

安装teslamate

安装依赖的docker和docker-compose服务

1
2
3
4
5
6
7
8
9
10
11
# 更新apt仓库
$ apt-get update

# 安装docker
$ curl -fsSL https://get.docker.com |sudo bash

# 安装docker-compose
$ apt-get install -y docker-compose

# 设置docker开机自启动
$ systemctl enable docker

创建teslamate的安装目录,并设置目录权限

1
2
3
4
5
6
7
8
9
# 创建目录
$ mkdir -p /data/teslamate/{teslamate-db,teslamate-grafana-data,mosquitto-conf,mosquitto-data,import}

# 设置目录权限
$ chmod 777 mosquitto-conf mosquitto-data teslamate-db teslamate-grafana-data import

# 验证
$ cd /data/teslamate/ && ls
import mosquitto-conf mosquitto-data teslamate-db teslamate-grafana-data

创建teslamate的docker-compose文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 进入teslamate的根目录
$ cd /data/teslamate/

# 创建docker-compose文件,根据提示修改
$ vim docker-compose.yml
version: "3"

services:
teslamate:
image: teslamate/teslamate:1.27.2
restart: always
environment:
- ENCRYPTION_KEY=pXwmZBJwH11111111vJQzTN #需要修改为自己的key,随机生成一段就行了,也可以不管用这个默认
- DATABASE_USER=teslamate
- DATABASE_PASS=123456 # 设置数据库密码,和下面两个地方密码一致
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- MQTT_HOST=mosquitto
- TZ=Asia/Shanghai
- VIRTUAL_HOST=tesla.xxx.com # 这里修改为你teslamate使用的二级域名,比如tesla.xxx.com
- CHECK_ORIGIN=true
ports:
- 4001:4000 # 将容器的4000端口映射为节点的4001端口,后面会在nginx里面用到这个4001端口
volumes:
- ./import:/opt/app/import # 数据持久化到docker-compose文件当前目录下
cap_drop:
- all

database:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=teslamate
- POSTGRES_PASSWORD=123456 # 设置数据库密码,和上面保证一致
- POSTGRES_DB=teslamate
volumes:
- ./teslamate-db:/var/lib/postgresql/data

grafana:
image: putianhui/grafana-tesla-cn:v1.2
restart: always
environment:
- DATABASE_USER=teslamate
- DATABASE_PASS=123456 # 设置数据库密码,和上面保证一致
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- GF_AUTH_ANONYMOUS_ENABLED=false
- GF_SERVER_DOMAIN=tesla.xxx.com # 这里修改为你teslamate使用的二级域名,比如tesla.xxx.com
- GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s/grafana
- GF_SERVER_SERVE_FROM_SUB_PATH=true
ports:
- 3001:3000 # 将容器的3000端口映射为节点的3001端口,后面会在nginx里面用到这个3001端口
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文件仅需要以下几点的修改即可,其他可使用默认。

  • tesla.xxx.com二级域名修改为你自己的teslamate二级域名
  • DATABASE_PASS这个数据库密码三个容器保持一致。

通过docker-compose文件拉取容器镜像并启动容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 进入teslamate的根目录
$ cd /data/teslamate/

# 查看目录和文件
$ ls
docker-compose.yml import mosquitto-conf mosquitto-data teslamate-db teslamate-grafana-data

# docker-compose启动容器
$ docker-compose up -d

# 查看启动日志,按ctrl + c可以结束查看
$ docker-compose logs -f

# 验证服务是否启动成功,如果出现3001和4001端口即启动成功
$ ss -tnl |egrep '3001|4001'
LISTEN 0 4096 0.0.0.0:3001 0.0.0.0:*
LISTEN 0 4096 0.0.0.0:4001 0.0.0.0:*
LISTEN 0 4096 [::]:3001 [::]:*
LISTEN 0 4096 [::]:4001 [::]:*

部署nginx进行代理grafana和teslamate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 安装nginx
$ apt-get install -y nginx


# 创建teslamate的nginx配置文件
$ vim /etc/nginx/conf.d/tesla.conf
server {
listen 80;
# 这里将tesla.xxx.com替换为你自己teslamate使用的二级域名
server_name tesla.xxx.com;

location / {
# 默认访问代理到teslamate的4001服务去
proxy_pass http://127.0.0.1:4001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 1800s;
proxy_send_timeout 1800s;
proxy_read_timeout 1800s;
}

location /grafana {
# 将用户访问的http://tesla.xxx.com/grafana 代理到teslamate的grafana仪表中去
proxy_pass http://127.0.0.1:3001;
# 设置grafana的允许跨域代理
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

# 测试nginx配置文件,启动nginx服务,将nginx服务设置开机自动启动
$ nginx -t
$ systemctl start nginx && systemctl enable nginx

nginx服务启动后即可通过你自己的二级域名http://tesla.xxx.com访问到teslamate和grafana服务了,如果无法访问请打开服务器的80端口,如果使用了https协议请打开443端口

配置使用teslamate

在ios手机或者macos上面下载一个Auth for Teslaz这个App,然后选择global,点击Sign in with Tesla,输入自己的特斯拉账号和密码登录。

登录成功后会调整这个界面,我们把Refresh TokenAccess Token复制记录下来,等下站点里面会用到

我们使用浏览器打开前面部署teslamate使用的二级域名http://tesla.xxx.com会默认访问teslamate的站点,令牌填写前面的AccessToken内容,刷新令牌填写前面的RefreshToken内容,然后点击登陆。

登陆成功后点击右上角设置,修改web应用程序和控制台的地址为你的二级域名,填写ok后空白地方点一下即可自动保存

配置teslamate服务访问验证

注意:默认部署成功之后teslamate所有人可以从公网访问到,导致不安全,这里配置nginx访问站点时的账号密码认证来加强安全。如果你不在乎直接所有人公网访问此步骤可以忽略

生成一个htpasswd加密后的账号密码字符串后面要用到,可以访问在线生成站点,输入账号和密码生成即可,如果不想生成的话就使用下面的加密字符串,账号密码为admin/admin123

1
admin:$apr1$ow0QgvnZ$BxatHNt0uJKFhdiydwHww0

创建nginx使用的.htpasswd加密字符串文件

1
2
3
# 我这里使用前面默认的账号密码字符串,admin/admin123   如果你自定义账号密码就在线生成,替换为在线生成后的加密字符串
$ vim /etc/nginx/.htpasswd
admin:$apr1$ow0QgvnZ$BxatHNt0uJKFhdiydwHww0

修改teslamate的nginx配置文件,添加访问验证配置

1
2
3
4
5
6
7
8
9
10
11
12
# 修改nginx配置文件
$ vim /etc/nginx/conf.d/tesla.conf
# 在location / 中添加一下配置字段即可
location / {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd
}


# 验证配置文件并重新加载修改后的配置文件
$ nginx -t
$ nginx -s reload

后面使用浏览器访问teslamate的域名http://tesla.xxx.com就会提示输入账号密码才可以访问了,密码就是你生成的账号密码,如果使用前面默认的加密字符串账号密码就是admin/admin123

查看监控数据仪表盘

查看仪表盘可以使用浏览器打开你的二级域名后面跟/grafana访问到grafana,比如http://tesla.xxx.com/grafana,首次登录默认密码为admin/admin,登录成功记得修改默认密码。