Skip to content

chore(ops): prod ai-server Instaloader 세션 볼륨 마운트 + .env.backend.example 동기화 #575

@CIOI

Description

@CIOI

배경

prod 백엔드(ai-server)는 Mac mini에서 Docker Compose(docker-compose.prod.yml)로 실행됩니다. Instagram raw_posts(#259) 및 entity enrichment(#495)는 Instaloader 세션 파일(~/.config/instaloader/session-<username>)이 필요합니다.

현재 ai 컨테이너에는 Instaloader 세션 볼륨 마운트가 없어, 컨테이너 재생성·재배포 시 세션이 사라지거나 docker cp로 매번 수동 복사해야 합니다.

또한 packages/ai-server/.dev.env.example에 있는 prod 관련 env(RAW_POSTS_R2_*, INSTAGRAM_*)가 루트 .env.backend.example(→ .env.backend.prod)에는 아직 반영되지 않았습니다.

목표

  1. prod ai 컨테이너에 Instaloader 세션 디렉터리 볼륨 마운트 — 재시작 후에도 세션 유지
  2. .env.backend.example실제 prod에 필요한 env만 동기화 (packages example은 상세, 루트는 필수만)

범위

1. Docker Compose (packages/api-server/docker/stack/docker-compose.prod.yml)

  • ai 서비스에 host → container 볼륨 추가 (예시):

    volumes:
      - /Users/decoded/.config/instaloader:/root/.config/instaloader:ro
  • 호스트 경로는 Mac mini 배포 서버 기준 (/Users/decoded/...) — compose 주석으로 문서화

  • :ro 기본 (세션 갱신은 호스트에서 instaloader -l 후 파일 교체)

2. .env.backend.example

  • RAW_POSTS_R2_* (bucket은 ai-server 기본값 raw → example 생략)
  • INSTAGRAM_SESSION_USERNAME, INSTAGRAM_SYNC_SINCE
  • ENTITY_ENRICHMENT_GEMINI_MODEL코드 기본값으로 충분한 항목은 루트 example에 넣지 않음 (packages example에만 유지)

3. (선택) 운영 메모

  • 최초 1회: 호스트 또는 docker exec -it으로 instaloader -l <부계정>session-* 파일 생성
  • 이후 ai-server 기동 시 별도 instaloader -l 불필요 — 코드가 load_session_from_file로 자동 로드
  • 세션 만료 시: 호스트에서 갱신 + (선택) Telegram 알림은 후속 이슈

비범위

  • 컨테이너 startup 시 Instaloader 대화형 login
  • Telegram webhook 기반 login 자동화
  • packages/ai-server/.dev.env.example 변경 (이미 상세히 있음)

수용 기준

  • prod ai 컨테이너 재시작 후에도 /root/.config/instaloader/session-* 유지
  • INSTAGRAM_SESSION_USERNAME 설정 + 유효 세션 파일 시 entity enrichment / raw_posts Instagram adapter 동작
  • .env.backend.example에 위 env 항목 반영, packages dev example과 역할 분리(루트=필수, packages=상세) 주석 또는 팀 합의대로

관련

테스트 계획

  • 로컬/staging compose에서 볼륨 마운트 경로 smoke (dev compose는 경로 다를 수 있음)
  • Mac mini prod: 세션 파일 마운트 후 ai 로그에서 instaloader session load 성공 확인

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions