这篇文章将为你提供一个详细的指南,说明如何安装 TeslaMate 在你的 买入虚拟主机 分片。我们将经历这个过程的每一步,从选择适合你的虚拟机配置开始,一直到在你的虚拟机上安装和配置TeslaMate。
如果你对使用BuyVM Slice以每月仅$2的合理费用建立一个自我托管的TeslaMate感兴趣,那么请继续阅读。我们已经为你提供了这个分步骤的教程。
TeslaMate的特点。
- 驱动器和充电报告
- 驾驶效率报告
- 能源消耗(净值/总值)
- 增加的充电能量与使用的能量
- 吸血鬼排水
- 预计100%射程(电池衰减情况)
- 充电统计表
- 驱动力统计
- 已安装更新的历史
- 查看您的汽车何时在线或处于睡眠状态
- 终身驾驶地图
- 访问过的地址
另外,还要检查你的车的状态(包括电池水平),而不会吵醒你的车!
分片选择
在本教程中,我们将使用SLICE 512,来自于 买入虚拟主机 其中包括1个核心@3.50+ GHz(公平分享CPU的使用),512MB内存,10GB的SSD存储和无计量带宽。

我建议注册他们在拉斯维加斯数据中心的一个新的AMD Ryzen VPS,因为它们性能更高,是全新的,而且不需要额外的费用。他们还在纽约和卢森堡提供云服务器,但使用的是旧的英特尔硬件。
我以前在托管TeslaMate时使用过更多的内存,但发现512MB已经足够为一个Model 3运行TeslaMate,并且只为自己访问。
订购片剂

- 选择一个地点。
订单 - 拉斯维加斯
订单 - 纽约
订单 - 卢森堡 - 你今天想做什么? 点击'订购主机‘.
- 选择你的切片的尺寸,并点击''。现在订购‘.
- 输入你的 领域 或 子域 进入订单表格。
例如:teslamate.tesla.com - 他们接受PayPal、Stripe以及一堆其他选项。请确保你的账户信息与你的付款信息相符,否则你的购买可能会被取消。
在他们的正常工作时间内,你应该在1-3小时内完成设置,但新账户可能需要24小时。在周末下的订单,如果他们没有人可用,就会在周一激活。
先决条件
- LV RYZEN KVM 512MB或更大的分片
- 两个FQDN,例如 teslamate.example.com 和 grafana.example.com
- PuTTY SSH客户端
登录Stallion

Stallion是BuyVM为你开发的网络界面,用来给你的片区加载操作系统,查看状态和管理虚拟服务器上的所有其他任务。当你登录到frantech客户门户时,你会在页面的顶部找到一个Stallion的链接。
我们将需要手动设置Docker,因为没有预设的Docker,但设置起来真的一点都不麻烦。
选择图像并打开虚拟机的电源

从标签菜单中选择 "Reinstall"。现在,从左边的列表中点击'Redhat Based (7)'。点击'CentOS 7.0 64bit'旁边的'Reinstall',弹出安装提示。你将被要求输入一个密码。这是你的虚拟服务器的根(或管理)密码。确保把它写在一个安全的地方。
点击复选框由。 是的,请清除你的hostname.com(IP地址)上的所有数据。
当你准备好进行时,点击'重新安装'。
手动安装Docker
安装yum-utils软件包(它提供了yum-config-manager工具)。
sudo yum install -y yum-utils
并设置了 稳定的 仓库。
sudo yum-config-manager \
--add-repo /-add-repo
https://download.docker.com/linux/centos/docker-ce.repo
安装 最新版本 的Docker引擎和containerd。
sudo yum install docker-ce docker-ce-cli containerd.io
启动Docker。
sudo systemctl start docker
核实
sudo docker run hello-world
配置Docker以在启动时启动
sudo systemctl enable docker
要禁用这种行为,请使用 禁用
而不是。
sudo systemctl disable docker
资料来源。 码头
设置 - docker-compose.yml
版本:'3
服务。
teslamate:
图像: teslamate/teslamate:最新的
重新启动: 总是
depends_on:
- 数据库
环境。
- database_user=${tm_db_user}.
- 数据库密码=${tm_db_pass}。
- 数据库名称=${tm_db_name}。
- DATABASE_HOST=数据库
- MQTT_HOST=mosquitto
- virtual_host=${fqdn_tm}。
- CHECK_ORIGIN=true
- tz={$tm_tz}。
卷。
- ./import:/opt/app/import
标签。
- 'traefik.enable=true'
- 'traefik.port=4000'
- "traefik.http.middlewares.redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.auth.basicauth.usersfile=/auth/.htpasswd"
- "traefik.http.routers.teslamate-insecure.rule=Host(`${FQDN_TM}`)"
- "traefik.http.routers.teslamate-insecure.middlewares=redirect"
- "traefik.http.routers.teslamate.rule=Host(`${FQDN_TM}`)"
- "traefik.http.routers.teslamate.middlewares=auth"
- "traefik.http.routers.teslamate.entrypoints=websecure"
- "traefik.http.routers.teslamate.tls.certresolver=tmhttpchallenge"
数据库。
图像:postgres:12
重新启动:总是
环境。
- postgres_user=${tm_db_user}.
- postgres_password=${tm_db_pass}。
- POSTGRES_DB=${TM_DB_NAME}
卷。
- teslamate-db:/var/lib/postgresql/data
grafana。
Image: teslamate/grafana:latest
重新启动:总是
环境。
- database_user=${tm_db_user}.
- database_pass=${tm_db_pass}。
- 数据库名称=${tm_db_name}。
- DATABASE_HOST=数据库
- grafana_passwd=${grafana_pw}。
- gf_security_admin_user=${grafana_user}。
- gf_security_admin_password=${grafana_pw}。
- GF_AUTH_BASIC_ENABLED=true
- GF_AUTH_ANONYMOUS_ENABLED=false
- gf_server_root_url=https://${fqdn_grafana}。
卷。
- teslamate-grafana-data:/var/lib/grafana
标签。
- 'traefik.enable=true
- 'traefik.port=3000'
- "traefik.http.middlewares.redirect.redirectscheme.scheme=https"
- "traefik.http.routers.grafana-insecure.rule=Host(`${FQDN_GRAFANA}`)"
- "traefik.http.routers.grafana-insecure.middlewares=redirect"
- "traefik.http.routers.grafana.rule=Host(`${FQDN_GRAFANA}`)"
- "traefik.http.routers.grafana.entrypoints=websecure"
- "traefik.http.routers.grafana.tls.certresolver=tmhttpchallenge"
mosquitto。
Image: eclipse-mosquitto:1.6
重新启动:总是
端口。
- 127.0.0.1:1883:1883
卷。
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
代理。
image: traefik:v2.1
重新启动:总是
命令。
- "--global.sendAnonymousUsage=false"
- "--providers.docker"
- "--providers.docker.exposedByDefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.tmhttpchallenge.acme.httpchallenge=true"
- "--certificatesresolvers.tmhttpchallenge.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.tmhttpchallenge.acme.email=${LETSENCRYPT_EMAIL}"
- "--certificatesresolvers.tmhttpchallenge.acme.storage=/etc/acme/acme.json"
端口。
- 80:80
- 443:443
卷。
- ./.htpasswd:/auth/.htpasswd
- ./acme/:/etc/acme/。
- /var/run/docker.sock:/var/run/docker.sock:ro
卷。
teslamate-db:
teslamate-grafana-data:
mosquitto-conf:
mosquitto-data:
设置 - .env
TM_DB_USER=teslamate
TM_DB_PASS=secret
TM_DB_NAME=teslamate
GRAFANA_USER=admin
GRAFANA_PW=admin
FQDN_GRAFANA=grafana.example.com
FQDN_TM=teslamate.example.com
TM_TZ=Europe/Berlin
LETSENCRYPT_EMAIL=yourperson@example.com
设置 - .htpasswd
根据TeslaMate的文档。我建议你使用这个工具来创建你的.htpasswd文件。
http://www.htaccesstools.com/htpasswd-generator/
输入你想要的 帐号, 密码 和 选择Bcrypt(Apache v2.4以上版本)。
在下面的例子中,我输入了 帐号 和 密码 为这些领域。
例子。
my:$2y$10$as5PEnYaoGEx2ebCFjdK0e9PBshAsvzIeAKijwNgeMSC9oJkDNo2。
现在复制并粘贴这些信息到你的.htpasswd文件中。
vi .htpasswd(或你喜欢的文本编辑器)。
在使用Docker启动Teslamate之前,请确保你设置了密码!
docker-compose up
注意:你可能需要运行这个命令两次才能发挥作用。
DNS设置
你需要将teslamate.example.com + grafana.exampe.com(你的子域)指向BuyShared在你创建虚拟服务器时提供给你的IP 地址。这可以通过联系你的虚拟主机或登录你的控制面板来管理你的DNS记录并添加这些条目来完成。
登录TeslaMate
- 打开网络界面 https://teslamate.example.com
用你输入到.htpasswd文件中的详细信息登录,然后会提示你用你的特斯拉账户登录。 - 用你的特斯拉账户登录
- Grafana 仪表板可在以下网站上找到:https://grafana.example.com.
- 输入用户名:密码。管理员:管理员 首先,你会被提示在第一次登录时更改密码。
是否可以升级?
我总是查看 发布说明 在升级之前。
docker-compose pull
[root@localhost ~]# docker-compose pull
拉动数据库 ... 完成
拉动Teslamate ... 完成
拉取Grafana ... 已完成
拉取 mosquitto ... 已完成
拉取代理服务器 ... 已完成
docker-compose up
[root@localhost ~]# docker-compose up
重新创建 root_grafana_1 ...
重新创建 root_database_1 ...
重新创建 root_grafana_1 ... 完成
重建root_database_1 ... 完成
重建 root_teslamate_1 ... 完成
....update 消息
16:57:45.350 [info] Tzdata已将版本从2019c更新到2020a
你的安装现在已经升级了,你可以关闭终端。你可以通过登录你的TeslaMate控制面板检查版本。
额外保护
让我们从禁用/卸载FirewallD开始。
sudo yum remove -y firewalld
现在,我们来安装/激活IPTables。
sudo yum install -y iptables-services
sudo systemctl start iptables
配置IPTables以在启动时自动启动。
sudo systemctl enable iptables
CentOS 7上的IPTables带有一套默认的规则,你可以通过以下命令查看。
sudo iptables -L -n
输出结果将类似于。
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 状态 RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0/0 state NEW tcp dpt:22
拒绝所有 -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
FORWARD链 (策略ACCEPT)
target prot opt source destination
拒绝所有 -- 0.0.0.0/0.0.0.0/0 拒绝-附带 icmp-host-prohibited。
OUTPUT链 (策略ACCEPT)
target prot opt source destination
你可以看到,其中一个规则允许SSH流量,所以你的SSH会话是安全的。
因为这些规则是运行时规则,重启后会丢失,所以最好用以下方法将它们保存到一个文件中。
sudo /usr/libexec/iptables/iptables.init 保存
该命令将把规则保存到 /etc/sysconfig/iptables
文件。你可以随时用你喜欢的文本编辑器修改这个文件来编辑规则。
下一步,允许额外的流量通过防火墙
由于你很可能会在某个时候使用你的新服务器来托管一些网站,你必须在防火墙上添加新的规则来允许HTTP和HTTPS流量。为了达到这个目的,打开IPTables文件。
sudo nano /etc/sysconfig/iptables
就在SSH规则之后或之前,添加HTTP(80端口)和HTTPS(443端口)流量的规则,这样,文件的这一部分就会出现如下代码块所示。
-A INPUT -p tcp -m state -state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REECT --reject-with icmp-host-prohibited
保存并关闭该文件,然后重新加载IPTables。
sudo systemctl reload iptables
完成上述步骤后,你的CentOS 7服务器现在应该是相当安全的,可以在生产中使用了。
其他安全问题?
我想在下一个想法之前说,你可能会遇到问题,因为TeslaMate的SSL证书要求子域指向你的VPS的IP地址,但是如果你把它隐藏在Cloudflare后面,情况就不是这样了,SSL会在TeslaMate重新启动时无法更新。因此,我不再建议启用CF,直到它得到开发者的完全支持。我打算把它留在这里供大家思考。
这是一个额外的步骤,不需要进行,但可能为你的子域提供一点额外的安全。注册 云飞扬!这是一项免费服务,可以保护和加快你的网站。
- 点击 "DNS"。
- 对于您的 格拉法纳 (A记录)。
设置 代理人身份 到代理的。 - 另外,对于你的 钛酸酯 (A记录)。
设置 代理人身份 到代理的。
你现在会注意到,如果你ping你的子域,它们现在有一个较低的ping和一个不同的IP地址,因为你现在通过Cloudflare网络路由你的流量,你与BuyVM的IP地址现在在DNS请求中被隐藏。
我已经测试过启用代理模式一段时间了,到目前为止还没有遇到任何问题。
我希望这个设置指南对你有帮助。 🙂
Teslamate安装:结论
总之,在你的BuyVM Slice上设置TeslaMate是监控你的特斯拉汽车数据的一种经济而有效的方式。通过我们的分步指南,你可以轻松地在你的虚拟机上安装和配置TeslaMate,没有任何麻烦。
通过遵循这些说明,你将能够享受自我托管的TeslaMate的好处,同时将你的费用保持在最低水平。我们希望这篇文章在指导你完成这一过程方面有所帮助,并祝愿你在TeslaMate的设置过程中取得最佳成绩。