설치 가이드 · 4 min read · Sep 25, 2025

Debian에서 Nginx로 Paperless 설치하는 방법

Paperless는 스캔한 문서를 수집하고, 인덱싱하며, 사용자 친화적인 웹 인터페이스에서 제공하는 Python 애플리케이션입니다. 이 튜토리얼에서는 Debian 10에서 Nginx HTTPS 리버스 프록시와 함께 Paperless를 설치할 것입니다.

  • 루트 접근 권한이 있는 Debian 10 시스템.
  • 서버를 가리키는 등록된 도메인 이름.

이 문서에 표시된 모든 명령은 별도로 표시되지 않는 한 루트로 실행해야 합니다.

$VISUAL 환경 변수를 선택한 텍스트 편집기로 설정합니다. 예를 들어, nano를 사용하려면:

echo "export VISUAL=nano" >> ~/.bashrc
. ~/.bashrc

Paperless는 설치 및 운영을 위해 여러 소프트웨어 구성 요소가 필요합니다. 다음과 같이 설치합니다:

apt update
apt install -y gnupg2 python3 python3-dev python3-pip python3-virtualenv tesseract-ocr tesseract-ocr-eng unpaper imagemagick libpoppler-cpp-dev optipng git gcc g++

영어 외의 언어로 문서를 작업할 예정이라면, 해당 Tesseract 언어 파일을 설치합니다. 예를 들어, 프랑스어와 스페인어의 경우:

apt install -y tesseract-ocr-fra tesseract-ocr-spa

사용 가능한 모든 tesseract 패키지를 나열하려면:

apt list tesseract-ocr-*

원하는 언어에 해당하는 3자리 코드가 무엇인지 확실하지 않은 경우, 이 ISO 639-2 코드 목록을 참조하십시오.

Paperless를 루트로 실행하는 것이 가능하지만, 낮은 권한을 가진 사용자와 로그인 비활성화를 사용하는 것이 강력히 권장됩니다. paperless라는 이름의 사용자 및 그룹을 생성합니다:

useradd -d /opt/paperless -M -r -s /bin/bash -U -p x paperless

Paperless Github 리포지토리를 /opt/paperless에 클론합니다:

git clone https://github.com/the-paperless-project/paperless.git /opt/paperless

paperless 사용자에게 해당 디렉토리의 소유권을 부여합니다:

chown -R paperless:paperless /opt/paperless

포함된 구성 샘플을 시작점으로 복사합니다:

cp /opt/paperless/paperless.conf.example /etc/paperless.conf

텍스트 편집기에서 엽니다:

$VISUAL /etc/paperless.conf

Paperless가 스캔한 문서를 수집할 디렉토리를 선택하고 PAPERLESS_CONSUMPTION_DIR 매개변수를 accordingly 설정합니다:

PAPERLESS_CONSUMPTION_DIR="/opt/paperless/paper_in"

다음 줄의 값을 안전한 것으로 변경하기 위해 주석을 제거합니다( # 문자를 제거하여):

#PAPERLESS_PASSPHRASE="secret"
#PAPERLESS_SECRET_KEY="change-me"

스캐너가 스캔한 문서를 이메일로 전송하는 것을 지원하는 경우, paperless가 수신함에서 자동으로 수집하도록 설정할 수 있습니다. 이 기능을 활성화하려면 PAPERLESSCONSUME_MAIL* 옵션을 설정합니다. 보안상의 이유로 Paperless 전용 메일 계정을 만드는 것이 좋습니다. 예를 들어:

PAPERLESS_CONSUME_MAIL_HOST="imap.example.com"
PAPERLESS_CONSUME_MAIL_PORT="993"
PAPERLESS_CONSUME_MAIL_USER="[email protected]"
PAPERLESS_CONSUME_MAIL_PASS="imap_password"

변경 사항을 저장하고 종료한 후, 이 파일의 소유자를 paperless로 변경하고 권한을 강화합니다:

chown paperless:paperless /etc/paperless.conf
chmod 0400 /etc/paperless.conf

paperless 사용자로 전환합니다:

su - paperless

소비 디렉토리를 생성합니다:

mkdir /opt/paperless/paper_in

Python 가상 환경을 생성합니다. 이는 Paperless에 필요한 특정 Python 모듈 및 버전을 설치할 수 있는 안정적이고 격리된 환경을 제공합니다.

python3 -m virtualenv --python=/usr/bin/python3 venv

활성화합니다:

. venv/bin/activate

paperless에 필요한 Python 모듈을 설치합니다:

pip3 install -r requirements.txt

이 명령은 시간이 걸릴 수 있습니다. 완료되면 다음 명령을 실행하여 데이터베이스를 초기화하고 웹 서비스의 정적 파일을 생성합니다:

cd src/
./manage.py migrate
./manage.py collectstatic

웹 인터페이스 관리자 계정의 로그인 자격 증명을 생성하려면 다음 명령을 실행하고 프롬프트에 응답합니다:

./manage.py createsuperuser

적절한 웹 서버 및 systemd 서비스를 설정하기 전에, paperless를 수동으로 실행해 보겠습니다. 이 시점에서 여전히 가상 Python 환경에서 paperless로 로그인되어 있어야 합니다.

웹 서버와 문서 소비자를 백그라운드에서 시작합니다:

./manage.py runserver 0.0.0.0:8000 &
./manage.py document_consumer &

3단계에서 구성한 소비 디렉토리에 스캔한 문서를 배치합니다. 예를 들어:

wget https://i.imgur.com/DPr5wWG.jpg -O /opt/paperless/paper_in/test1.jpg

http://IP_or_DOMAIN:8000/로 이동하여 3단계에서 선택한 자격 증명으로 로그인합니다. “DOCUMENTS” 메뉴에서 “Documents”를 클릭하여 문서 목록을 봅니다. 몇 분 이내에 스캔한 문서가 처리되어 사용할 수 있어야 합니다.

다음 단계로 진행하기 전에 paperless를 중지합니다:

pkill -f manage.py

웹 및 소비 서비스 관리를 위해 systemd 유닛 파일을 생성합니다. 루트 셸로 다시 종료합니다:

exit

웹 서비스에 대한 유닛 파일을 생성합니다:

$VISUAL /etc/systemd/system/paperless-webserver.service

다음 내용을 입력합니다:

[Unit]
Description=Paperless Gunicorn Web Server
Requires=network.target
[Service]
User=paperless
Group=paperless
ExecStart=/opt/paperless/venv/bin/gunicorn --pythonpath=/opt/paperless/src paperless.wsgi -w 3 -b 127.0.0.1:8000
Restart=on-failure
[Install]
WantedBy=multi-user.target

참고: ExecStart 명령에서 작업자 프로세스 수를 수정할 수 있습니다. 여기에서 표시된 서비스는 3개의 작업자(-w 3)로 Gunicorn을 시작합니다.

다음으로 문서 소비자 프로세스에 대한 또 다른 유닛 파일을 생성합니다:

$VISUAL /etc/systemd/system/paperless-consumer.service

다음 내용을 입력합니다:

[Unit]
Description=Paperless Document Consumer
Requires=network.target
[Service]
User=paperless
Group=paperless
ExecStart=/opt/paperless/venv/bin/python3 /opt/paperless/src/manage.py document_consumer
Restart=on-failure
[Install]
WantedBy=multi-user.target

이 서비스를 시작합니다:

systemctl daemon-reload
systemctl start paperless-webserver.service paperless-consumer.service

두 서비스가 모두 실행 중인지 확인합니다:

systemctl status paperless-webserver.service paperless-consumer.service

paperless가 시스템 시작 시 자동으로 시작되도록 하려면 다음 명령을 실행합니다:

systemctl enable paperless-webserver.service paperless-consumer.service

Nginx 및 certbot을 설치합니다:

apt update
apt install -y nginx certbot

Nginx가 활성화되고 실행 중인지 확인합니다:

systemctl enable --now nginx.service

certbot을 사용하여 도메인에 대한 Let’s Encrypt 인증서를 얻습니다:

certbot certonly --webroot --webroot-path /var/www/html -d your_domain

기본 Nginx 구성 파일을 비활성화하고 새 파일을 엽니다:

rm /etc/nginx/sites-enabled/default
$VISUAL /etc/nginx/sites-available/paperless

다음 내용을 입력하고 your_domain을 도메인 이름으로 바꿉니다:

server {
    listen 80;
    server_name your_domain;
    return 301 https://$server_name$request_uri;
    access_log /var/log/nginx/paperless_access.log;
    error_log /var/log/nginx/paperless_error.log;
}
server {
    listen 443 ssl;
    server_name your_domain;
    index index.html index.htm index.php;
    access_log /var/log/nginx/paperless_access.log;
    error_log /var/log/nginx/paperless_error.log;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
    location /static {
        autoindex on;
        alias /opt/paperless/static;
    }
    location / {
        proxy_set_header Host $http_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-Proto $scheme;
        proxy_pass http://127.0.0.1:8000;
    }
}

이 구성을 sites-enabled Nginx 디렉토리에 링크하여 활성화하고 오류가 있는지 확인합니다:

ln -s /etc/nginx/sites-available/paperless /etc/nginx/sites-enabled
nginx -t

변경 사항을 로드합니다:

systemctl reload nginx.service

이제 Paperless 인스턴스에 https://your_domain에서 접근할 수 있어야 합니다.

paperless 시스템 사용자는 초기 설정 후 작동하는 셸에 접근할 필요가 없으므로 /usr/sbin/nologin으로 변경할 수 있습니다:

usermod -s /usr/sbin/nologin paperless

Gunicorn 웹 서버가 [ERROR] Connection in use 오류 메시지와 함께 시작되지 않는 경우, 포트 8000/tcp에 이미 바인딩된 프로세스가 있는지 확인합니다:

ss -lntp

필요한 경우 문제의 프로세스를 종료/비활성화하거나 /etc/systemd/system/paperless-webserver.service 및 /etc/nginx/sites-enabled/paperless를 수정하여 Gunicorn에 다른 네트워크 포트를 사용하도록 설정합니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.