Paperless-ngx 소개와 특징(Chatgpt)
Paperless-ngx는 효율적인 문서 관리 시스템으로, 디지털화된 문서를 정리하고 관리하는 데 도움을 주는 오픈 소스 애플리케이션입니다. 이 시스템은 종이 문서를 스캔하여 디지털화하고, 이를 효율적으로 분류하고 검색할 수 있도록 돕는 다양한 기능을 제공합니다. Paperless-ngx는 특히 문서 저장소와 작업 흐름을 자동화하여, 사용자가 손쉽게 파일을 관리하고 필요한 정보를 빠르게 찾을 수 있게 해줍니다.
주요 특징
- 문서 스캔 및 디지털화
- Paperless-ngx는 종이 문서를 스캔하여 디지털화하고, 이를 PDF 형식으로 저장할 수 있습니다. 사용자는 간단한 스캔 작업만으로도 문서를 디지털화하여 보다 효율적으로 관리할 수 있습니다.
- 자동화된 문서 분류
- 문서가 업로드되면 Paperless-ngx는 자동으로 분류하고 태그를 추가하여 사용자가 원하는 문서를 쉽게 찾을 수 있도록 지원합니다. OCR(광학 문자 인식) 기술을 통해 스캔한 문서 내의 텍스트를 추출하고 이를 기반으로 문서를 분류할 수 있습니다.
- 강력한 검색 기능
- 사용자는 문서의 텍스트 내용을 기준으로 검색할 수 있습니다. OCR 기술을 통해 추출된 텍스트는 검색 가능한 데이터로 저장되어, 문서 제목이나 파일명뿐만 아니라 문서 내 텍스트까지 검색할 수 있습니다.
- 웹 기반 인터페이스
- Paperless-ngx는 웹 브라우저를 통해 언제 어디서나 접속할 수 있습니다. 직관적인 사용자 인터페이스를 제공하여, 관리자가 아닌 일반 사용자도 손쉽게 문서를 검색하고 관리할 수 있습니다.
- 다양한 파일 형식 지원
- PDF, 이미지 파일(JPG, PNG 등)을 포함한 다양한 파일 형식을 지원하며, 사용자는 파일을 업로드하고, 텍스트 검색, 필터링 등의 작업을 쉽게 수행할 수 있습니다.
- 확장성
- Paperless-ngx는 Docker와 같은 컨테이너화 기술을 활용해 쉽게 배포하고 운영할 수 있습니다. 또한, API를 통해 다른 시스템과의 통합이 용이하여, 기업의 문서 관리 시스템에 맞춤화된 솔루션을 구축할 수 있습니다.
Paperless-ngx는 개인과 기업 모두에게 강력하고 직관적인 문서 관리 시스템을 제공하여, 효율적인 디지털 문서화 및 관리 작업을 지원합니다.
아래 특징 부분 홈페이지에 자세히 잘 나와있습니다.
https://docs.paperless-ngx.com/#features
Paperless-ngx (100%번역 완료)
crowdin 사이트에서 paperless-ngx 한국어 번역률이 100%가 되었네요 제가 번역을 90% 이상 진행 해 개발자가 적용해준건 오래되었는데 100% 완성은 아니였습니다.
그렇습니다. 여러분이 한국어로 프로그램을 쓰실 수 있는건 제가 번역기로 노가다 한 결과입니다. (번역이 이상해도 참고 쓰시길 ㅜ,.ㅜ)


Paperless-ngx Docker compose 설치 방법
아래 공식 github 입니다.
Office 및 기타 문서에 대한 선택적 지원을 활성화하려면 -tika파일 이름에 해당 내용이 포함된 내용의 docker compose 파일로 진행해야 합니다.
postgres-tika 조합으로 진행합니다.
docker compose 작성
casaos의 docker app 폴더에 새로운 폴더를 생성합니다.
sudo mkdir /var/lib/casaos/apps/paperless
해당 폴더로 이동합니다.
cd /var/lib/casaos/apps/paperless
docker-compose.yml 파일 내용을 아래와 같이 작성합니다.
sudo nano docker-compose.yml
아래 내용을 복사 붙여넣기 합니다. 참고로 paperless ai도 포함된 버전입니다.
그리고 아래 내용의 볼륨 맵핑 중 아래 부분은
$HOME/paper_upload:/usr/src/paperless/consume #—-> 맵핑된 네트워크 폴더(삼바)로 파일 업로드하면 paperless에 자동 추가되는 폴더임
자신의 홈폴더/paper_upload 폴더에 문서파일을 집어넣으시면 자동으로 paperless-ngx에 업로드됩니다. 네트워크 폴더로 공유하시면 유용하게 사용가능합니다.
name: paperless
services:
###### paperless ai입니다. 설치 시 옵션입니다. 설치 추천! 사용안하면 그만! 참고: https://github.com/clusterzx/paperless-ai###
paperless-ai:
image: clusterzx/paperless-ai
container_name: paperless-ai
volumes:
- /DATA/AppData/paperless/paperless-ai_data:/app/data
ports:
- "3000:3000"
restart: unless-stopped
############ 여기까지가 paperless ai입니다. ####
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: docker.io/library/mariadb:11
restart: unless-stopped
volumes:
- /DATA/AppData/paperless/database:/var/lib/mysql
environment:
MARIADB_HOST: paperless
MARIADB_DATABASE: paperless
MARIADB_USER: paperless
MARIADB_PASSWORD: paperless
MARIADB_ROOT_PASSWORD: paperless
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- "8573:8000" #앞에 원하는 포트로 변경
volumes:
- ./data:/usr/src/paperless/data #해당 폴더로 진행하실거면./data
- ./media:/usr/src/paperless/media #해당 폴더로 진행하실거면./media
- ./export:/usr/src/paperless/export #해당 폴더로 진행하실거면./export
- $HOME/paper_upload:/usr/src/paperless/consume #맵핑된 네트워크 폴더로 파일 업로드하면 paperless에 자동 추가되는 폴더임
env_file: .env #환경변수설정파일
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: db
PAPERLESS_DBUSER: paperless # only needed if non-default username
PAPERLESS_DBPASS: paperless # only needed if non-default password
PAPERLESS_DBPORT: 3306
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: docker.io/gotenberg/gotenberg:7.10
restart: unless-stopped
# The gotenberg chromium route is used to convert .eml files. We do not
# want to allow external content like tracking pixels or even javascript.
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
tika:
image: docker.io/apache/tika:latest
restart: unless-stopped
volumes:
paperless-ai_data:
data:
media:
dbdata:
redisdata:
networks:
default:
name: paperless_default
####### 아래는 casaos에 아이콘 표시되게 하는 설정임 - 선택사항 casaos에서 아이콘 나오게 하려면 표시하세요
x-casaos:
author: self
category: self
hostname: ##해당 url입력 ex) paper.domain.com or 192.0.0.0
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/paperless-ngx.png
index: /
is_uncontrolled: false
port_map: "" ## 아이피로 입력 시 포트넘버 입력
scheme: http ## http or https 선택
title:
custom: Paperless
env 환경변수 파일 작성
아래 환경변수 설정 파일을 작성합니다.
sudo nano .env
아래 내용을 복사 붙여 넣기 합니다.
PAPERLESS_URL=https://paper.domain.com #url 설정 아이피로도 접속가능
PAPERLESS_TIME_ZONE=Asia/Seoul
PAPERLESS_OCR_LANGUAGE=kor+eng
PAPERLESS_SECRET_KEY='NUkMCrEJZKwS9KHjDTxxqSkme6rLThQ2WS6Jpz7DE9c=' #시크릿키 그대로 사용 가능
PAPERLESS_OCR_LANGUAGES=kor eng
PAPERLESS_CONSUMPTION_DIR=/usr/src/paperless/consume
사용자 ID와 PW 생성
docker compose up -d 명령어로 컨테이너를 백그라운드에서 실행합니다.
docker exec -it paperless-webserver-1 bash
아래와 같이 순차적으로 아이디, 이메일 주소, 비번을 설정해줍니다.

나올때는 exit 입력 후 엔터
Paperless-ngx 접속
주소창에 해당하는 아이피:8573 입력하고 엔터를 누르면 한국어로 반갑게 맞이해줍니다. (노가다한게 뿌듯)
그리고 위에 설정한 아이디와 패스워드로 로그인하시면 됩니다.

Paperless-ngx 환경설정
환경설정에서 ocr 항목 부분을 설정해줍니다.
환경변수 env에 설정했지만 설정 부분에 또 있어 다시 설정해 주었습니다.

Paperless-ngx OCR 확인
pdf 파일 대부분이 text파일로 적용되어 있어 이미지로 만들어진 회사 pdf 파일로 테스트 해봤습니다.
아래 테스트로 몇가지 pdf 파일을 업로드 했습니다.

그리고 pdf 파일내 이미지로 적혀져 있는 “공유기” 항목으로 검색을 시도해보면 검색 결과가 잘 나오는게 확인 됩니다.

Office 파일 확인
아래 같이 엑셀파일을 업로드한 후 특정값을 검색해도 바로 검색결과가 나타납니다.

Paperless Ai 설정
해당 아이피:3000번으로 접속하여 아래와 같이 paperless-ai로 접속이 가능합니다.
아래 계정과 비번을 생성 하시고
paperless-ngx url 주소를 적고 paperless api 토큰(프로필에서 발급가능)과 아이디를 입력해줍니다.
openapi api key를 입력해주고 아래 설정은 원하시는대로 집어넣으시면 됩니다.

기본 그래도 설정해주고 나면 paperless ai가 자동으로 태그를 작성해줍니다. (아래 참조)

설치 후 태그가 적용된 모습입니다.

nginx 설정
nginx 기본설정 – 참고
서브도메인은 paper로 했습니다. paper.domain.com(자신의 도메인으로 변경하세요)
꼭 cloudflare에서 dns레코드 등록 후 진행 바랍니다.
아래 domain.com을 자신의 도메인명으로 변경 후 사용 바랍니다.
# paper.domain.com
server {
listen 80;
server_name paper.domain.com;
# HTTP 요청을 HTTPS로 리디렉션
return 301 https://$host$request_uri;
}
# HTTPS 설정
server {
listen 443 ssl;
server_name paper.domain.com;
ssl_certificate /etc/ssl/certs/domain.com.pem;
ssl_certificate_key /etc/ssl/private/domain.com.key;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
resolver 1.1.1.1 1.0.0.1 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options "ALLOW-FROM https://home.domain.com";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "frame-ancestors 'self' https://home.domain.com";
index index.php index.html index.htm;
client_max_body_size 50M; #업로드 제한 크기
location / {
proxy_pass http://localhost:8573/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
add_header Referrer-Policy "strict-origin-when-cross-origin";
}
}
심볼링 링크 생성 – 빨간색 domain.com 자신의 도메인으로 변경 하세요
sudo ln -s /etc/nginx/sites-available/paper.domain.com /etc/nginx/sites-enabled/
그리고 nginx 재시작
sudo systemctl restart nginx
마치는 글
아래는 api 활용하는 사례의 글들입니다. n8n이랑 연동하면 좋을 듯 하네요
https://blog.elest.io/how-to-use-rest-api-with-paperless-with-n8n
그리고 비슷한 프로그램으로는 teedy, docspell 등이 있습니다.
도움 되셨으면 따듯한 커피한잔 부탁드려요!
도움 되셨으면 유튜브 구독 부탁드려요!!!!
홈서버관리 대시보드 organizr 설치 – nginx & php8.4 기반
아래글의 내용중 홈서버관리 대시보드 organizr 설치 – nginx & php8.4 기반 가이드입니다. #auto 홈서버 관리 대시보드 역활을 하는 Organizr V2 입니다. 나스에 많은 서비스와 IP와 포트를 외울 필요 없이 organizr 을 사용하여 하나의 웹페이지에 나타낼수가 있습니다. 많은 정보를 보시려면 아래…
Cloudflare SSL/TLS 적용 – 클라우드플래어 https 설정 가이드
아래 글의 내용중 Cloudflare SSL/TLS 적용 – 클라우드플래어 https 설정 가이드입니다. #auto Cloudflare SSL의 주요 장점 두 서비스의 비교 비용 관리 편의성 보안 기능 유연성 선택 기준 Cloudflare는 종합적인 웹 보안 및 성능 최적화가 필요한 경우에 적합하며, Let’s Encrypt는 단순히…
도메인 구매와 cloudflare로 이전
아래 글의 내용중 도메인 구매와 cloudflare로 이전 글입니다. #auto 도메인 저렴한게 구매하면 커피 한잔 값이라고 생각하면 되겠습니다. (저도 모으다 보니 도메인이 5개가 되었네요) 아래는 저렴하게 구매가 가능한 사이트 입니다. namesilo에서 주로 구매하고 이번에 글 작성 목적으로 namecheap에서 진행 해 봤습니다.…
casaos 설치 방법 – 우분투 초기 설정 기준
아래 글의 내용 중 casaos 설치 방법 – 우분투 초기 설정 기준 입니다. #auto CasaOS는 간편한 홈 서버 운영체제로, Docker를 기반으로 다양한 애플리케이션과 개인 클라우드를 쉽게 관리할 수 있는 오픈소스 플랫폼입니다. 직관적인 UI로 초보자도 간단히 설치하고 사용할 수 있습니다. 설치…
Nginx – extras 설치와 기본 설정
아래글의 내용중 Nginx – extras 설치와 기본 설정입니다. #auto 도메인 호스팅할때 필요한 nginx 설치 방법 입니다. 아래는 nginx 패키지별 모듈 차이점입니다. 패키지 기본 모듈 설명 nginx – 기본 HTTP 모듈 (예: ngx_http_core_module, ngx_http_vhost_traffic_status_module 등) 기본적인 HTTP 웹 서버 기능 제공.…