트러블슈팅
사진 페이지가 500 / 로그에 MEDIA_SERVICE_TOKEN env required
미디어를 부르는 페이지(타임라인·상세)가 500 나고 로그에 MEDIA_SERVICE_TOKEN env required 가 보이면, 컨테이너에 MEDIA_SERVICE_TOKEN·MEDIA_JWT_SECRET 가 안 들어간 것입니다.
- 루트
.env는 gitignore 이자 dockerignore 대상이라 이미지에 포함되지 않습니다. 이 값들은 반드시 런타임 env(composeenvironment:/ 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).