# StarFrame Family — 홈서버 설치용 Compose 파일
#
# 시놀로지: Container Manager > 프로젝트 > 생성 > "직접 작성" 에 붙여넣으세요.
# 그 외 리눅스/맥: 이 파일을 받아 같은 폴더에서 `docker compose up -d`.
#
# 영상을 쓰지 않는 가족은 media-runtime 서비스와 starframe 의 depends_on·tools
# 볼륨·STARFRAME_FFMPEG 를 지우면 됩니다. 사진(HEIC 포함)은 그대로 동작하고,
# 영상 업로드만 거절됩니다. 설치 안내: https://starframe.kr/download

services:
  # FFmpeg 를 공유 볼륨에 풀어 놓고 종료합니다. StarFrame 이 직접 빌드한
  # LGPL 전용 구성이며, 설치 시점에 제3자 바이너리를 받아오지 않습니다.
  # Core 와 따로 버전이 매겨져 있어 FFmpeg 취약점을 Core 재배포 없이 막습니다.
  media-runtime:
    # Core 와 따로 버전이 매겨집니다. FFmpeg 취약점은 이쪽만 올리면 됩니다.
    image: ${STARFRAME_MEDIA_IMAGE:-starframe/media-runtime:0.1.1@sha256:8a8571571c9b3d9c5f9699f2bd70b6ef2ce546b7011178b5f40c32f94facbe0c}
    volumes:
      - tools:/media-runtime
    restart: "no"

  starframe:
    # 다이제스트로 고정해 두면 업데이트와 롤백이 정확해집니다 (deploy/update.sh).
    #   STARFRAME_IMAGE=starframe/family@sha256:… docker compose up -d
    image: ${STARFRAME_IMAGE:-starframe/family:0.2.1@sha256:ca433d0f257028f7655b638abc78a2a61c21b4112f9fe2c30804460f1f4139e2}
    depends_on:
      media-runtime:
        condition: service_completed_successfully
    environment:
      # 초대 링크에 쓰는 공개 주소. HTTPS 여야 PWA 설치와 알림이 켜집니다.
      STARFRAME_PUBLIC_URL: ${STARFRAME_PUBLIC_URL:-}
      # 리버스 프록시를 앞에 두면 그 대역을 적어 주세요. 비워 두면
      # X-Forwarded-* 를 신뢰하지 않습니다.
      STARFRAME_TRUSTED_PROXIES: ${STARFRAME_TRUSTED_PROXIES:-}
      # ffprobe 는 같은 디렉터리에서 찾습니다 (DetectTools).
      STARFRAME_FFMPEG: /media-runtime/bin/ffmpeg
      # ffmpeg/ffprobe 가 libav* 를 찾는 경로.
      LD_LIBRARY_PATH: /media-runtime/lib
      TZ: ${TZ:-Asia/Seoul}
    volumes:
      - data:/data
      - tools:/media-runtime:ro
    ports:
      # 프록시 뒤에 두는 구성이라 기본은 이 서버 안에서만 열립니다.
      # LAN 에서 바로 접속해 보려면 127.0.0.1 을 0.0.0.0 으로 바꾸세요.
      # 다만 HTTP 로는 PWA 설치·알림이 동작하지 않습니다 (제한 모드).
      - "127.0.0.1:8080:8080"
    restart: unless-stopped

volumes:
  data:
  tools:
