시놀로지 NAS에서 Obsidian을 외부 접속으로 사용하는 설정 절차를 정리했습니다.

흐름 한 장 요약

flowchart LR
A[컨테이너 배포] --> B[리버스 프록시 연결]
B --> C[Obsidian 자동 실행 설정]
C --> D[원격 접속/성능 점검]
D --> E[로그 확인 및 보안 점검]

🧠 칠판 치트시트

  • 도메인/계정/비밀번호는 문서에 직접 쓰지 말고 변수로 관리.
  • 외부 접속은 리버스 프록시 + HTTPS + WebSocket 확인이 핵심.
  • 데스크톱 자동실행(autostart/openbox/xsession) 3단을 맞춰야 안정적.
  • 배포 후 docker logs로 초기 에러를 먼저 잡는다.

1) docker-compose (공유용 표준 템플릿)

services:
  obsidian:
    image: ghcr.io/linuxserver/obsidian:latest
    container_name: Obsidian
    security_opt:
      - no-new-privileges:false
      - seccomp:unconfined
    healthcheck:
      test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/3000' || exit 1
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    ports:
      - "${OB_HTTP_PORT:-3421}:3000"
      - "${OB_HTTPS_PORT:-3427}:3001"
    shm_size: "5gb"
    volumes:
      - ${OB_CONFIG_PATH:-/volume1/docker/obsidian}:/config:rw
      - ${OB_VAULT_PATH:-/volume1/desktop/<VAULT_NAME>}:/config/<VAULT_NAME>:rw
    environment:
      CUSTOM_USER: ${OBSIDIAN_USER}
      PASSWORD: ${OBSIDIAN_PASSWORD}
      PUID: ${PUID:-1026}
      PGID: ${PGID:-100}
      TZ: ${TZ:-Asia/Seoul}
    restart: unless-stopped

실행:

cd /volume1/docker/obsidian
docker compose up -d

공식 참고: LinuxServer Obsidian

2) 시놀로지 리버스 프록시 표준값

  • 소스: HTTPS / <YOUR_DOMAIN> / 443
  • 대상: HTTPS / localhost / ${OB_HTTPS_PORT}
  • WebSocket: 가능하면 체크박스 ON, 없으면 아래 헤더 수동 추가
    • Upgrade: $http_upgrade
    • Connection: $connection_upgrade

실무에서 리다이렉트 루프가 나면 대부분 대상 프로토콜/포트 불일치가 원인입니다.

3) Obsidian 자동실행 3단 구성

(a) autostart

docker exec Obsidian bash -c 'mkdir -p /config/.config/autostart && cat > /config/.config/autostart/obsidian.desktop << EOF
[Desktop Entry]
Type=Application
Name=Obsidian
Exec=/usr/bin/obsidian --no-sandbox %U
Terminal=false
Categories=Office;
X-GNOME-Autostart-enabled=true
EOF'

(b) openbox autostart

docker exec Obsidian bash -c 'mkdir -p /config/.config/openbox && cat > /config/.config/openbox/autostart << EOF
#!/bin/bash
sleep 5
/usr/bin/obsidian --no-sandbox &
EOF'

(c) X session

docker exec Obsidian bash -c 'cat > /defaults/.xsession << EOF
#!/bin/bash
/usr/bin/openbox-session &
sleep 5
/usr/bin/obsidian --no-sandbox &
EOF'

마지막 적용:

docker restart Obsidian

4) 접속 체크 (표준)

  1. https://<YOUR_DOMAIN> 접속
  2. 로그인: ${OBSIDIAN_USER} / ${OBSIDIAN_PASSWORD}
  3. Open folder as vaultconfig/<VAULT_NAME> 선택

5) 자주 발생하는 문제

  • 검은 화면: 빈 화면 더블클릭 → 데스크톱 진입 후 Obsidian 재실행
  • 리다이렉트 루프: 리버스 프록시 대상 프로토콜 HTTPS, 대상 포트 ${OB_HTTPS_PORT} 재확인
  • 느림: Selkies에서 FPS 60→30, CRF 25→28 조정

참고: Selkies 프로젝트

미니 사례 2개

사례 1) 민감정보가 문서에 남는 문제

  • Before: 사용자명/비밀번호를 문서에 평문 기재
  • After: ${OBSIDIAN_USER}, ${OBSIDIAN_PASSWORD} 변수 치환 + .env 분리

사례 2) 루프 오류 반복

  • Before: 소스 HTTPS인데 대상을 HTTP로 두어 302 반복
  • After: 대상도 HTTPS:3427로 고정해 즉시 정상화

20분 도입 루틴

  • 5분: .env 작성(도메인/계정/비밀번호/포트)
  • 5분: docker compose up -d 실행
  • 5분: 리버스 프록시 + WebSocket 설정
  • 5분: 재시작 후 접속/로그 확인

빠른 체크리스트

  • 문서/레포에 실제 비밀번호가 남아있지 않다.
  • 리버스 프록시 소스/대상이 모두 HTTPS로 맞다.
  • docker logs Obsidian에 치명 에러가 없다.
  • 볼트 경로가 ${OB_VAULT_PATH}와 일치한다.

다음 읽기