• 4.2.1 — MinIO를 PGSTY Silo로 교체

    4.2.0 대비 변경사항

    스토리지: MinIO → PGSTY Silo

    • upstream MinIO 커뮤니티판의 유지보수가 끝나(2025-12 유지보수 모드, 2026-02 archive, 2026-09 Docker Hub 저장소 삭제) 기존 이미지 git.2ex.dev/archive/minio:source-7aac2a2c5b7c는 이후 공개된 인증 우회 등 CVE가 패치되지 않는 상태였습니다.
    • minio 서비스를 MinIO fork인 PGSTY Silo docker.io/pgsty/silo:RELEASE.2026-09-16T00-00-00Z(digest 고정)로 교체했습니다. 같은 데이터 형식을 쓰므로 데이터 이전 없이 이미지만 바뀌는 in-place 전환입니다.
    • 서비스 이름 minio, MINIO_* 환경 변수, ./data/minio 볼륨, 포트, healthcheck는 그대로입니다. .env 변경은 필요 없습니다. 앱 코드도 바뀌지 않았습니다.
    • 예전 MinIO를 소스에서 빌드하던 ops/Dockerfile.minio·ops/minio-source.yml을 제거했습니다.

    문서

    • 운영 가이드에 Silo 운영 전환 절차(데이터 보존 → 갱신 → 배포 → 점검 → 롤백)를 추가했습니다.
    • 개발 환경은 이제 git.2ex.dev 레지스트리 로그인 없이 실행할 수 있어 README 빠른 시작에서 해당 단계를 뺐습니다(운영 배포와 이미지 게시는 여전히 필요).

    호환되는 인프라·보안 교체이므로 patch 버전입니다. DB 스키마·migration·환경 변수·API 변경은 없습니다.

    이미지 게시 범위

    backend·crawler·web·nginx·byedpi·redis의 운영 빌드 입력이 4.2.0 latest와 모두 같아 새로 빌드·게시한 이미지가 없습니다(publish-images.ps1 -ChangedOnly 결과 "nothing to build or publish"). 레지스트리 태그는 추가하지 않았고 기존 latest를 그대로 사용합니다. Silo는 Docker Hub의 외부 이미지이며 compose.yml에서 digest로 고정합니다.

    NAS 업데이트

    이번 업데이트는 MinIO 실행 이미지를 바꿉니다. 작업을 멈춘 상태에서 운영 data/minio를 먼저 별도 보존하세요. Silo는 공식적으로 이전 바이너리로의 역방향 교체를 보장하지 않습니다.

    cd /volume1/2ex-hentai
    git pull
    docker login git.2ex.dev
    sh ops/deploy-production.sh
    docker compose --env-file .env.production ps
    
    • NAS가 Docker Hub(docker.io/pgsty/silo)에서 이미지를 받을 수 있어야 합니다.
    • deploy-production.sh는 설정이 바뀐 minio만 교체합니다. .env.production은 그대로 둡니다.
    • 전환 후 minio가 healthy이고 /api/health/ready가 200인지 확인하고, 운영 관리의 orphan audit와 갤러리 목록·썸네일·뷰어를 점검하세요. Silo 서버 로그 시각은 UTC입니다.
    • 세부 절차와 롤백은 Silo 운영 전환을 따릅니다.

    4.2.0 대비 전체 변경

    검증 (개발 환경 PoC, 2026-10-01)

    • 개발 data/minio(2,625객체·353MiB)를 보존한 뒤 같은 볼륨으로 Silo를 기동했습니다. 앱과 같은 SDK로 전체 ListObjectsV2 목록, 객체별 SHA-256, Content-Type·Cache-Control·metadata, S3 오류 이름 12종, 쓰기(Put→Head→Get→Delete)를 기존 이미지 기준선과 비교해 차이 0이었습니다.
    • 롤백 리허설: 원래 이미지로 되돌린 뒤에도 차이 0, 다시 Silo로 전환한 뒤에도 차이 0.
    • Nginx 경유 게스트 브라우저로 갤러리 25개의 API·썸네일·홈 카드·뷰어 첫·마지막 페이지(50장) 표시 통과, 콘솔 오류 0.
    • 격리 run-integration.ps1에서 Silo로 S3 호환 단계(서명 CRUD·metadata·stream·오류·1,003객체 pagination)·API·Backend 통과. 기존 1440px 갤러리 중앙정렬 실패(PARTIAL)에서 중단.
    • run-operations.ps1 -DeploymentOnly, 개발·운영 Compose config --quiet, 추적 Markdown 21개 링크·anchor 오류 0건 통과.
    • 운영 데이터(632GiB·270만 객체)에서의 전환과 NAS 배포는 실행하지 않았습니다.

    게시 확인

    • 릴리스 소스: f107c27c4425263ac96295111ae29357a54ffd84 (주석 태그 4.2.1).
    • 레지스트리: 새 태그 없음. 6개 자체 이미지 모두 기존 latest digest 유지.
    • Silo 이미지: docker.io/pgsty/silo:RELEASE.2026-09-16T00-00-00Z@sha256:635197cb9f36d01bee221d34d1c7d7960f6a95c48b0b6c01d99cd13bdae51a46.
    Downloads 2