类别
技术 特斯拉

以每月$2的价格在BuyVM片区设置自我托管的TeslaMate

在这篇文章中,我将一步一步地指导你如何安装 TeslaMate 在你的 买入虚拟主机 分片。从选择你的虚拟机配置到在你的虚拟机上安装和配置该工具。寻找关于Vultr的指南? 点击这里.否则,请继续阅读,了解如何在BuyVM Slice中以每月$2的价格设置自我托管的TeslaMate。

TeslaMate的特点。

  • 驱动器和充电报告
  • 驾驶效率报告
  • 能源消耗(净值/总值)
  • 增加的充电能量与使用的能量
  • 吸血鬼排水
  • 预计100%射程(电池衰减情况)
  • 充电统计表
  • 驱动力统计
  • 已安装更新的历史
  • 查看您的汽车何时在线或处于睡眠状态
  • 终身驾驶地图
  • 访问过的地址

另外,还要检查你的车的状态(包括电池水平),而不会吵醒你的车!

分片选择

在本教程中,我们将使用SLICE 512,来自于 买入虚拟主机 其中包括1个核心@3.50+ GHz(公平分享CPU的使用),512MB内存,10GB的SSD存储和无计量带宽。

购买vmsliceplans 512andup 20200529 | graydonschwartz.com
注:SLICE 4096 ($15)及以上包括专用的CPU使用量。

我建议注册他们在拉斯维加斯数据中心的一个新的AMD Ryzen VPS,因为它们性能更高,是全新的,而且不需要额外的费用。他们还在纽约和卢森堡提供云服务器,但使用的是旧的英特尔硬件。

我以前在托管TeslaMate时使用过更多的内存,但发现512MB已经足够为一个Model 3运行TeslaMate,并且只为自己访问。

订购片剂

购买vm order512slice 20200529 | graydonschwartz.com
出了袜子。
  1. 选择一个地点。
    订单 - 拉斯维加斯
    订单 - 纽约
    订单 - 卢森堡
  2. 你今天想做什么? 点击'订购主机‘.
  3. 选择你的切片的尺寸,并点击''。现在订购‘.
  4. 输入你的 领域子域 进入订单表格。
    例如:teslamate.tesla.com
  5. 他们接受PayPal、Stripe以及一堆其他选项。请确保你的账户信息与你的付款信息相符,否则你的购买可能会被取消。

在他们的正常工作时间内,你应该在1-3小时内完成设置,但新账户可能需要24小时。在周末下的订单,如果他们没有人可用,就会在周一激活。

先决条件

  1. LV RYZEN KVM 512MB或更大的分片
  2. 两个FQDN,例如 teslamate.example.comgrafana.example.com
  3. PuTTY SSH客户端

登录Stallion

buyvmstallionloginscreen20200529 | graydonschwartz.com
在BuyVM Slice 7中以每月$2的价格设置自我托管的TeslaMate

Stallion是BuyVM为你开发的网络界面,用来给你的片区加载操作系统,查看状态和管理虚拟服务器上的所有其他任务。当你登录到frantech客户门户时,你会在页面的顶部找到一个Stallion的链接。

我们将需要手动设置Docker,因为没有预设的Docker,但设置起来真的一点都不麻烦。

选择图像并打开虚拟机的电源

购买vm reinstallcentos7 64bit 20200529 | graydonschwartz.com
在BuyVM Slice 8中以每月$2的价格设置自我托管的TeslaMate

从标签菜单中选择 "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

  1. 打开网络界面 https://teslamate.example.com
    用你输入到.htpasswd文件中的详细信息登录,然后会提示你用你的特斯拉账户登录。
  2. 用你的特斯拉账户登录
  3. Grafana 仪表板可在以下网站上找到:https://grafana.example.com.
  4. 输入用户名:密码。管理员:管理员 首先,你会被提示在第一次登录时更改密码。

是否可以升级?

我总是查看 发布说明 在升级之前。

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,直到它得到开发者的完全支持。我打算把它留在这里供大家思考。

cloudflare | graydonschwartz.com
在BuyVM Slice 9中以每月$2的价格设置自我托管的TeslaMate

这是一个额外的步骤,不需要进行,但可能为你的子域提供一点额外的安全。注册 云飞扬!这是一项免费服务,可以保护和加快你的网站。

  1. 点击 "DNS"。
  2. 对于您的 格拉法纳 (A记录)。
    设置 代理人身份 到代理的。
  3. 另外,对于你的 钛酸酯 (A记录)。
    设置 代理人身份 到代理的。

你现在会注意到,如果你ping你的子域,它们现在有一个较低的ping和一个不同的IP地址,因为你现在通过Cloudflare网络路由你的流量,你与BuyVM的IP地址现在在DNS请求中被隐藏。

我已经测试过启用代理模式一段时间了,到目前为止还没有遇到任何问题。

我希望这个设置指南对你有帮助。 🙂

负担得起的BuyVM片剂

作者:Graydon Schwartz

了解更多关于Graydon的信息。 关于我 页。