• 1.1.1 — 자동 메일 확인과 설치·알림 개선

    개인 이메일 수신 서버 1.1.1

    1.1.0 대비 메일함 자동 확인과 설치·알림 설정 경험을 개선했습니다.

    1.1.0 대비 변경사항

    • 5초 자동 확인: SSE와 함께 메일 목록·폴더 통계를 확인 완료 후 5초마다 갱신합니다. 다음 확인까지 카운트다운·진행 막대·마지막 확인 시각을 표시하고 새 메일 건수와 해당 행을 강조합니다. 체크 선택·더 불러온 목록·스크롤을 유지하며 자동 확인만으로 열린 본문을 다시 불러오지 않습니다. 실패하면 기존 목록을 보존하고 재시도하며, 숨겨진 탭·오프라인에서는 중지했다가 복귀 시 확인합니다.
    • 모바일 PWA 안내: 로그인 후 하단에 “mail.2ex.cloud를 PWA 앱으로 추가할까요?”를 표시합니다. Android 등은 설치 가능 이벤트가 있을 때만, iPhone/iPad는 수동 안내를 표시합니다. 추가 버튼은 설치창 또는 “설정 메뉴의 ‘홈 화면에 추가’를 선택해 주세요.” 안내를 엽니다. 취소·× 선택을 브라우저에 저장해 이후 자동 표시를 숨깁니다. PC와 설치한 앱에서는 자동 표시하지 않습니다. 성인 확인 기능은 추가하지 않았습니다.
    • 메일 알림 스위치: 로그인·서버 키 준비 후 사용자가 스위치를 켤 때 권한을 요청합니다. “신규 메일이 오면 알립니다.”에서 브라우저 구독과 서버 저장 완료 후 “이 브라우저로 알림을 받습니다.”로 바뀝니다. 끄면 현재 브라우저의 구독을 해제합니다. 저장 실패·권한 거부·미지원·서버 미준비를 구분하고 다른 기기는 유지합니다.
    • 로그인 화면·테마: 제목을 mail.2ex.cloud로 변경하고 PRIVATE MAIL 및 하단 소개 문구를 제거했습니다. 저장된 테마 선택이 없으면 다크모드를 기본 적용하며 기존 라이트모드 선택은 유지합니다.
    • 배포 기본값: 기본 호스트 포트를 30003으로, 영구 저장 기본 경로를 ./data/*로 통일했습니다. .env.example, Compose, 운영 문서와 패키지 버전을 1.1.1에 맞췄습니다. 컨테이너 내부 포트는 3000입니다.
    • 검증: 설치 취소 저장, 알림 스위치, 5초 갱신 간격, 페이지·체크·스크롤 보존 및 오류 복구 모의 브라우저 시험을 추가했습니다. Cloudflare 수신 Worker와 HMAC 프로토콜은 변경하지 않았습니다.

    업데이트

    기존 데이터·키를 백업한 뒤 .env에서 IMAGE_TAG=latest를 지정합니다. latest와 1.1.1은 현재 같은 이미지를 가리키며 고정 운영에는 IMAGE_TAG=1.1.1을 사용할 수 있습니다. 게시 후 main의 Compose·환경 예시는 latest를 기본값으로 변경했습니다. 이미 게시된 1.1.1 Git 태그의 기본값은 1.1.1로 유지합니다. 기존 DATA_PATH, LOGS_PATH, BACKUP_PATH, CLAMAV_DB_PATH, MASTER_KEY_PATH 값은 실제 저장 위치에 맞춰 유지하세요. 경로 기본값 변경만으로 기존 데이터가 이동하지 않습니다. 기존 DB에 사용하는 마스터키를 새로 생성하지 마세요.

    기존 .env의 HOST_PORT가 있으면 그 값이 우선합니다. 30003으로 전환할 경우 운영 프록시 포트도 함께 맞춰야 합니다. 새 기본 경로는 ./data/data, ./data/logs, ./data/backups, ./data/clamav-db, ./data/secrets/master.key입니다.

    docker compose pull
    docker compose up -d --no-build
    

    ClamAV 시작 스크립트와 conf 파일은 컨테이너 UID 1000이 읽을 수 있어야 합니다. /bin/sh: cannot open /run/mail-clamav-start.sh: Permission denied가 발생하면 공개 설정 파일인 scripts/clamav-start.sh, clamav.conf, freshclam.conf의 읽기 권한을 확인하세요. 비밀 파일 권한은 완화하지 않습니다.

    이미지와 검증

    • 이미지: git.2ex.dev/hanyul/cloudflare-email-webhook:1.1.1, :latest (Linux amd64, 동일 이미지)
    • 고정 참조: git.2ex.dev/hanyul/cloudflare-email-webhook@sha256:4be024378a89b3825bee100f5b6abb915329d7c3d5002d96f4d69c916ae0537e
    • 소스 커밋: c40c4f78055698aaa14923daa71154287aadf819
    • Windows 시험 19개 통과·Linux 전용 4개 건너뜀. 해당 배포 이미지 Linux 시험 23개 통과·실패/건너뜀 0, bind mount 재생성·강제 종료/재전송·백업 복구 검증 통과.
    • UI lint/build, Chromium 패스키·미리보기·320~1440px 반응형 및 설치/알림/5초 갱신 모의 시험, Compose latest/30003 설정 검증 통과.
    • 새 앱 이미지 Trivy High/Critical 0건. 검사 시점 2026-09-28T11:55:47.917179796Z. 알려진 로컬 비밀값 2개와 대조한 현재 번들·이미지 일치 0건, 이미지 내 .env/마스터키 없음. 기존 Git 이력 6개 객체 일치는 유지합니다.
    • 원격 annotated tag/peeled ref, 이미지 version/revision label, 레지스트리 index/platform manifest와 고정 digest pull 및 패키지 1.1.1/PWA 파일 존재 확인.

    미실행: 실제 Android/iPhone 설치와 Push 제공자 전달·잠금 화면 알림, 운영 NAS·Cloudflare Worker 배포, 실제 외부 SMTP 수신. 로컬 모의 시험을 실제 Push 전달로 표시하지 않습니다. ClamAV upstream 이미지는 기존 태그를 재사용하며 이번에 빌드·재게시·취약점 재검사하지 않았습니다. 과거 ClamAV 취약점 기록은 별도로 유지합니다.

    전체 변경 · 운영 절차 · 검증 기록

    Downloads 2