안녕하세요! 오늘은 시놀로지 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 days나Last 5 minutes같은 실시간 범위로 변경하면 오늘 주행 기록이 뿅 하고 나타납니다. - 데이터 소스 재연결: 그라파나 왼쪽 메뉴에서
Connections➡️Data sources➡️TeslaMate로 들어갑니다. 아무것도 건드리지 마시고 맨 아래로 스크롤을 끝까지 내려서Save & test버튼을 클릭해 주세요.Database Connection OK사인이 뜨며 멈춰있던 파이프라인이 다시 정상 작동합니다.
🎉 마치며
이제 까다로운 PostgreSQL 18 최신 버전 업그레이드가 완료되었고, 데이터도 시놀로지 파일 스테이션 내 database 폴더로 완벽하게 이사했습니다!
앞으로는 나스를 교체하거나 백업(Hyper Backup)을 할 때 복잡한 도커 명령어를 쓸 필요 없이, 파일 스테이션에 보이는 database 폴더만 복사해 두면 되기 때문에 관리가 오만 배는 편해지실 겁니다. 안전하고 즐거운 테슬라 라이프 즐기세요!