teslamate docker compose 部署
准备安装了
docker和docker compose的Linux环境,用docker -v和docker compose version验证新建文件夹并进入
创建
.env文件,填写相关参数
TM_ENCRYPTION_KEY=xxxxxxxx # 填写自定义加密秘钥
TM_DB_USER=teslamate # 不动
TM_DB_PASS=xxxxxxxxx # 填写自定义数据库密码
TM_DB_NAME=teslamate # 不动
GRAFANA_USER=xxxxxxxx # 填写自定义grafana用户名
GRAFANA_PW=xxxxxxxx # 填写自定义grafana密码
FQDN_TM=xxxxxxxx # 填写访问的域名
TM_TZ=Asia/Shanghai # 填写时区(IANA 时区格式)
LETSENCRYPT_EMAIL=xxxxxxxx # 用于自动申请SSL证书的邮箱创建
.htpasswd文件,用于Teslamate页面的访问验证,格式形如用户名:加密后的密码
teslamate:$2y$10$f7PB3UF3PNzqMIXZmf1dIefOkrv/15Xt6Xw3pzc6mkS/B5qoWBdAG创建
docker-compose.yml文件
services:
teslamate:
image: teslamate/teslamate:latest
restart: always
container_name: teslamate
depends_on:
- database
environment:
- ENCRYPTION_KEY=${TM_ENCRYPTION_KEY}
- DATABASE_USER=${TM_DB_USER}
- DATABASE_PASS=${TM_DB_PASS}
- DATABASE_NAME=${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.teslamate-auth.basicauth.realm: "teslamate"
traefik.http.middlewares.teslamate-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-ws.rule: "Host(`${FQDN_TM}`) && Path(`/live/websocket`)"
traefik.http.routers.teslamate-ws.entrypoints: "websecure"
traefik.http.routers.teslamate-ws.tls: ""
traefik.http.routers.teslamate.rule: "Host(`${FQDN_TM}`)"
traefik.http.routers.teslamate.middlewares: "teslamate-auth"
traefik.http.routers.teslamate.entrypoints: "websecure"
traefik.http.routers.teslamate.tls.certresolver: "tmhttpchallenge"
cap_drop:
- ALL
database:
image: postgres:17
restart: always
container_name: database
environment:
- 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
restart: always
container_name: grafana
environment:
- DATABASE_USER=${TM_DB_USER}
- DATABASE_PASS=${TM_DB_PASS}
- DATABASE_NAME=${TM_DB_NAME}
- DATABASE_HOST=database
- GRAFANA_PASSWD=${GRAFANA_PW}
- GF_SECURITY_ADMIN_USER=${GRAFANA_USER}
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PW}
- GF_AUTH_ANONYMOUS_ENABLED=false
- GF_SERVER_DOMAIN=${FQDN_TM}
- GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s/grafana
- GF_SERVER_SERVE_FROM_SUB_PATH=true
volumes:
- teslamate-grafana-data:/var/lib/grafana
labels:
traefik.enable: "true"
traefik.port: "3000"
traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
traefik.http.routers.grafana-insecure.rule: "Host(`${FQDN_TM}`)"
traefik.http.routers.grafana-insecure.middlewares: "redirect"
traefik.http.routers.grafana.rule: "Host(`${FQDN_TM}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))"
traefik.http.routers.grafana.entrypoints: "websecure"
traefik.http.routers.grafana.tls.certresolver: "tmhttpchallenge"
mosquitto:
image: eclipse-mosquitto:2
restart: always
container_name: mosquitto
command: mosquitto -c /mosquitto-no-auth.conf
ports:
- "127.0.0.1:1883:1883"
volumes:
- mosquitto-conf:/mosquitto/config
- mosquitto-data:/mosquitto/data
proxy:
image: traefik:v2.7
restart: always
container_name: proxy
command:
- "--global.sendAnonymousUsage=false"
- "--providers.docker"
- "--providers.docker.exposedByDefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.tmhttpchallenge.acme.tlschallenge=true"
- "--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"
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:启动
docker compose up -d关闭
docker compose down
teslamate docker compose 部署
https://blog.yaorelax.com/archives/fa63caaf-feff-4c5e-aab2-2da2c0211679