CouchDB와 Docker를 이용한 옵시디언 실시간 동기화 및 자동화된 구글 드라이브 백업 시스템입니다.
cli.py: 프로젝트 전체 제어를 위한 중앙 CLI 엔트리포인트main.py:cli.py실행 호환 엔트리포인트configs/:.env,client_secrets.json,token.json등 보안/설정 파일data/: CouchDB 데이터 저장소 및 실행 로그 (logs/)src/: 봇, 인증, 백업, 복원, 설정 등 핵심 로직 모듈docker-compose.yml: CouchDB 컨테이너 정의
configs/.env 파일을 생성하고 아래 항목들을 입력합니다.
COUCHDB_USER / PASSWORD: DB 계정 설정GDRIVE_FOLDER_ID: 백업 파일이 저장될 구글 드라이브 폴더 IDSERVER_IP / PORT: 테일스케일 IP 및 포트 (8080 권장)GDRIVE_REDIRECT_URI:http://127.0.0.1:8080/(고정)DISCORD_BOT_TOKEN: 디스코드 봇 토큰ALLOWED_USER_ID: 봇 명령 허용 대상 Discord User ID(숫자)
아래 스크립트를 실행하면 uv 설치, 도커 가동, DB 초기화, 통합 데몬(systemd) 자동 시작 등록까지 한 번에 완료됩니다.
chmod +x setup.sh
./setup.sh백업을 위해 구글 권한을 획득해야 합니다.
uv run cli.py auth- 디스코드 알림의 링크를 클릭하여 인증을 완료하세요.
- iOS 유저:
127.0.0.1에러 페이지가 뜨면 주소창 URL을 복사해 인증 페이지 하단 입력창에 붙여넣으세요.
모든 기능은 cli.py를 통해 실행됩니다. (main.py도 호환 지원)
| 명령어 | 설명 | 비고 |
|---|---|---|
uv run cli.py backup |
즉시 백업 실행 | --count 10 옵션으로 유지 개수 조절 가능 |
uv run cli.py auth |
구글 드라이브 인증 | token.json 갱신 시 사용 |
uv run cli.py init |
CouchDB 초기화 | 기본 시스템 DB 및 obsidian DB 생성 |
uv run cli.py bot |
디스코드 봇 데몬 실행 | ALLOWED_USER_ID 사용자 명령만 허용 |
uv run cli.py daemon |
통합 데몬 실행 | 봇 + 정시 백업(00:00, 12:00) |
강제 재인증(웹훅 링크 재발송)이 필요하면 아래 명령을 사용하세요.
uv run cli.py auth --force
봇 실행 후 디스코드에서 슬래시 명령으로 제어합니다.
/status: 봇 상태 확인/auth: 구글 드라이브 인증 프로세스 실행 (기존 토큰 유효 시 링크 미발송)/auth force:true: 웹훅 인증 링크 강제 재발송/backup: 즉시 백업 실행
setup.sh 실행 시 obsidian-infra 서비스가 등록되어 서버 부팅 후 자동 시작됩니다.
- 실행 내용: 디스코드 봇 + 정시 백업 스케줄러(매일 00:00, 12:00)
- 상태 확인:
sudo systemctl status obsidian-infra - 로그 확인:
sudo journalctl -u obsidian-infra -f
코드 업데이트 후 아래 스크립트를 실행하면, 최신 코드 반영 + 의존성 동기화 + 서비스 재시작이 한 번에 수행됩니다.
chmod +x update.sh
./update.sh주의: 통합 데몬은 메모리에 로드된 코드로 계속 실행되므로 git pull만으로는 실행 중 프로세스에 반영되지 않습니다.
update.sh는 변경 파일이 있으면 uv sync를 수행하고, 서비스는 매 실행마다 재기동합니다. 유닛이 없으면 setup.sh를 먼저 실행해 등록합니다.
옵시디언 Self-hosted LiveSync 플러그인에서 아래와 같이 설정하세요.
- Remote Type:
CouchDB - URI:
http://[테일스케일-IP]:5984 - Username/Password:
.env에 설정한 값 - Database:
obsidian
1. 인증 타임아웃이 발생했어요
새벽에 인증 알림을 놓치면 보안을 위해 2시간 뒤 프로세스가 종료됩니다. 아침에 일어나서 uv run cli.py auth를 한 번 실행해 주면 됩니다.
2. 서버가 응답하지 않아요 컨테이너 로그를 확인하여 CouchDB 상태를 점검하세요.
docker compose logs -f obsidian_db3. 리디렉션 오류 (redirect_uri_mismatch)
구글 콘솔에 등록된 URI와 .env의 GDRIVE_REDIRECT_URI가 일치하는지 확인하세요. (끝에 / 포함 여부 필수 체크)
백업 성공/실패 여부는 설정된 디스코드 웹훅으로 실시간 전송됩니다. 폰에 디스코드 알림을 켜두시면 편리합니다.