Align capacity units and scope administrator network edits
This commit is contained in:
18
deploy.md
18
deploy.md
@@ -195,7 +195,7 @@ https://hop.noname.company
|
||||
|
||||
### 용량 설정
|
||||
|
||||
환경변수의 MB는 MiB 기준입니다. `2048`은 2GiB입니다.
|
||||
환경변수의 MB는 MiB 기준입니다. `2048`은 2GiB이며 사용자 화면에서는 익숙한 명칭인 2GB로 표시합니다. 화면 표시와 관리자 GB 입력은 모두 1,024 기준입니다(1GB = 1,024MB).
|
||||
|
||||
| 설정 | 기준 |
|
||||
| ------------------------------------ | ------------------------------------------------------------------------------------------------- |
|
||||
@@ -473,7 +473,7 @@ sed -i -e 's/^GUEST_REQUESTS_PER_MINUTE=5$/GUEST_REQUESTS_PER_MINUTE=30/' -e 's/
|
||||
|
||||
수신 요청은 파일·링크·텍스트 아이콘과 제목으로 구분하고 수락/거절 버튼은 2:1입니다. 차단은 오른쪽 하단의 작은 텍스트를 누른 뒤 확인해야 실행됩니다. **푸터의 내 기기 설정 → 차단한 기기 관리 → 차단 해제**로 해제합니다. 차단은 현재 브라우저의 기기 세션에 저장되며 로그인 여부와 별개입니다. 해제해도 이전 요청을 다시 수락하는 방식으로 복구하지 않으므로 발신자가 새로 전송해야 합니다. 상대가 나를 별도로 차단했다면 내 차단 해제만으로 상대의 차단을 풀 수 없습니다.
|
||||
|
||||
수신 파일 용량은 0.1MB 이상부터 MB, 1GB 이상부터 GB로 표시합니다. 그보다 작은 파일은 KB 또는 ‘1 KB 미만’이며, 파일 한 개의 용량은 파일명 옆에 한 번만 표시합니다. 단위는 MB=1,000,000바이트, GB=1,000,000,000바이트입니다. 서버의 MiB/GiB 기준 저장·파일 한도는 유지합니다.
|
||||
수신 파일 용량은 1MB 미만은 KB, 1MB 이상은 MB, 1GB 이상은 GB로 표시합니다. 1KB보다 작은 파일은 ‘1KB 미만’이며, 파일 한 개의 용량은 파일명 옆에 한 번만 표시합니다. 화면은 1,024 기준에 익숙한 KB/MB/GB 명칭을 사용합니다(1GB = 1,024MB). 서버의 기존 저장·파일 한도는 유지합니다.
|
||||
|
||||
## 관리자 화면과 업로드 보호
|
||||
|
||||
@@ -481,11 +481,11 @@ sed -i -e 's/^GUEST_REQUESTS_PER_MINUTE=5$/GUEST_REQUESTS_PER_MINUTE=30/' -e 's/
|
||||
|
||||
저장 파일의 업로드 주체·파일별 접속 지역/IP·만료일, 전체 사용량·예약량·디스크 여유와 현재 업로드를 확인할 수 있습니다. 원본 삭제는 확인창을 거치며 모든 사용자의 연결된 항목도 무효화합니다. 이미 응답 중인 다운로드까지 회수하는 기능은 아닙니다. 관리 화면의 지역은 각 파일의 최초 전송 요청 당시 전달된 IP 기반 추정 정보입니다. 이후 다른 파일을 올린 지역으로 덮어쓰지 않습니다. 같은 요청의 여러 파일에는 같은 정보를 사용합니다.
|
||||
|
||||
**용량 설정 → 수정**에서 동시 업로드 1~16개, 전체 파일 저장 한도, 계정별 보관함·기기 세션별/전체 업로드·파일 한 개·NAS 최소 여유 공간을 변경합니다. 평소에는 값만 표시하고 수정 중에만 입력창과 저장/취소 버튼을 표시합니다. 개인 한도는 모든 계정·기기에 같은 기준으로 적용하며 계정별 예외 설정은 아닙니다. 화면은 GB(1,000 단위)를 사용하며, 서버 설정 범위인 1~1024GiB는 화면에서 약 1.1~1099.5GB에 해당합니다. 기본은 4개·20GiB이고, 업로드 요청은 같은 계정/기기 주체당 동시에 최대 2개만 처리합니다. 새 용량 항목의 초기값은 기존 `.env`를 따릅니다. 파일/개인/기기 한도와 NAS 최소 여유는 관리자 설정을 저장한 뒤 재시작 없이 적용하고 전송 횟수 제한은 유지합니다. 이미 수락해 공간을 예약한 업로드는 한도를 낮춰도 계속되며, 이후 새 공간 예약에는 변경된 한도를 적용합니다. 업로드 본문을 읽기 전에 서버 전체 동시 요청 제한을 적용하고, 들어오는 HTTP 요청에 5분 타임아웃을 적용합니다. 큰 파일은 기존 8MiB 조각 전송을 사용합니다.
|
||||
**용량 설정 → 수정**에서 동시 업로드 1~16개, 전체 파일 저장 한도, 계정별 보관함·기기 세션별/전체 업로드·파일 한 개·NAS 최소 여유 공간을 변경합니다. 평소에는 값만 표시하고 수정 중에만 입력창과 저장/취소 버튼을 표시합니다. 개인 한도는 모든 계정·기기에 같은 기준으로 적용하며 계정별 예외 설정은 아닙니다. 화면과 GB 입력은 1,024 기준을 사용하므로 기존 기본값은 20GB이며 15를 입력하면 15GB입니다. 전체 저장 한도 입력 범위는 1~1,024GB이고 나머지 용량은 최대 1,024GB입니다. GB 입력은 소수점 셋째 자리까지 지원하며 입력창을 벗어나면 `20.000`처럼 표시합니다. 빈칸에는 `0.000` 예시를 보여 줍니다. **기본값으로 돌리기**는 NAS `.env`의 초기 설정값을 초안으로 불러오며 **설정 저장**을 눌러야 적용됩니다. 취소하면 기존 설정을 유지하고 네트워크 설정은 바꾸지 않습니다. 기본은 4개·20GB이고, 업로드 요청은 같은 계정/기기 주체당 동시에 최대 2개만 처리합니다. 새 용량 항목의 초기값은 기존 `.env`를 따릅니다. 파일/개인/기기 한도와 NAS 최소 여유는 관리자 설정을 저장한 뒤 재시작 없이 적용하고 전송 횟수 제한은 유지합니다. 이미 수락해 공간을 예약한 업로드는 한도를 낮춰도 계속되며, 이후 새 공간 예약에는 변경된 한도를 적용합니다. 업로드 본문을 읽기 전에 서버 전체 동시 요청 제한을 적용하고, 들어오는 HTTP 요청에 5분 타임아웃을 적용합니다. 큰 파일은 기존 8MiB 조각 전송을 사용합니다.
|
||||
|
||||
**네트워크 → 수정 → 파일 전송 금지**를 켜고 저장하면 새 파일 전송·보관함 파일 저장·기존 보관함 파일의 새 기기 전송을 거절합니다. 아직 수락하지 않은 파일 요청도 제한 중에는 수락할 수 없습니다. 켜기 전에 이미 수락한 파일 업로드와 기존 파일 다운로드, 링크·텍스트 전송/저장은 계속됩니다. 기존 자료를 삭제하지 않습니다. 설정은 기존 `uploadsPaused` 값을 재사용하며 기본값은 꺼짐입니다. 사용자 화면은 파일 선택/저장/보관함 파일 보내기 메뉴를 숨기고 링크·텍스트만 가능한 안내를 표시합니다. 파일 드롭·붙여넣기도 같은 제한을 적용합니다. 현재 접속자에게 Socket.IO로 공개 정책만 전달하고, 최초 접속/재연결/스냅샷에서도 최신 정책을 확인합니다. 늦게 도착한 과거 정책이 새 상태를 덮어쓰지 않도록 리비전을 비교합니다.
|
||||
**네트워크 → 파일 전송 금지**를 켜면 즉시 새 파일 전송·보관함 파일 저장·기존 보관함 파일의 새 기기 전송을 거절합니다. 아직 수락하지 않은 파일 요청도 제한 중에는 수락할 수 없습니다. 켜기 전에 이미 수락한 파일 업로드와 기존 파일 다운로드, 링크·텍스트 전송/저장은 계속됩니다. 기존 자료를 삭제하지 않습니다. 설정은 기존 `uploadsPaused` 값을 재사용하며 기본값은 꺼짐입니다. 사용자 화면은 파일 선택/저장/보관함 파일 보내기 메뉴를 숨기고 링크·텍스트만 가능한 안내를 표시합니다. 파일 드롭·붙여넣기도 같은 제한을 적용합니다. 현재 접속자에게 Socket.IO로 공개 정책만 전달하고, 최초 접속/재연결/스냅샷에서도 최신 정책을 확인합니다. 늦게 도착한 과거 정책이 새 상태를 덮어쓰지 않도록 리비전을 비교합니다.
|
||||
|
||||
**네트워크 → 수정 → 블랙리스트/화이트리스트 → 추가**에서 국가 코드 또는 IPv4/IPv6·CIDR을 한 항목씩 등록합니다. IPv4는 `203.0.113.*`, `203.0.*.*`처럼 뒤쪽 전체 자리의 와일드카드도 지원하며 각각 `/24`, `/16` CIDR로 저장합니다. `203.*.113.*`나 `113*` 같은 불연속·부분 자리 패턴은 지원하지 않습니다. IPv6는 CIDR을 사용합니다. 모달로 추가한 표를 확인하고 네트워크 설정을 저장하며, 제거할 때는 표의 항목을 선택합니다. 비어 있으면 차단하지 않습니다. 저장 즉시 일치하는 새 HTTP·Socket.IO 접속을 거절하고, 진행 중 업로드와 기기 연결도 종료합니다. `CLIENT_IP_SOURCE`와 `TRUSTED_PROXY_CIDRS`로 검증한 원본 IP를 사용하며 원본 IP가 없으면 직접 연결 주소를 기준으로 합니다. 국가 정보는 검증된 Cloudflare 전달 값만 사용합니다. 국가를 모르면 국가 블랙리스트만으로 차단하지 않지만, 화이트리스트가 있으면 허용 IP와 일치해야 접속할 수 있습니다. 현재 관리자의 IP/국가·인접 연결을 차단하는 규칙은 저장할 수 없습니다. 차단 해제는 목록에서 해당 규칙을 지우고 다시 저장합니다. 잘못된 규칙으로 관리자가 차단되면 기존 NAS 접근 권한으로 DB의 `admin_settings`를 복구해야 하므로 실제 규칙을 확인한 뒤 적용합니다.
|
||||
**네트워크 → 블랙리스트/화이트리스트 → 추가**에서 국가 코드 또는 IPv4/IPv6·CIDR을 한 항목씩 등록합니다. IPv4는 `203.0.113.*`, `203.0.*.*`처럼 뒤쪽 전체 자리의 와일드카드도 지원하며 각각 `/24`, `/16` CIDR로 저장합니다. `203.*.113.*`나 `113*` 같은 불연속·부분 자리 패턴은 지원하지 않습니다. IPv6는 CIDR을 사용합니다. 모달에서 추가하거나 표의 항목을 선택 제거하면 해당 목록에 즉시 적용합니다. 별도의 수정 모드나 전체 설정 저장은 필요 없습니다. 비어 있으면 차단하지 않습니다. 적용 즉시 일치하는 새 HTTP·Socket.IO 접속을 거절하고, 진행 중 업로드와 기기 연결도 종료합니다. `CLIENT_IP_SOURCE`와 `TRUSTED_PROXY_CIDRS`로 검증한 원본 IP를 사용하며 원본 IP가 없으면 직접 연결 주소를 기준으로 합니다. 국가 정보는 검증된 Cloudflare 전달 값만 사용합니다. 국가를 모르면 국가 블랙리스트만으로 차단하지 않지만, 화이트리스트가 있으면 허용 IP와 일치해야 접속할 수 있습니다. 현재 관리자의 IP/국가·인접 연결을 차단하는 규칙은 저장할 수 없습니다. 차단 해제는 목록에서 해당 규칙을 선택 제거합니다. 잘못된 규칙으로 관리자가 차단되면 기존 NAS 접근 권한으로 DB의 `admin_settings`를 복구해야 하므로 실제 규칙을 확인한 뒤 적용합니다.
|
||||
|
||||
관리 설정은 DB의 `admin_settings`, 변경·원본 삭제 이력은 `admin_audit`에 보관합니다. 이력은 기본 30일이며 설정은 재시작 뒤 유지됩니다. 한 번 저장한 관리 설정은 `.env` 초기값보다 우선하고 이후에도 관리자 화면에서 수정합니다. 화면은 수동 새로고침만 사용하며 상시 목록 조회를 하지 않습니다.
|
||||
|
||||
@@ -502,17 +502,17 @@ sudo docker compose -f docker-compose.yaml up -d --build
|
||||
|
||||
`file_upload_contexts` 테이블을 자동 추가하여 각 원본 파일의 최초 전송 요청 정보를 보관합니다. 새 요청을 다른 IP/지역에서 보내거나 재시도해도 기존 파일의 정보는 바뀌지 않습니다. 기존 파일은 소유자 정보의 동일 요청 ID 기록이 있을 때만 복구하며 다른 요청의 최신 지역은 사용하지 않습니다. 기록은 기본 최대 7일이고 파일 실패·삭제 시에도 약 1분 주기 정리에서 제거합니다. 관리자 외의 전송·보관함 API에는 노출하지 않습니다.
|
||||
|
||||
관리자 이름은 대괄호로 감싸고, 만료일은 관리자·보관함 모두 `[보관 만료] 2026년 10월 22일 11:02 까지` 형식의 한국 시간으로 표시합니다. 푸터의 발견 허용 문구는 숨깁니다. 용량은 모든 화면에서 KB/MB/GB(1,000 단위)로 통일하며 실제 파일 한도·개인별 한도·서버 전체 한도는 그대로입니다. `.env` 용량 값의 MiB 기준은 유지하고 관리자 화면의 전체 용량 입력은 GB로 환산합니다. 반올림된 GB를 수정하지 않았다면 다른 설정을 저장해도 원래 한도를 보존합니다.
|
||||
관리자 이름은 대괄호로 감싸고, 만료일은 관리자·보관함 모두 `[보관 만료] 2026년 10월 22일 11:02 까지` 형식의 한국 시간으로 표시합니다. 푸터의 발견 허용 문구는 숨깁니다. 용량은 모든 화면에서 KB/MB/GB(1,024 기준)로 통일하며 실제 파일 한도·개인별 한도·서버 전체 한도는 그대로입니다. `.env` 용량 값의 MiB 기준은 유지하고 관리자 화면의 전체 용량 입력은 GB로 환산합니다. 반올림된 GB를 수정하지 않았다면 다른 설정을 저장해도 원래 한도를 보존합니다.
|
||||
|
||||
Compose 변경이나 DB 초기화 없이 평소처럼 Git pull 후 `sudo docker compose -f docker-compose.yaml up -d --build`로 적용합니다.
|
||||
|
||||
관리자 한도 설명에는 실제 서버의 계정별 보관함·기기 세션별 업로드·기기 세션 전체 업로드·파일당 크기·NAS 최소 여유 공간을 각각 표시합니다. 전체 파일 한도는 모두가 공유하며 개인에게 같은 양을 배정하지 않습니다. 기본값 2GiB는 약 2.1GB, 최소 여유 5GiB는 약 5.4GB, 전체 20GiB는 약 21.5GB로 표시됩니다. 이 값은 각 NAS의 기존 `.env`와 저장된 관리 설정을 따르며 이번 표시 변경으로 값을 재설정하지 않습니다.
|
||||
관리자 한도 설명에는 실제 서버의 계정별 보관함·기기 세션별 업로드·기기 세션 전체 업로드·파일당 크기·NAS 최소 여유 공간을 각각 표시합니다. 전체 파일 한도는 모두가 공유하며 개인에게 같은 양을 배정하지 않습니다. 기본값 2GiB는 화면에서 2GB, 최소 여유 5GiB는 5GB, 전체 20GiB는 20GB로 표시됩니다. 이 값은 각 NAS의 기존 `.env`와 저장된 관리 설정을 따르며 이번 표시 변경으로 값을 재설정하지 않습니다.
|
||||
|
||||
## 네트워크·사용자·관리 기록 업데이트
|
||||
|
||||
`0014_network_protection`은 `automatic_blocks`, `user_activity` 테이블만 추가합니다. 기존 차단 규칙·관리 설정·계정·자료와 Compose는 유지합니다. 새 설정이 없는 기존 DB에는 화이트리스트 빈 목록과 자동 차단 꺼짐 기본값을 적용합니다. 별도 `.env` 변경은 없습니다.
|
||||
|
||||
네트워크 탭의 세 영역에서 관리합니다. 수동 블랙리스트는 국가/IP/CIDR 차단, 화이트리스트는 등록 국가 또는 IP/CIDR만 허용하는 목록입니다. 비어 있으면 공개하고 블랙리스트·자동 차단이 화이트리스트보다 우선합니다. 국가 미제공 시 허용 IP와 일치하지 않으면 비공개입니다. 자동 차단을 켜면 원본 공인 IP별 기본 10분 창에서 로그인 실패 10회·요청 제한 위반 20회·파일 요청 시도 30회 초과·요청 용량 10GB 초과를 감지해 기본 30분 차단합니다. 기준과 차단 시간을 화면에서 조정합니다. 동일 IP의 로그인 보관함/기기 전송·여러 기기 세션을 함께 계산하며 같은 요청의 재시도는 제외합니다. 수락 전의 유효한 파일 요청 본문을 기준으로 세며 실제 업로드 성공 용량 통계는 아닙니다. 정상 조각 API·UPLOAD_BUSY·거절 대기는 위반 횟수에서 제외합니다. 공유 공인 IP/NAT의 다른 사람도 영향을 받을 수 있습니다.
|
||||
네트워크 탭의 세 영역에서 관리합니다. 수동 블랙리스트는 국가/IP/CIDR 차단, 화이트리스트는 등록 국가 또는 IP/CIDR만 허용하는 목록입니다. 비어 있으면 공개하고 블랙리스트·자동 차단이 화이트리스트보다 우선합니다. 국가 미제공 시 허용 IP와 일치하지 않으면 비공개입니다. 자동 차단을 켜면 원본 공인 IP별 기본 10분 창에서 로그인 실패 10회·요청 제한 위반 20회·파일 요청 시도 30회 초과·요청 용량 10GB 초과를 감지해 기본 30분 차단합니다. 자동 블랙리스트의 **수정 → 감지 기준 저장/취소**로 기준과 차단 시간을 조정합니다. 자동 블랙리스트 사용·파일 전송 금지·수동 블랙리스트 사용 토글은 각각 즉시 적용합니다. 규칙 추가·제거와 토글을 변경해도 입력 중인 감지 기준은 함께 저장하지 않습니다. 동일 IP의 로그인 보관함/기기 전송·여러 기기 세션을 함께 계산하며 같은 요청의 재시도는 제외합니다. 수락 전의 유효한 파일 요청 본문을 기준으로 세며 실제 업로드 성공 용량 통계는 아닙니다. 정상 조각 API·UPLOAD_BUSY·거절 대기는 위반 횟수에서 제외합니다. 공유 공인 IP/NAT의 다른 사람도 영향을 받을 수 있습니다.
|
||||
|
||||
자동 IP 차단은 DB에 보존하고 만료 후 약 1분 주기로 정리합니다. 감지 중인 횟수·용량 창과 중복 요청 키는 최대 각 10,000개 메모리 항목으로 제한하며 재시작 시 초기화됩니다. 자동 차단 목록은 최대 10,000개의 활성 IP까지 보관하고, 그 이후에도 기존 요청 제한·전체 용량·동시 작업 제한은 유지합니다. 자동 차단을 끄면 기록을 유지한 채 적용/감지를 중지하며, 기간이 끝나기 전에 다시 켜면 남은 차단도 적용됩니다. 표에서 선택 해제하면 해당 IP의 감지 누적도 초기화합니다. 알려지지 않은 프록시 주소는 자동 차단하지 않습니다. 기존 인증된 관리자 로그인은 자동 차단 상태를 복구할 수 있으며 수동 규칙은 우회하지 않습니다.
|
||||
|
||||
@@ -548,4 +548,4 @@ sudo docker compose -f docker-compose.yaml up -d --build
|
||||
|
||||
## 관리자 용량 표시·파일 전송 금지
|
||||
|
||||
관리자 상단의 신규 업로드 허용/중지 영역은 제거하고 파일 전송 금지를 네트워크 수정 화면으로 옮겼습니다. 용량 단위는 KB/MB/GB를 유지하고 `7,687.0GB`처럼 천 단위 쉼표를 표시합니다. 동시에 처리할 업로드 수에도 설명을 표시하고 읽기/수정 화면의 수치와 입력창을 같은 높이로 정렬합니다. 이번 변경은 기존 관리 설정 필드를 재사용하므로 DB 초기화나 Compose 변경 없이 최신 소스로 재빌드·배포하면 됩니다.
|
||||
관리자 상단의 신규 업로드 허용/중지 영역은 제거하고 파일 전송 금지를 네트워크의 개별 토글로 옮겼습니다. 용량 단위는 KB/MB/GB를 유지하고 `7,687.0GB`처럼 천 단위 쉼표를 표시합니다. 동시에 처리할 업로드 수에도 설명을 표시하고 읽기/수정 화면의 수치와 입력창을 같은 높이로 정렬합니다. 이번 변경은 기존 관리 설정 필드를 재사용하므로 DB 초기화나 Compose 변경 없이 최신 소스로 재빌드·배포하면 됩니다.
|
||||
|
||||
Reference in New Issue
Block a user