보험증권·계약서·영수증·진단서 같은 완성된 서류를 스캔해 OCR로 검색 가능하게 보관.
http://192.168.0.240:8010https://doc.jjang.synology.me파일명이 아니라 문서 안의 글자로 찾는다. IMG_20240315.jpg 로 저장된 사진도
안에 "자동차종합보험 증권"이라고 적혀 있으면 "자동차 보험"으로 검색된다.
저장 방식은 두 벌:
편집은 되지 않는다. 작업 중인 문서는 Synology Drive, 짧은 메모는 Memos.
services:
broker:
image: docker.io/library/redis:7
container_name: paperless-redis
restart: unless-stopped
volumes:
- redisdata:/data
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
container_name: paperless
restart: unless-stopped
depends_on:
- broker
ports:
- "8010:8000"
volumes:
- pl_data:/usr/src/paperless/data
- pl_media:/usr/src/paperless/media
- pl_export:/usr/src/paperless/export
- pl_consume:/usr/src/paperless/consume
environment:
- PAPERLESS_SECRET_KEY=<openssl rand -hex 48>
- PAPERLESS_REDIS=redis://broker:6379
- PAPERLESS_TIME_ZONE=Asia/Seoul
- PAPERLESS_OCR_LANGUAGE=kor+eng
- PAPERLESS_OCR_LANGUAGES=kor eng
- PAPERLESS_URL=https://doc.jjang.synology.me
- PAPERLESS_ADMIN_USER=admin
- "PAPERLESS_ADMIN_PASSWORD=<비밀번호>"
volumes:
redisdata:
pl_data:
pl_media:
pl_export:
pl_consume:
django.core.exceptions.ImproperlyConfigured: PAPERLESS_SECRET_KEY is not set
최근 버전은 반드시 지정해야 기동한다.
openssl rand -hex 48
16진수만 나오므로 YAML 이스케이프가 필요 없다.
⚠️ 이 키는 바뀌면 안 된다. 다른 값으로 재생성하면 세션·토큰이 무효화된다.
Vaultwarden에Paperless SECRET_KEY로 보관할 것.
PermissionError: [Errno 13] Permission denied: '/usr/src/paperless/data/log'
컨테이너는 UID 1000(paperless) 으로 실행되는데 호스트 폴더는 root 소유였다.
chown 을 해도 시놀로지 ACL이 덮어써서 결국 네임드 볼륨으로 전환해 해결.
→ 시놀로지 도커 함정
USERMAP_UID / USERMAP_GID 는 넣지 않는다 (네임드 볼륨에서는 불필요하고,
잘못된 값을 넣으면 오히려 어긋난다).
PAPERLESS_URL 을 도메인으로 지정하면 내부 IP로 접속 시 로그인이 실패할 수 있다.
둘 다 쓰려면:
- PAPERLESS_CSRF_TRUSTED_ORIGINS=https://doc.jjang.synology.me,http://192.168.0.240:8010
웹 UI 업로드 (드래그 앤 드롭) 또는 소비 폴더에 파일을 넣으면
자동으로 읽어들여 OCR하고 원본은 내부로 옮긴다.
처음 몇 건만 손으로 분류(통신처·문서유형·태그)해주면 이후 비슷한 문서에 자동으로 붙는다.
폰 기본 카메라로 찍으면 한 장에 한 문서가 된다. 여러 장짜리 계약서는
스캔 앱(구글 드라이브 스캔, 삼성 노트, Adobe Scan)으로 한 PDF로 묶어서 넣을 것.
테두리 감지·기울기 보정·그림자 제거가 되어 한국어 OCR 정확도가 확연히 올라간다.
Domain: doc.jjang.synology.me
Forward: http → 192.168.0.240:8010
Websockets: ON
Advanced 탭:
client_max_body_size 100M;
(스캔 PDF가 크다)
/volume1/@docker/volumes/ 아래 pl_media(문서 원본), pl_data(DB) 가 핵심.
서류 원본이 여기 있으므로 반드시 백업 대상에 포함.
내보내기(export) 기능으로 원본+메타데이터를 통째로 꺼낼 수 있어 갇히지 않는다.