Catégories
Technologie Tesla

Installation d'un TeslaMate auto-hébergé pour $2 par mois dans une tranche BuyVM

Dans cet article, je vais vous expliquer étape par étape comment installer TeslaMate sur votre AcheterVM Slice. De la sélection de la configuration de votre VM à l'installation et la configuration de l'outil sur votre machine virtuelle. Vous cherchez un guide sur Vultr ? Cliquez ici. Sinon, continuez à lire pour apprendre comment installer un TeslaMate auto-hébergé pour $2 par mois dans une tranche BuyVM.

Caractéristiques du TeslaMate :

  • Rapports de conduite et de charge
  • Rapport sur l'efficacité de la conduite
  • Consommation d'énergie (nette / brute)
  • Chargement de l'énergie ajoutée par rapport à l'énergie utilisée
  • Vampire Drain
  • Portée projetée du 100% (dégradation de la batterie)
  • Statistiques de charge
  • Statistiques d'entraînement
  • Historique des mises à jour installées
  • Voir quand votre voiture était en ligne ou endormie
  • Carte routière de la vie
  • Adresses visitées

Vérifiez AUSSI le statut de votre voiture (inc. niveau de la batterie) sans réveiller votre voiture !

Sélection SLICE

Dans ce tutoriel, nous allons utiliser le SLICE 512 de AcheterVM qui comprend 1 cœur à 3,50+ GHz (l'utilisation équitable du CPU s'applique), 512 Mo de mémoire, 10 Go de stockage SSD et une bande passante non mesurée.

achetervmsliceplans 512andup 20200529 | graydonschwartz.com
Note : SLICE 4096 ($15) et plus incluent l'utilisation d'un CPU dédié.

Je recommande de s'inscrire pour que l'un de leurs nouveaux VPS AMD Ryzen dans le centre de données de Las Vegas réapparaisse, car ils sont plus performants, tout neufs et sans coût supplémentaire. Ils proposent également des serveurs cloud à New York et au Luxembourg, mais avec du matériel Intel plus ancien.

J'ai déjà utilisé plus de mémoire pour l'hébergement de TeslaMate mais j'ai trouvé que 512 Mo était largement suffisant pour faire fonctionner TeslaMate pour un Model 3 et un accès pour moi seul.

Commander une tranche

buyvm order512slice 20200529 | graydonschwartz.com
Hors de la chaussette.
  1. Sélectionnez un emplacement :
    Ordre - Las Vegas
    Ordre - New York
    Ordre - Luxembourg
  2. Que voulez-vous faire aujourd'hui ? Cliquez sur 'Commander l'hébergement‘.
  3. Sélectionnez la taille de votre tranche et cliquez sur ''.Commandez maintenant‘.
  4. Entrez votre domaine ou sous-domaine dans le formulaire de commande.
    Exemple : teslamate.tesla.com
  5. Ils acceptent PayPal, stripe, ainsi qu'un tas d'autres options. Assurez-vous que les informations de votre compte correspondent à celles du paiement, sinon votre achat risque d'être annulé.

You should be setup within 1-3 hours during their regular business hours however new accounts can take up to 24-hours. Orders placed over the weekend are activated on Monday if they don’t have anyone available.

Préalable :

  1. LV RYZEN KVM 512MB ou tranche supérieure
  2. Deux FQDN, par exemple teslamate.example.com et grafana.exemple.com
  3. Client SSH PuTTY

Se connecter à Stallion

buyvmstallionloginscreen20200529 | graydonschwartz.com
Setup Self-Hosted TeslaMate for $2 per Month in a BuyVM Slice 7

Stallion est l'interface web que BuyVM a développé pour que vous puissiez charger votre tranche avec un système d'exploitation, voir le statut et gérer toutes les autres tâches sur votre serveur virtuel. Vous trouverez un lien vers Stallion en haut de la page lorsque vous vous connectez au portail client frantech.

We will need to setup Docker manually because there isn’t a pre-setup Docker but it’s really no trouble at all to setup.

Sélectionnez l'image et mettez la VM sous tension

buyvm reinstallcentos7 64bit 20200529 | graydonschwartz.com
Setup Self-Hosted TeslaMate for $2 per Month in a BuyVM Slice 8

Select ‘Reinstall’ from the tab menus. Now, click on ‘Redhat Based (7)’ from the list on the left. Click on ‘Reinstall’ next to ‘CentOS 7.0 64bit’ to bring up the install prompt. You will be asked to enter a password. This is for your root (or administration) password for your virtual server. Make sure to write this down in a safe place.

Cliquez sur la case à cocher par : Oui, veuillez effacer toutes les données de votre nom d'hôte.com (ADRESSE IP).

Click ‘Reinstall’ when you’re ready to proceed.

Installation manuelle de Docker

Installer le paquet yum-utils (qui fournit l'utilitaire yum-config-manager)

sudo yum install -y yum-utils

et mettre en place le stable dépôt.

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Installer le nouvelle version de Docker Engine et de containerd :

sudo yum install docker-ce docker-ce-cli containerd.io

Démarrez Docker.

sudo systemctl start docker

Vérifier

sudo docker run hello-world

Configurer Docker pour qu'il démarre au démarrage

sudo systemctl enable docker

Pour désactiver ce comportement, utilisez désactiver à la place :

sudo systemctl disable docker

Source : Docker

Configuration - docker-compose.yml

version : "3

services :
  teslamate :
    image : teslamate/teslamate:latest
    redémarrage : toujours
    dépend_on :
      - base de données
    environnement :
      - UTILISATEUR_BASE=${TM_DB_USER}
      - DATABASE_PASS=${TM_DB_PASS}
      - NOM_DE_LA_BASE=${TM_DB_NAME}
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
      - VIRTUAL_HOST=${FQDN_TM}
      - CHECK_ORIGIN=true
      - TZ={$TM_TZ}
    volumes :
      - ./import:/opt/app/import
    labels :
      - 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.rouers.teslamate-insecure.middlewares=redirect"
      - "traefik.http.routeurs.teslamate.rule=Host(`${FQDN_TM}`)"
      - "traefik.http.routeurs.teslamate.middlewares=auth"
      - "traefik.http.routeurs.teslamate.entrypoints=websecure"
      - "traefik.http.routeurs.teslamate.tls.certresolver=tmhttpchallenge"

  base de données :
    image : postgres:12
    restart : always
    environnement :
      - POSTGRES_USER=${TM_DB_USER}
      - POSTGRES_PASSWORD=${TM_DB_PASS}
      - POSTGRES_DB=${TM_DB_NAME}
    volumes :
      - teslamate-db:/var/lib/postgresql/data

  grafana :
    image : teslamate/grafana:latest
    redémarrage : toujours
    environnement :
      - DATABASE_USER=${TM_DB_USER}
      - MOT DE PASSE=${TM_DB_PASS}
      - NOM_DE_LA_BASE=${TM_DB_NAME}
      - DATABASE_HOST=database
      - 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}
    volumes :
      - teslamate-grafana-data:/var/lib/grafana
    labels :
      - Traefik.enable=true
      - Traefik.port=3000
      - "traefik.http.middlewares.redirect.redirectscheme.scheme=https"
      - "traefik.http.routeurs.grafana-insecure.rule=Host(`${FQDN_GRAFANA}`)"
      - "traefik.http.routeurs.grafana-insecure.middlewares=redirect"
      - "traefik.http.routeurs.grafana.rule=Host(`${FQDN_GRAFANA}`)"
      - "traefik.http.routers.grafana.entrypoints=websecure"
      - "traefik.http.routers.grafana.tls.certresolver=tmhttpchallenge"

  mosquitto :
    image : eclipse-mosquitto:1.6
    restart : always
    ports :
      - 127.0.0.1:1883:1883
    volumes :
      - mosquitto-conf:/mosquitto/config
      - mosquitto-data:/mosquitto/data

  proxy :
    image : traefik:v2.1
    restart : always
    commande :
      - "--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"
      - "--certificatsresolvers.tmhttpchallenge.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatsresolvers.tmhttpchallenge.acme.storage=/etc/acme/acme.json"
    ports :
      - 80:80
      - 443:443
    volumes :
      - ./.htpasswd:/auth/.htpasswd
      - ./acme/:/etc/acme/
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes :
    teslamate-db :
    teslamate-grafana-data :
    mosquitto-conf :
    mosquitto-data :

Configuration - .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

Configuration - .htpasswd

Conformément à la documentation de TeslaMate. Je vous recommande d'utiliser cet outil pour créer votre fichier .htpasswd :
http://www.htaccesstools.com/htpasswd-generator/
Saisissez votre nom d'utilisateur, mot de passe et sélectionnez Bcrypt (à partir de Apache v2.4)
Dans l'exemple ci-dessous, j'ai saisi nom d'utilisateur et mot de passe pour ces champs :

Exemple :

mon:$2y$10$as5PEnYaoGEx2ebCFjdK0e9PBshAsvzIeAKijwNgeMSC9oJkDNo2.

Copiez et collez maintenant ces informations dans votre fichier .htpasswd.

vi .htpasswd (ou votre éditeur de texte préféré)

Assurez-vous de configurer votre mot de passe avant de commencer le Teslamate avec Docker !

docker-compose up

Note : Il se peut que vous deviez exécuter cette commande deux fois pour qu'elle fonctionne.

Configuration du DNS

Vous devrez faire pointer teslamate.example.com + grafana.exampe.com (votre sous-domaine) vers l'adresse IP qui vous a été fournie par BuyShared lorsque vous avez créé votre serveur virtuel. Ceci est fait en contactant votre hébergeur ou en vous connectant à votre panneau de contrôle pour gérer vos enregistrements DNS et faire ajouter ces entrées.

Se connecter à TeslaMate

  1. Ouvrir l'interface web https://teslamate.example.com
    Connectez-vous avec les détails que vous avez saisis dans le fichier .htpasswd, puis vous serez invité à vous connecter avec votre compte Tesla.
  2. Connectez-vous avec votre compte Tesla
  3. Les tableaux de bord Grafana sont disponibles à l'adresse suivante:https://grafana.example.com.
  4. Entrez le nom d'utilisateur et le mot de passe :admin:admin et vous serez invité à changer le mot de passe lors de votre première connexion.

Mise à niveau disponible ?

Je vérifie toujours les notes de mise à jour avant la mise à niveau.

docker-compose pull

[root@localhost ~]# docker-compose pull
Pulling database  ... done
Pulling teslamate ... done
Pulling grafana   ... done
Pulling mosquitto ... done
Pulling proxy     ... done

docker-compose up

[root@localhost ~]# docker-compose up
Recreating root_grafana_1 ...
Recreating root_database_1 ...
Recreating root_grafana_1  ... done
Recreating root_database_1 ... done
Recreating root_teslamate_1 ... done
....update messages
16:57:45.350 [info] Tzdata has updated the release from 2019c to 2020a

Votre installation est maintenant mise à niveau et vous pouvez fermer le terminal. Vous pouvez vérifier la version en vous connectant à votre panneau de contrôle TeslaMate.

Protection supplémentaire

Let’s start by disabling/uninstalling FirewallD:

sudo yum remove -y firewalld

Now, let’s install/activate IPTables.

sudo yum install -y iptables-services
sudo systemctl start iptables

Configurer IPTables pour qu'il démarre automatiquement au moment du démarrage.

sudo systemctl enable iptables

IPTables sur CentOS 7 est livré avec un ensemble de règles par défaut, que vous pouvez visualiser avec la commande suivante.

sudo iptables -L -n

La sortie ressemblera :

Chaîne INPUT (politique ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state 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/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chaîne FORWARD (politique ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chaîne OUTPUT (politique ACCEPT)
cible prot opt source destination

Vous pouvez voir que l'une de ces règles autorise le trafic SSH, votre session SSH est donc sécurisée.

Because those rules are runtime rules and will be lost on reboot, it’s best to save them to a file using:

sudo /usr/libexec/iptables/iptables.init save

Cette commande enregistrera les règles dans le fichier /etc/sysconfig/iptables fichier. Vous pouvez modifier les règles à tout moment en changeant ce fichier avec votre éditeur de texte préféré.

Ensuite, autorisez le trafic supplémentaire à travers le pare-feu

Since you’ll most likely be going to use your new server to host some websites at some point, you’ll have to add new rules to the firewall to allow HTTP and HTTPS traffic. To accomplish that, open the IPTables file:

sudo nano /etc/sysconfig/iptables

Juste après ou avant la règle SSH, ajoutez les règles pour le trafic HTTP (port 80) et HTTPS (port 443), de sorte que cette partie du fichier apparaisse comme indiqué dans le bloc de code ci-dessous.

-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 REJECT --reject-with icmp-host-prohibited

Enregistrez et fermez le fichier, puis rechargez IPTables.

sudo systemctl reload iptables

Une fois l'étape ci-dessus terminée, votre serveur CentOS 7 devrait maintenant être raisonnablement sécurisé et être prêt à être utilisé en production.

Autre sécurité ?

I want to preface this next idea by saying that you may run into issues because TeslaMate’s SSL Cert requires the subdomains be pointed to the IP Address of your VPS, however if you hide it behind Cloudflare, this won’t be the case and SSL will fail to renew on restarts of TeslaMate. So, I no longer recommend enabling CF until it’s fully supported by the developer. I am going to leave it here for food for thought.

cloudflare | graydonschwartz.com
Installation d'un TeslaMate auto-hébergé pour $2 par mois dans une tranche de BuyVM 9

This is an extra step that isn’t required to get going but might provide a little bit of extra security to your subdomains. Sign-up for Cloudflare! It’s a free service that protects and speeds up your website.

  1. Click on ‘DNS’.
  2. Pour votre grafana (A Record) :
    Définir Statut du proxy à Proxied.
  3. Aussi, pour votre teslamate (A Record) :
    Définir Statut du proxy à Proxied.

Vous remarquerez maintenant que si vous faites un ping sur vos sous-domaines, ils ont maintenant un ping plus faible et une adresse IP différente parce que vous acheminez maintenant votre trafic à travers le réseau Cloudflare et votre adresse IP avec BuyVM est maintenant cachée lors des requêtes DNS.

I have tested enabling proxy mode for awhile now and haven’t encountered any issues so far.

J'espère que ce guide de configuration vous a été utile. 🙂

Tranches de BuyVM abordables

Par Graydon Schwartz

Pour en savoir plus sur Graydon, consultez le site À propos de moi page.