在国内docker部署安装多用户teslamate

已成功部署运行,请参考我的这个docker compose文件, 为每个用户创建一个容器,但是公用数据库和grafana

services:
  teslamate_shuai:
    image: docker.1ms.run/teslamate/teslamate:latest
    user: root
    restart: always
    environment:
      - ENCRYPTION_KEY=your_random_key_1
      - DATABASE_USER=postgres
      - DATABASE_PASS=supersecret
      - DATABASE_NAME=teslamate_shuai
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
    ports:
      - 127.0.0.1:4000:4000
    depends_on:
      - database
      - mosquitto
    volumes:
      - ./data/import_shuai:/opt/app/import

  teslamate_daxing:
    image: docker.1ms.run/teslamate/teslamate:latest
    user: root
    restart: always
    environment:
      - ENCRYPTION_KEY=your_random_key_2
      - DATABASE_USER=postgres
      - DATABASE_PASS=supersecret
      - DATABASE_NAME=teslamate_daxing
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
    ports:
      - 127.0.0.1:4001:4000
    depends_on:
      - database
      - mosquitto
    volumes:
      - ./data/import_daxing:/opt/app/import

  database:
    image: docker.1ms.run/library/postgres:17
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=supersecret
    volumes:
      - ./data/pgdata:/var/lib/postgresql/data
      - ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro

  mosquitto:
    image: docker.1ms.run/library/eclipse-mosquitto:2
    restart: always
    command: mosquitto -c /mosquitto-no-auth.conf
    volumes:
      - ./data/mosquitto/config:/mosquitto/config
      - ./data/mosquitto/data:/mosquitto/data

  grafana:
    image: docker.1ms.run/teslamate/grafana:latest
    restart: always
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    ports:
      - 127.0.0.1:3000:3000
    volumes:
      - ./data/grafana:/var/lib/grafana
    depends_on:
      - database

init-db.sh:

#!/bin/bash
set -e

# 判断并创建数据库 teslamate_shuai
if ! psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -tAc "SELECT 1 FROM pg_database WHERE datname='teslamate_shuai'" | grep -q 1; then
  psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
    CREATE DATABASE teslamate_shuai OWNER postgres;
EOSQL
fi

# 判断并创建数据库 teslamate_daxing
if ! psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -tAc "SELECT 1 FROM pg_database WHERE datname='teslamate_daxing'" | grep -q 1; then
  psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
    CREATE DATABASE teslamate_daxing OWNER postgres;
EOSQL
fi

# 安装扩展
for DB in teslamate_shuai teslamate_daxing; do
  psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$DB" <<-EOSQL
    CREATE EXTENSION IF NOT EXISTS cube WITH SCHEMA public;
    CREATE EXTENSION IF NOT EXISTS earthdistance WITH SCHEMA public;
EOSQL
done

其它请参看官方: