테슬라메이트(TeslaMate)를 아마존 클라우드(AWS)에 설치하기
Post

테슬라메이트(TeslaMate)를 아마존 클라우드(AWS)에 설치하기

AWSTeslaMate를 설치해 본다.

TeslaMate ?
테슬라 차량 운행 데이터를 분석하여 시각화하여 보여주는 프로그램
AWS ?
아마존에서 운영하는 클라우드 서비스

1. AWS 클라우드 환경 구축

먼저 AWS 에 접속하여 계정을 생성한다.

계정 생성 절차는 아래의 순서로 진행 된다.

  1. 이메일 인증
  2. 신용카드 인증
  3. 문자 인증
  4. Support Plan 선택

신용카드 인증 시 유효성 검증을 위해 $1이 승인되나 실제로 결제되는 것은 아니다.

앞선 인증 단계를 거친 후 Support Plan 선택 단계에서 기본 지원 - 무료를 선택한다.

1년간 무료로 지원되는 리소스로도 TeslaMate를 설치 및 운영할 수 있다.
(현재 1년 넘게 서비스를 이용 중이나 문제는 없었다.)
1년 단위로 계정을 새로 만들면 계속 무료로 사용 가능하다. (단, DB 백업 및 이전의 귀찮음 발생)

이제 VM(EC2) 을 생성하자. 메인 대시보드 화면에서 가상 머신 시작을 클릭하여 새로운 VM을 만들자.

인스턴스 이름을 입력한다. (아무 이름 사용 가능)
unbuntu를 선택한다. 22.04 버전을 선택하였다. (현재 기준 최신버전)

인스턴스 유형은 1년간 무료인 t2-micro 를 선택한다.

키 페어를 생성한다.

키 페어 이름, 유형, 파일 형식을 선택한다.

Mac을 사용하고 있어 .pem 파일 형식을 선택하였지만 만약 윈도우에서 PuTTY를 통해 터미널에 접속하는 경우 .ppk 방식으로 저장하면 된다.

키페어 생성 클릭 시 해당 파일이 로컬에 다운된다.
VM에 터미널로 접속하기 위해 필요하므로 다운받은 Key는 잘 보관해 둔다.

네트워크 설정은 우선 기본 선택으로 둔다. (향후 변경 가능)

보안상 SSH 접근을 Anywhere 에서 MyIP로 접근을 변경하는게 좋다. 다만, 대부분 가정에서 사용하는 PC가 유동 IP이므로 IP가 바뀌는 경우 네트워크 설정을 그때마다 바꿔줘야 한다.

스토리지 용량을 8Gib 에서 30Gib로 변경해 준다. (30Gib 까지 무료임)

설정을 마쳤으면 instance를 생성해 준다.

이제 instance가 생성되었고 추가 설정이 필요하다.
먼저 탄력적 IP를 추가한다. 생성된 IP가 앞으로 접속할 IP 라고 생각하면 된다.

탄력적 IP를 생성된 instance와 연결 해준다.

마지막으로 보안그룹 규칙을 설정한다.

인바운드 규칙편집을 클릭한다.

규칙 추가를 클릭하여 3000, 4000 포트를 추가해 준다.
접근 권한은 AnyWhere 또는 본인 IP를 선택하여 규칙을 저장한다.

이제 터미널에 접속해 보자.
앞서 생성한 pem 파일을 .ssh 폴더에 복사한다.

pem 파일 퍼미션을 400 적용한다.

1
$ chmod 400 teslamate.pem

ip 정보는 앞에서 생성한 탄력적 IP를 기입하고 터미널에 접속한다.
처음 접속 시 fingerprint 는 yes를 입력한다.

1
2
3
4
5
6
7
8
9
$ ssh -i ~/.ssh/teslamate.pem ubuntu@[ip]

The authenticity of host '***.***.***.*** (***.***.***.***)' can't be established.
ED25519 key fingerprint is SHA256:jvf2Yol0vrgCFT5X45F/*****************.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
...
...
ubuntu@ip-***-***-***-***:~$ 

2. Docker 설치

  1. docker 설치 (feat. ubuntu)

    Install Docker Engine on Ubuntu

  2. docker-compose 설치
1
2
3
4
5
6
7
8
9
# docker-compose 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# docker-compose 권한 및 link 설정
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# version 확인
$ docker-compose -v

3. TeslaMate 설치

계정 폴더 아래(/home/ubuntu) docker-compose.yml 파일을 생성하여 아래 내용을 변경 후 복사해준다.

  • ENCRYPTION_KEY: 사용자 token값을 다시 한번 암호화하기 위해 사용하는 키값으로 비밀번호를 넣어준다.
  • DATABASE_PASS: DB 비밀번호를 설정
  • POSTGRES_PASSWORD: DB 비밀번호를 설정

비밀번호 설정 시 앞에 공백을 주지 않도록 한다.
공백을 두는 경우 granfana 에서 데이터를 가지고 올때 인증이 안되는 문제가 있었다.
DATABASE_PASS= 12345 (X)
DATABASE_PASS=12345 (O)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
version: "3"

services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY= #insert a secure key to encrypt your Tesla API tokens
      - DATABASE_USER=teslamate
      - DATABASE_PASS= #insert your secure database password!
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
    ports:
      - 4000:4000
    volumes:
      - ./import:/opt/app/import
    cap_drop:
      - all

  database:
    image: postgres:14
    restart: always
    environment:
      - POSTGRES_USER=teslamate
      - POSTGRES_PASSWORD= #insert your secure database password!
      - POSTGRES_DB=teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - DATABASE_USER=teslamate
      - DATABASE_PASS= #insert your secure database password!
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
    ports:
      - 3000:3000
    volumes:
      - teslamate-grafana-data:/var/lib/grafana

  mosquitto:
    image: eclipse-mosquitto:2
    restart: always
    command: mosquitto -c /mosquitto-no-auth.conf
    # ports:
    #   - 1883:1883
    volumes:
      - mosquitto-conf:/mosquitto/config
      - mosquitto-data:/mosquitto/data

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

서비스를 올린다.

1
$ sudo docker-compose up -d 

docker-compose pull을 안해도 최초 실행시 이미지가 없으면 알아서 불러온다.

서비스가 잘 올라갔는지 확인해 본다.

1
2
3
4
5
6
$ sudo docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                       NAMES
b66a0ce7bf62   eclipse-mosquitto:2          "/docker-entrypoint.…"   13 seconds ago   Up 10 seconds   1883/tcp                                    ubuntu_mosquitto_1
e0fea2f625e8   teslamate/teslamate:latest   "tini -- /bin/sh /en…"   13 seconds ago   Up 1 second     0.0.0.0:4000->4000/tcp, :::4000->4000/tcp   ubuntu_teslamate_1
5057fe85bf71   postgres:14                  "docker-entrypoint.s…"   13 seconds ago   Up 10 seconds   5432/tcp                                    ubuntu_database_1
b078aeec210d   teslamate/grafana:latest     "/run.sh"                13 seconds ago   Up 10 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   ubuntu_grafana_1

4. TeslaMate 접속

먼저 Tesla 사용자 인증을 해야한다.
http://탄력적 IP:4000 에 접속하여 Access TokenRefresh Token 값을 넣고 OAuth 인증을 해준다.

Token 값은 아래 앱을 설치하여 테슬라 계정(id/pw) 로그인 후 복사해 올 수 있다.

이제 http://탄력적 IP:3000 를 입력하여 Granfana 에 접속한다.
초기 비밀번호는 admin/admin 이다.

대시보드를 보면 본인 차량의 각종 통계를 조회 할 수 있다.

5. TIP

  • 자주쓰는 명령어
    1
    2
    3
    4
    5
    6
    7
    8
    
    # TeslaMate 업데이트 하기
    $ sudo docker-compose pull 
    # TeslaMate 서비스 내리기
    $ sudo docker-compose down
    # TeslaMate 서비스 올리기
    $ sudo docker-compose up -d
    # 현재 서비스 확인 하기
    $ sudo docker ps 
    
  • docker sudo 없이 실행하기
    1
    2
    3
    4
    5
    6
    
    # docker 그룹 생성
    $ sudo groupadd docker
    # docker group에 유저 추가
    $ sudo usermod -aG docker ${USER}
    # docker 재시작
    $ sudo service docker restart
    

테슬라 주문시 아래 링크를 통해 주문하면 추가 혜택을 얻을 수 있습니다.
https://www.tesla.com/ko_kr/referral/thzone19436 바로가기