Otthoni Docker
Otthoni Docker — teljes útmutató
Ez a leírás végigvezet azon, hogy a járműnapló a te gépeden fusson (natív Docker), az evstats.online pedig csak fiókot és felületet adjon. Nincs saját Tesla developer app: a Fleet API a közös evstats alkalmazáson megy, a Tesla-számla az üzemeltetőé.
1. Mit kapsz, és mit nem tárolunk nálunk
A te gépeden fut: Postgres, evstats-teslamate (Grafana nélküli TeslaMate-fork), TeslaMate API, Mosquitto, Cloudflare Tunnel.
Nincs gyári teslamate/grafana, nincs :3000-es dashboard, a TeslaMate UI-n nincs Dashboards menü. A grafikonok az evstats.online-on jelennek meg.
Az evstats.online-on marad: belépés, előfizetés, az API kulcs hash-e, a tunnel URL. GPS, VIN, utak, töltések, Tesla OAuth token: a te lemezeden. Ha a géped alszik, a dashboard: otthoni konténer nem elérhető.
2. Előfeltételek
• Linux (vagy Docker Desktop) Docker + Compose-szal.
• Az evstats-teslamate image Grafana nélkül (compose build a forkra, vagy evstats/teslamate:nogrfana). Nincs teslamate/grafana.
• Mindig bekapcsolt gép, ha élő webes adat kell.
• Ingyenes Cloudflare-fiók a Tunnelhez.
• evstats.online fiók, API kulcs, Otthoni Docker mód.
• Tesla-fiók a helyi TeslaMate UI-n (localhost:4000).
3. Fiók és API kulcs az evstats.online-on
1. Lépj be: https://evstats.online/login.php
2. Nyisd meg a Fiókom oldalt a tenantodon (pl. https://slug.evstats.online/account.php).
3. A „API hozzáférés” kártyán másold ki a kulcsot (szem ikon). Ez lesz az EVSTATS_API_TOKEN a .env-ben — ugyanaz, mint a TeslaMate API token.
4. Az „Otthoni Docker” kártyán válaszd: Otthoni Docker (adat nálad).
5. Az URL mezőt majd a Cloudflare Tunnel https címével töltöd ki (5. lépés). Előtte is elmentheted a módot.
4. Cloudflare Tunnel (titkosított kapcsolat)
A router nem engedi befelé a hubot. A cloudflared konténer kifelé, TLS-sel kapcsolódik.
1. Regisztrálj: https://one.dash.cloudflare.com/
2. Zero Trust → Networks → Tunnels → Create a tunnel → Cloudflared.
3. Másold a Tunnel tokent a .env CLOUDFLARE_TUNNEL_TOKEN mezőjébe.
4. Public hostname: adj egy https címet (saját domain aldomainje, vagy a Cloudflare által adott *.cfargotunnel.com).
5. Service type: HTTP. URL: http://teslamateapi:8080 (a compose belső neve, ne localhost).
6. Mentsd. A nyilvános cím pl. https://teslamateapi.valami.cfargotunnel.com — ezt írd a Fiókom „Otthoni API URL” mezőbe, záró perjel nélkül.
5. Fájlok a gépeden
Hozz létre egy mappát, pl. ~/evstats-home. Másold bele a lenti három fájlt: docker-compose.yml, .env, mosquitto-no-auth.conf. Az oldal alján mindhárom letölthető.
A .env-ben töltsd ki:
• EVSTATS_API_TOKEN — a Fiókom API kulcsa
• CLOUDFLARE_TUNNEL_TOKEN — a CF tunnel token
• DATABASE_PASS — erős helyi jelszó
• ENCRYPTION_KEY — pl. openssl rand -hex 32 (ezt soha ne küldd a hubra)
• TESLA_AUTH_CLIENT_ID — hagyd a mintában lévőt (közös evstats app, nem titok)
• TZ=Europe/Budapest
Ne commitold a .env fájlt. A Tesla CLIENT_SECRET nem kell, és nem is szabad a gépedre tenni ebből a körből.
# Másold .env névre és töltsd ki. Soha ne commitold a .env fájlt. # A Fiókom oldalon generált kulcs (ugyanaz, mint a TeslaMate API token) EVSTATS_API_TOKEN= # A Cloudflare Tunnel nyilvános URL-je (ezt írd be az evstats.online Fiókomba is) # pl. https://teslamateapi.example.cfargotunnel.com HOME_PUBLIC_URL= # Cloudflare Zero Trust → Networks → Tunnels → token CLOUDFLARE_TUNNEL_TOKEN= # TeslaMate adatbázis jelszó (helyi, erős) DATABASE_PASS= # TeslaMate titkosító kulcs (helyi, 32+ karakter, soha ne a hubra) ENCRYPTION_KEY= # Közös evstats Fleet API alkalmazás — ez NEM titok (client_id). # A Tesla-számla az evstats üzemeltetőjénél marad ebben a körben. TESLA_AUTH_CLIENT_ID=6dd3aca8-3d8a-4150-9b89-d55dde3f6370 TESLA_API_HOST=https://fleet-api.prd.eu.vn.cloud.tesla.com TZ=Europe/Budapest
# evstats.online — otthoni natív Docker stack
# Hivatalos image-ek. Nincs saját agent.
# https://github.com/ — lásd README.md
services:
database:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_USER: teslamate
POSTGRES_PASSWORD: ${DATABASE_PASS}
POSTGRES_DB: teslamate
volumes:
- teslamate-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U teslamate"]
interval: 10s
timeout: 5s
retries: 10
teslamate:
# Grafana nélküli evstats fork (AGPL). Gyári teslamate/teslamate + teslamate/grafana NINCS.
image: evstats/teslamate:nogrfana
build:
context: ../evstats-teslamate
dockerfile: Dockerfile
restart: unless-stopped
depends_on:
database:
condition: service_healthy
environment:
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
- DATABASE_USER=teslamate
- DATABASE_PASS=${DATABASE_PASS}
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- DATABASE_PORT=5432
- MQTT_HOST=mosquitto
- TZ=${TZ:-Europe/Budapest}
- CAPTIVE_PORTAL=false
- TESLA_API_HOST=${TESLA_API_HOST:-https://fleet-api.prd.eu.vn.cloud.tesla.com}
- TESLA_AUTH_HOST=https://fleet-auth.prd.vn.cloud.tesla.com
- TESLA_AUTH_PATH=/oauth2/v3
- TESLA_AUTH_CLIENT_ID=${TESLA_AUTH_CLIENT_ID}
ports:
- "127.0.0.1:4000:4000"
teslamateapi:
image: tobiasehlert/teslamateapi:latest
restart: unless-stopped
depends_on:
database:
condition: service_healthy
environment:
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
- DATABASE_USER=teslamate
- DATABASE_PASS=${DATABASE_PASS}
- DATABASE_NAME=teslamate
- DATABASE_HOST=database
- DATABASE_PORT=5432
- MQTT_HOST=mosquitto
- TZ=${TZ:-Europe/Budapest}
- API_TOKEN=${EVSTATS_API_TOKEN}
expose:
- "8080"
mosquitto:
image: eclipse-mosquitto:2
restart: unless-stopped
command: mosquitto -c /mosquitto-no-auth.conf
volumes:
- ./mosquitto-no-auth.conf:/mosquitto-no-auth.conf:ro
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
depends_on:
- teslamateapi
volumes:
teslamate-db:
listener 1883 allow_anonymous true persistence false
6. Indítás
A mappában (az evstats-teslamate fork a compose mellett legyen, Grafana nélkül):
docker compose build teslamate
docker compose up -d
docker compose ps
Nincs Grafana, nincs :3000. A TeslaMate UI csak a gépeden: http://127.0.0.1:4000 — Tesla belépés és autó párosítás. A grafikonok az evstats.online dashboardon.
A virtual key a közös evstats/evtolto domainhez tartozik.
7. Összekötés a webes felülettel
1. Fiókom → Otthoni Docker mód bekapcsolva.
2. Otthoni API URL = a tunnel https címe (ugyanaz, mint HOME_PUBLIC_URL lenne).
3. Mentés.
4. Dashboard: ha a tunnel él, zöld sáv („Otthoni konténer kapcsolódva”). Ha nem, sárga sáv.
5. Az Insights oldal home módban a dashboardra visz: a részletes SQL nálunk nincs, a napló nálad van. A TeslaMate UI (localhost:4000) a teljes előzmény.
Kulcs csere: Fiókom → új API token → írd be a .env EVSTATS_API_TOKEN-be → docker compose up -d teslamateapi
8. Napi használat és leállítás
Élő webes adat: a compose fusson, a gép ne aludjon, a tunnel legyen healthy (Cloudflare dashboard).
Leállítás: docker compose down — a volume (teslamate-db) megmarad, a napló nem vész el.
Frissítés: docker compose pull && docker compose up -d
Az evstats fiók törlése NEM törli a te Docker volume-odat. Állítsd le a compose-t, ha már nem kell.
9. Biztonság
• TeslaMate 4000 csak 127.0.0.1.
• A tunnel csak a teslamateapi:8080-at húzza ki; minden kéréshez kell az API token.
• ENCRYPTION_KEY, DATABASE_PASS, Tesla token soha ne kerüljön e-mailbe vagy az evstats szerverre.
• A Tesla CLIENT_SECRET-et ne másold a .env-be.
• A Cloudflare-fiók és a tunnel token a tied; ha kompromittálódik, rotáld a tunnelt és az API kulcsot.
10. Tesla-számla (fontos)
Otthon a TeslaMate a közös evstats TESLA_AUTH_CLIENT_ID-vel hívja a Fleet API-t. A Tesla pay-per-use számla az üzemeltetőé, nem a tied. A sűrű poll a mi Tesla-költségünket növeli. A saját Tesla developer app ebben a körben nincs. Leapmotor (későbbi profil) nem Tesla-számla.
11. Hibaelhárítás
Dashboard sárga / nem elérhető: docker compose ps; cloudflared log: docker compose logs cloudflared; a CF hostname HTTP URL-je teslamateapi:8080 legyen, ne a 4000.
401 a weben: az EVSTATS_API_TOKEN nem egyezik a Fiókom kulccsal, vagy a teslamateapi nem indult újra tokencsere után.
TeslaMate nem kér autót: nyisd a http://127.0.0.1:4000-et a Docker hoston, ne a tunnelen.
Adatbázis: a volume neve teslamate-db. docker compose down -v TÖRÖLI a naplót — ne használd, ha kellenek az utak.