Bebe MomentBebe Moment

트러블슈팅

사진 페이지가 500 / 로그에 MEDIA_SERVICE_TOKEN env required

미디어를 부르는 페이지(타임라인·상세)가 500 나고 로그에 MEDIA_SERVICE_TOKEN env required 가 보이면, 컨테이너에 MEDIA_SERVICE_TOKEN·MEDIA_JWT_SECRET 가 안 들어간 것입니다.

  • 루트 .envgitignore 이자 dockerignore 대상이라 이미지에 포함되지 않습니다. 이 값들은 반드시 런타임 env(compose environment: / Synology Container Manager 환경변수)로 줘야 합니다.
  • /api/health 는 미디어를 안 거쳐 200 으로 남으므로 헬스체크만으론 못 잡습니다 — 실제 사진 페이지로 확인하세요.

생성:

openssl rand -hex 32

페이지는 뜨는데 사진이 안 뜸 (썸네일 깨짐)

서명 URL 이 노출되지 않은 포트(예: :3001)를 가리키는 경우입니다.

  • 이 배포는 포트 3000 하나만 노출하고 브라우저는 /media/* Next rewrite 로 내부 미디어(:3001)에 접근합니다.
  • MEDIA_PUBLIC_BASE_URL / NEXT_PUBLIC_MEDIA_BASE_URL설정하지 마세요. 미설정 시 PUBLIC_URL 로 폴백되어 /media/... 가 동일 오리진으로 서빙됩니다.
  • :3001 같은 값을 넣으면 브라우저가 닿지 못해 이미지가 깨집니다.

pg16 → pg17 업그레이드 비호환

Postgres 데이터 디렉터리는 메이저 버전 간 비호환입니다. 기존 pg16 볼륨을 pg17 이미지로 바로 올릴 수 없습니다.

  • 구버전에서 pg_dump → pg17 에서 restore 후 pg/ 를 비우고 시작하거나,
  • 앱 자체 백업/복구(설정 → 관리자 → 백업)를 사용하세요.

https 전환 후 로그인이 풀림

PUBLIC_URL 이 http 에서 https 로 바뀌면 세션 쿠키가 __Secure- 접두사로 전환됩니다. 기존 세션 쿠키가 무효화되어 한 번 재로그인이 필요합니다(정상 동작).

푸시·다이제스트·추억 알림 시각이 어긋남

방해금지·다이제스트·추억 푸시는 컨테이너 로컬 시각으로 판단합니다. TZ 가 안 맞으면(예: 기본 UTC) 한국 낮 시간대 알림이 방해금지에 걸려 눌릴 수 있습니다. TZ=Asia/Seoul 처럼 가족 시간대로 맞추세요.

업로드가 중간에 끊김

큰 tus 업로드·SSE 는 리버스 프록시 타임아웃에 민감합니다. 프록시 타임아웃을 ≥ 600초로 두고 WebSocket 을 허용하세요(DSM 리버스 프록시는 사용자 정의 헤더에서 Create > WebSocket).

설치별 트러블슈팅은 Linux · Synology 가이드의 트러블슈팅 절도 참고하세요.