-
hanyul released this
2026-09-30 15:00:23 +09:00 4.1.3 대비 변경사항
수정
- 보안: 게스트 읽기 기록 노출 차단 — 로그인하지 않은 요청의
GET /api/galleries/:id/reading-progress·/api/galleries/stats가 사용자 조건 없이 조회되어 다른 사용자의 읽기 기록을 돌려줄 수 있던 문제를 막았습니다. 게스트는null과 0 통계를 받습니다. - 상단 메뉴 줄바꿈 — 창 폭이 좁을 때 관리자 메뉴 글자가 두 줄이 되던 문제를 고쳤습니다. 832px 이하는 햄버거 메뉴, 833px부터 데스크톱 메뉴로 전환합니다.
- 시스템 다크 테마 — 저장값이 시스템일 때 첫 테마 전환 클릭이 반응하지 않던 문제를 고쳤습니다.
- 서버 상태 메뉴 — 아이콘 대신
서버 상태텍스트로 표시하고 외부 링크 표시는 유지했습니다. - 인기 태그 —
GET /api/tags/popular의limit을 1~100으로 제한합니다. 잘못된 값은 기본 50으로 처리합니다(이전에는 400). - Hitomi 수집 재개 — checkpoint의 구형 필드와 실행 중 호환 추론을 정리하고, 누락된 배치 플래그(
batchReady)를 데이터 보존 migration(NormalizeHitomiBatchReady)으로 채웁니다. 기존 큐와 cursor는 보존하며 손상된 플래그의 재개는 차단합니다. - 운영 스크립트 —
production-audit.sh의 PostgreSQL 설정 검사가 항상 CRITICAL로 판정되던 회귀를 고치고 log-reader 검사를 추가했습니다.backup-production.sh가 셸에MINIO_BUCKET이 없으면 manifest 단계에서 중단되던 문제를 고쳤습니다.restore-drill.sh기본 PostgreSQL 이미지를 운영과 같은 18.6으로 맞췄습니다. - Nginx —
POST /api/crawler/garbage-collection/orphan-audit에 1시간 proxy timeout을 적용했습니다.
빌드·배포
- MinIO 자체 이미지 — 공개 이미지 다운로드 차단과
mc누락 문제로 MinIO를 아카이브 소스에서 빌드한git.2ex.dev/archive/minio:source-7aac2a2c5b7c(mc 포함)로 전환했습니다.compose.yml·백업·복구 스크립트가 이 이미지를 사용합니다. - 변경 서비스만 게시 —
ops/publish-images.ps1 -ChangedOnly를 추가했습니다. 이번 릴리스도 이 옵션으로 게시했습니다.
정리
- 사용하지 않는 코드와 하위호환 잔재를 정리했습니다: backend·crawler의 미사용 Swagger 데코레이터와
@nestjs/swagger의존성, 쓰이지 않는 Nest provider export·shared export·web module export, websrc/store별칭과 미사용 CSS, 루트의 중복 개발 의존성. - 구현만 따라가던 테스트 assertion을 정리하고, main에서도 실패하던 Hitomi 재개 테스트 fixture를 현재 계약에 맞췄습니다.
문서
- README를 소개 중심으로 새로 썼고, 아키텍처·운영 가이드·API 계약·DB 정책·크롤러 복구·테스트 안내·작업 규칙을 현재 코드와 대조해 정정·축약했습니다(약 350KB → 224KB).
API 응답 형태·DB 스키마 구조·환경 변수 변경은 없습니다. 자동 데이터 보존 migration 1건이 포함되어 있으며 호환되는 수정이므로 patch 버전입니다.
이미지 게시 범위
운영 빌드 입력 지문을 4.1.3 시점
latest와 대조해 nginx·backend·crawler·web만 새로 빌드하고4.1.4·latest를 게시했습니다. byedpi·redis는 입력이 같아 기존latestdigest를 유지하며4.1.4태그를 추가하지 않았습니다. log-reader는 backend 이미지를 사용합니다. 전체 stack에는 기본latest를 사용하세요.NAS 업데이트
compose.yml(MinIO 이미지)과 운영 스크립트가 바뀌었으므로 저장소를 먼저 갱신한 뒤 배포 스크립트를 실행합니다. 백업 후 진행하세요.cd /volume1/2ex-hentai git pull docker login git.2ex.dev sh ops/deploy-production.sh docker compose --env-file .env.production psdeploy-production.sh는 전체 pull을 먼저 마친 뒤 digest·설정이 바뀐 서비스(minio·log-reader·backend·crawler·web·nginx)만 순서대로 교체합니다. backend가 시작하면서NormalizeHitomiBatchReadymigration이 자동 적용됩니다. 이미지 rollback은 migration을 되돌리지 않으며, 이 릴리스는 변경 서비스에만 버전 태그가 있으므로IMAGE_TAG로 전체 서비스를 일괄 지정할 수 없습니다.검증
- Docker
run-unit.ps1 -Workspace all통과(shared lint·build, backend 59 suites·284 tests, crawler 48·367, web 98·674). 이후 Swagger 정리·버그 수정 뒤 backend 60 suites·286 tests 재확인. run-operations.ps1 -DeploymentOnly통과(shell-check·deploy-check·release-check,-ChangedOnly시나리오 4건 포함), shellcheck·nginx -t통과.- 개발 stack 재빌드 후 backend·crawler·log-reader 재시작 0회,
/api/health/live·ready200. Nginx 경유 게스트·일반·관리자 Navigation(832·833·900·1024·1440px) 브라우저 확인 통과(일반·관리자 권한은 응답 대체 fixture). 게스트 진행률null·통계 0, popular limit 100000→100·abc→50 확인. - 추적 Markdown 21개 로컬 링크·anchor 오류 0건.
- 전체 integration은 기존 1440px 갤러리 중앙정렬 실패로 PARTIAL 상태이며 재통과하지 않았습니다. schema·crawler recovery runner와 NAS 배포는 이번에 실행하지 않았습니다.
npm ci가 기존 의존성 감사 항목(moderate 4·high 3)을 보고했으며 이번 릴리스에서 갱신하지 않았습니다.
게시 확인
- 릴리스 소스:
d52d7712255b4783a8f59992929499bc4d17895b(주석 태그4.1.4). 4.1.4·latestdigest- nginx
sha256:96dbf538f715d8d8e8dcbee5a931f576d2e64ad80ea9940e6f73c59b2feed5a9 - backend
sha256:b8ca9c459c0e8cece9d182bda8cedc4a40d1f75325a13595d9fa6d1aec625418 - crawler
sha256:1815959aef7e505524037bd65e979d87f4c634e12d7d89964d4048f1a40f6e4a - web
sha256:a8fab4ab2121ea8706ca318475f702bc004a0f73ce210041a9a1ed090358d36c
- nginx
- 이미지 OCI version
4.1.4·revisiond52d7712·입력 지문 label 확인. byedpi·redis는 기존latestdigest 유지·4.1.4태그 부재 확인. - 게시 스크립트의 병렬 push가 레지스트리 업로드 연결 종료로 두 번 실패해(
latest승격 전 중단) 같은 이미지를 서비스별로 순차 push한 뒤latest를 승격했습니다.
Downloads 2
-
Source code (zip)
0
2026-09-30 15:00:23 +09:00 -
Source code (tar.gz)
0
2026-09-30 15:00:23 +09:00
- 보안: 게스트 읽기 기록 노출 차단 — 로그인하지 않은 요청의