teslamate docker 업데이트 Postgres18

안녕하세요! 오늘은 시놀로지 NAS의 Docker(Container Manager) 환경에서 운영 중인 테슬라메이트(TeslaMate)의 데이터베이스(PostgreSQL)를 최신 v18 버전으로 안전하게 업그레이드하고, 기존의 숨겨진 가상 드라이브(Named Volume) 방식을 파일 스테이션에서 눈으로 직접 관리할 수 있는 물리 폴더(Bind Mount) 방식으로 전환하는 완벽한 가이드를 공유합니다.

직접 작업하면서 마주할 수 있는 대표적인 오류(유저 권한 불일치, 데이터베이스 세션 락, 그라파나 로그인 차단) 해결 방법까지 한방에 정리해 두었으니 천천히 따라와 보세요!


📌 준비물 및 사전 확인

  • 시놀로지 NAS의 SSH 기능을 켭니다. (시놀로지 제어판 ➡️ 터미널 및 SNMP ➡️ SSH 서비스 활성화 체크)
  • 터미널 프로그램(Putty나 Mac 터미널 등)으로 NAS에 접속한 뒤, 아래 명령어를 쳐서 최고 관리자 권한을 얻습니다. (내 시놀로지 비밀번호 입력)
    sudo -i

    (이걸 먼저 치면 앞으로 모든 명령어 앞에 `sudo`를 일일이 안 붙여도 돼서 아주 편합니다!)

  • 테슬라메이트 폴더로 이동합니다.
    cd /volume1/docker/teslamate/
  • 아까 안전한 상태에서 미리 뽑아둔 원본 백업 파일(teslamate_backup.bck)이 이 폴더 안에 잘 있는지 확인해 주세요.
  • [중요] 명령어 중 [사용자_아이디] 부분에는 본인이 테슬라메이트 설치 시 데이터베이스(DB)용으로 설정했던 실제 유저 아이디를 대괄호([ ]) 없이 입력하셔야 합니다.

1단계: 설정 파일(docker-compose.yml) 수정하기

가상 디스크 방식을 지우고, 파일 스테이션의 실제 폴더를 연결하도록 설정을 바꾸는 단계입니다.

nano docker-compose.yml

화면에 영어 글자들이 가득 찬 편집기가 열립니다. 키보드 방향키로 움직이며 아래 두 곳만 똑같이 고쳐주세요.

database: 라고 적힌 구역 찾기

• 수정 전:

database:
  image: postgres:13  # (또는 구버전 숫자)
  volumes:
    - teslamate-db:/var/lib/postgresql

• 수정 후: 이미지 이름을 최신 버전으로 바꾸고, 가상 이름표 대신 실제 폴더 경로(./database)를 적어줍니다.

database:
  image: postgres:18-trixie
  volumes:
    - ./database:/var/lib/postgresql

② 파일 맨 밑바닥 volumes: 구역 찾기

• 수정 전:

volumes:
  teslamate-db:
  teslamate-grafana-data:

• 수정 후: 이제 가상 드라이브를 안 쓸 거니까 teslamate-db: 줄을 과감히 삭제합니다.

volumes:
  teslamate-grafana-data:

💡 보너스 팁: 혹시 맨 첫 줄에 version: '3' 같은 문구가 있다면 그 줄도 그냥 통째로 지워주세요. (최신 도커에서 불필요하다고 경고 창 띄우는 원인입니다.)

💾 저장하고 나오기: 수정이 끝났다면 키보드로 Ctrl + O ➡️ Enter ➡️ Ctrl + X를 순서대로 누르면 안전하게 저장되고 검은 화면으로 돌아옵니다.


2단계: 기존 찌꺼기 청소하고 실제 폴더 만들기

# 1. 꼬여있던 기존 가상 시스템을 깨끗하게 지우면서 정지시킵니다.
docker-compose down -v

# 2. 파일 스테이션에서 눈으로 보게 될 실제 빈 폴더(database)를 만듭니다.
mkdir -p ./database

# 3. 방금 바꾼 설정을 적용해서 컨테이너를 다시 켭니다.
docker-compose up -d

이제 시놀로지 파일 스테이션을 열고 /docker/teslamate/database 폴더 안을 들여다보세요! 18이라는 폴더와 함께 정체 모를 DB 파일들이 실시간으로 막 생겨나는 것을 눈으로 볼 수 있습니다!


3단계: 주행 데이터 안전하게 복원하기 (에러 우회)

도커를 켜자마자 테슬라메이트 앱이 새 데이터베이스에 엄청나게 접속을 시도합니다. 이 상태에서 복원을 시도하면 “다른 유저가 접속 중이라 초기화할 수 없다(other users)”는 에러가 발생합니다.

따라서 접속을 시도하는 테슬라메이트 앱만 잠시 재운 상태에서 강제로 밀고 복원해야 안전합니다.

# 1. 실시간으로 방해하는 테슬라메이트 앱만 잠시 정지시킵니다.
docker-compose stop teslamate

# 2. 현재 켜져 있는 실제 DB 컨테이너 이름을 확인합니다. (예: teslamate-database-1)
docker ps

방금 확인한 [실제_DB_컨테이너_이름]과 본인의 [사용자_아이디]를 대입해서 아래 3줄을 한 줄씩 복사해서 실행합니다.

# 3. 내 DB 계정 이름으로 로그인해서 기존 빈 방을 강제로 삭제합니다. (WITH FORCE 필수!)
docker exec -it [실제_DB_컨테이너_이름] psql -U [사용자_아이디] -d postgres -c "DROP DATABASE teslamate WITH (FORCE);"

# 4. 방 소유주를 내 계정으로 지정하여 깨끗한 새 방을 다시 만듭니다.
docker exec -it [실제_DB_컨테이너_이름] psql -U [사용자_아이디] -d postgres -c "CREATE DATABASE teslamate WITH OWNER [사용자_아이디];"

# 5. 아까 준비해둔 백업 파일(.bck)을 새 방에 마구마구 쏟아붓습니다.
docker exec -i [실제_DB_컨테이너_이름] psql -U [사용자_아이디] -d teslamate < ./teslamate_backup.bck

⚠️ 잠깐! 화면이 멈췄나요? (COPY 6 현상)
백업 데이터를 다 밀어 넣으면 마지막 줄 처리 방식 때문에 간혹 다음 명령어를 입력할 수 있는 프롬프트가 안 나오고 커서만 깜빡거리며 멈추는 현상이 있습니다. 에러 메시지가 없다면 데이터는 다 들어간 것이니 키보드의 Ctrl + C를 눌러 강제로 빠져나오시면 됩니다!

# 6. 복원이 끝났으니 잠재웠던 앱을 깨우고 전체 시스템을 새로고침 합니다.
docker-compose start teslamate
docker-compose restart

4단계: 그라파나(Grafana) 로그인 문제 해결법

버전을 올리고 이사를 마친 뒤 그라파나 대시보드에 로그인하려고 하면, 분명히 아이디/비번이 맞는데도 로그인이 튕기거나 먹통이 되는 경우가 있습니다. 데이터베이스 주인이 바뀌면서 과거 구버전(v13) 시절의 임시 세션 파일 찌꺼기가 충돌을 일으켜서 그렇습니다.

내 소중한 주행 데이터(DB)와는 전혀 상관없는 임시 폴더이니, 아래 명령어로 그라파나 세션만 시원하게 밀어주면 해결됩니다.

docker-compose stop grafana
docker-compose rm -f grafana
docker volume rm teslamate_teslamate-grafana-data
docker-compose up -d

이걸 치고 난 뒤, 그라파나 접속 화면에서 인터넷 브라우저 캐시를 완전히 비워주기 위해 Ctrl + F5를 꼭 눌러주세요!
(기존 비번이 안 먹힌다면 초기 비번인 admin / `admin`을 치고 들어가서 새로 비번을 만드시면 됩니다.)

💡 로그인했는데 최신 데이터가 안 보이고 옛날에 멈춰있나요?

  • 우측 상단 날짜 필터 변경: 그라파나 화면 오른쪽 맨 위에 날짜가 과거 특정일로 고정되어 있는지 확인하세요. 이걸 Last 30 daysLast 5 minutes 같은 실시간 범위로 변경하면 오늘 주행 기록이 뿅 하고 나타납니다.
  • 데이터 소스 재연결: 그라파나 왼쪽 메뉴에서 Connections ➡️ Data sources ➡️ TeslaMate로 들어갑니다. 아무것도 건드리지 마시고 맨 아래로 스크롤을 끝까지 내려서 Save & test 버튼을 클릭해 주세요. Database Connection OK 사인이 뜨며 멈춰있던 파이프라인이 다시 정상 작동합니다.

🎉 마치며

이제 까다로운 PostgreSQL 18 최신 버전 업그레이드가 완료되었고, 데이터도 시놀로지 파일 스테이션 내 database 폴더로 완벽하게 이사했습니다!

앞으로는 나스를 교체하거나 백업(Hyper Backup)을 할 때 복잡한 도커 명령어를 쓸 필요 없이, 파일 스테이션에 보이는 database 폴더만 복사해 두면 되기 때문에 관리가 오만 배는 편해지실 겁니다. 안전하고 즐거운 테슬라 라이프 즐기세요!

관련 글