วิธีติดตั้ง Paperless-ngx บน VPS ด้วย Docker Compose
เรียนรู้วิธีติดตั้ง Paperless-ngx บน VPS ผ่าน Docker Compose ตั้งแต่การตั้งค่า Postgres, PAPERLESS_URL, การกำหนดโฟลเดอร์ consume, การตั้งค่า OCR ไปจนถึงการทำ HTTPS และสำรองข้อมูล
สิ่งที่คุณกำลังสร้าง
Paperless-ngx บน VPS จะเปลี่ยนโฟลเดอร์เอกสารที่สแกนมาให้กลายเป็นคลังข้อมูลที่ค้นหาได้ คุณเพียงแค่วางไฟล์ PDF ลงในไดเรกทอรีที่กำหนดไว้ เซิร์ฟเวอร์จะรัน OCR (optical character recognition) เพื่อดึงข้อความออกมา คาดการณ์วันที่และผู้ติดต่อ แล้วจัดเก็บเอกสารนั้นให้โดยอัตโนมัติ การติดตั้งประกอบด้วยไฟล์ Docker Compose หนึ่งไฟล์ที่รัน 4 บริการ หลังจากนั้นจะเป็นขั้นตอนการตั้งค่า ซึ่งคู่มือนี้จะเน้นเนื้อหาส่วนใหญ่ไปที่การตั้งค่า เนื่องจากเป็นจุดที่มักเกิดปัญหาในการติดตั้ง สิ่งที่ระบบนี้ไม่ใช่คือคลังรูปภาพ เพราะ OCR และการคาดการณ์ผู้ติดต่อไม่มีประโยชน์กับโฟลเดอร์รูปภาพวันหยุด ดังนั้นควรเก็บรูปภาพเหล่านั้นไว้ใน เซิร์ฟเวอร์รูปภาพที่สร้างมาเพื่อการนี้โดยเฉพาะ และใช้ Paperless สำหรับเอกสารเท่านั้น
Paperless-ngx คือ community fork ที่มีการดูแลต่อเนื่องของโครงการ Paperless รุ่นดั้งเดิม เป็นซอฟต์แวร์ฟรีที่ self-host ได้ และจัดเก็บเอกสารเป็นไฟล์ปกติบนดิสก์ คุณจึงไม่ถูกปิดกั้นการเข้าถึง archive ของตนเอง การรันบน VPS แทนเครื่องภายในบ้านทำให้เข้าถึงเอกสารสแกนได้จากทุกที่ โดยไม่ต้องเปิดพอร์ตบนเราเตอร์ที่บ้าน และทำงานร่วมกับ Nextcloud แบบ private ของคุณสำหรับไฟล์ที่ไม่ได้อยู่ในรูปกระดาษ ได้ดี หลักการเดียวกันนี้ใช้กับคอมพิวเตอร์เดสก์ท็อปที่เชื่อมต่อกับ scanner เพราะ RustDesk relay ที่คุณติดตั้งและดูแลเองบน VPS ช่วยให้คุณควบคุมเครื่องนั้นจากระยะไกลได้ โดยไม่ต้องเปิดช่องทางผ่านเราเตอร์เช่นกัน
สิ่งที่ stack ทำงานจริง
ไฟล์ compose อย่างเป็นทางการจะเริ่มการทำงานของ container 4 รายการ การเข้าใจหน้าที่ของแต่ละรายการจะช่วยให้อ่าน log ได้ง่ายขึ้น
webserver: อิมเมจ paperless-ngx โดยตรง ทำหน้าที่รันเว็บอินเทอร์เฟซ, API, ตัว consumer ที่คอยตรวจสอบโฟลเดอร์ input ของคุณ และ Celery task worker ที่ทำหน้าที่ OCRdb: PostgreSQL ทำหน้าที่เก็บ metadata, tag, ผู้ติดต่อ และตารางดัชนีสำหรับการค้นหาแบบเต็มรูปแบบ โดยไม่ได้เก็บไฟล์ PDF ของคุณไว้broker: Valkey ซึ่งเป็นที่เก็บข้อมูลแบบ key-value ที่รองรับ Redis ทำหน้าที่เป็นคิวงานระหว่างกระบวนการเว็บและ workergotenbergและtika: เป็นส่วนเสริม มีเฉพาะใน-tikacompose variants เท่านั้น ทำหน้าที่แปลงเอกสาร Office (.docx,.xlsx,.odt) ให้เป็น PDF เพื่อให้ paperless สามารถทำดัชนีได้
ณ เดือนกรกฎาคม 2026 ไฟล์ compose ของ postgres ได้กำหนดเวอร์ชัน docker.io/library/postgres:18 และ docker.io/valkey/valkey:9-alpine ไว้ตายตัว และดึงแอปมาจาก ghcr.io/paperless-ngx/paperless-ngx:latest
ข้อกำหนดเบื้องต้น
- Ubuntu 24.04 KVM VPS ที่มีสิทธิ์ sudo และติดตั้ง Docker พร้อมปลั๊กอิน Compose เรียบร้อยแล้ว หากยังไม่คุ้นเคยกับส่วนนี้ ให้เริ่มต้นที่ พื้นฐาน Docker Compose สำหรับ VPS แล้วจึงกลับมาดำเนินการต่อ
- ชื่อโดเมนที่มี A record ชี้ไปยัง VPS ของคุณ Paperless จะปฏิเสธการให้บริการหากชื่อโฮสต์ไม่ตรงกับที่ตั้งค่าไว้ ดังนั้นขั้นตอนนี้จึงมีความสำคัญมากกว่าที่คุณคาดคิด
- หน่วยความจำคือข้อจำกัดที่แท้จริง PostgreSQL, Valkey, gunicorn และ Tesseract OCR worker ที่ทำงานพร้อมกันทั้งหมดสามารถทำงานได้ใน 2 GB สำหรับการใช้งานทั่วไป แต่ควรจัดสรรไว้ 4 GB หากคุณวางแผนที่จะนำเข้าเอกสารจำนวนมากย้อนหลัง เพราะการทำ OCR บนไฟล์ PDF ขนาดใหญ่หลายหน้าจะทำให้เกิดการใช้หน่วยความจำพุ่งสูงขึ้น ซึ่งอาจส่งผลให้ worker ถูก kernel สั่งยุติการทำงานด้วยกลไก out-of-memory killer
- พื้นที่จัดเก็บข้อมูล: เอกสารของคุณจะถูกจัดเก็บไว้สองชุด คือไฟล์ต้นฉบับและไฟล์ PDF ที่ผ่านการทำ OCR แล้ว ดังนั้นควรเผื่อพื้นที่จัดเก็บข้อมูลไว้ประมาณสองเท่าของขนาดเอกสารที่คุณมี
รับไฟล์ compose อย่างเป็นทางการ
มีตัวติดตั้งแบบโต้ตอบให้ใช้งาน:
bash -c "$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"ตัวติดตั้งจะถามคำถามและเขียนไฟล์ให้คุณ การทำด้วยตนเองนั้นใช้เพียง 4 คำสั่งและช่วยให้คุณทราบตำแหน่งของทุกไฟล์ ซึ่งเป็นสิ่งที่คุณต้องการบนเซิร์ฟเวอร์ที่คุณต้องดูแลรักษา
mkdir -p ~/paperless && cd ~/paperless
curl -fsSL -o docker-compose.yml https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docker/compose/docker-compose.postgres.yml
curl -fsSL -o docker-compose.env https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docker/compose/docker-compose.env
curl -fsSL -o .env https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/docker/compose/.envไฟล์รุ่นต่างๆ อยู่ในไดเรกทอรีเดียวกัน ได้แก่ docker-compose.sqlite.yml, docker-compose.mariadb.yml และเวอร์ชัน -tika ของแต่ละไฟล์ ให้เลือก postgres สำหรับการติดตั้งใหม่ SQLite สามารถใช้งานได้ดีสำหรับเอกสารจำนวนไม่กี่ร้อยฉบับ แต่ดัชนีการค้นหาแบบเต็มรูปแบบ (full-text search) จะทำงานช้าลงเร็วกว่า PostgreSQL มาก
ไฟล์ .env บรรจุข้อความหนึ่งบรรทัดคือ COMPOSE_PROJECT_NAME=paperless ชื่อดังกล่าวจะกลายเป็นคำนำหน้า (prefix) ของคอนเทนเนอร์และโวลุ่มทุกรายการ ดังนั้นห้ามลบไฟล์นี้ทิ้งแล้วมาสงสัยว่าเหตุใด docker compose down -v จึงหาข้อมูลของคุณไม่พบ
กำหนดค่า docker-compose.env ก่อนการเริ่มทำงานครั้งแรก
การตั้งค่าสองรายการนี้ไม่ใช่ทางเลือก คุณต้องสร้าง secret key ด้วยคำสั่งที่เอกสารของโปรเจกต์ระบุไว้:
python3 -c "import secrets; print(secrets.token_urlsafe(64))"จากนั้นแก้ไขไฟล์ docker-compose.env:
PAPERLESS_SECRET_KEY=<the long string you just generated>
PAPERLESS_URL=https://paperless.example.com
PAPERLESS_TIME_ZONE=Europe/Berlin
PAPERLESS_OCR_LANGUAGE=deu+eng
USERMAP_UID=1000
USERMAP_GID=1000PAPERLESS_SECRET_KEY มาพร้อมกับค่าเริ่มต้นคือ change-me ค่านี้ใช้สำหรับลงลายมือชื่อ session cookie ดังนั้นหากปล่อยไว้ ใครก็ตามที่ทราบค่าเริ่มต้นนี้จะสามารถปลอมแปลง session ได้ คุณต้องกำหนดค่านี้ก่อนการเริ่มทำงานครั้งแรก เพราะการเปลี่ยนค่าในภายหลังจะทำให้ผู้ใช้ทุกคนถูกออกจากระบบ
PAPERLESS_URL เป็นค่าที่จะช่วยประหยัดเวลาของคุณได้มาก Paperless เป็นแอปพลิเคชันที่พัฒนาด้วย Django ซึ่ง Django จะตรวจสอบ header Host ของทุกคำขอ หากคุณกำหนดค่า PAPERLESS_URL ระบบจะเติมค่า ALLOWED_HOSTS, CORS_ALLOWED_HOSTS และ CSRF_TRUSTED_ORIGINS ให้คุณโดยอัตโนมัติ หากปล่อยว่างไว้แล้วชี้โดเมนมาที่เซิร์ฟเวอร์ ทุกหน้าเว็บจะแสดงผลเป็น Bad Request (400) พร้อมข้อความ DisallowedHost ใน log ของคอนเทนเนอร์ ให้ระบุค่าโดยไม่ต้องใส่เครื่องหมายทับปิดท้าย (trailing slash) และไม่ต้องระบุ path
USERMAP_UID และ USERMAP_GID ใช้กำหนดสิทธิ์ผู้ใช้ที่คอนเทนเนอร์จะทำงานด้วย ให้ตั้งค่าให้ตรงกับบัญชีผู้ใช้ของคุณ ซึ่งตรวจสอบได้ด้วยคำสั่ง id -u และ id -g หากค่าไม่ตรงกัน ไฟล์ที่คุณคัดลอกเข้าไปในโฟลเดอร์ consume จะไม่สามารถอ่านได้โดย consumer และ log จะแสดงข้อผิดพลาดเรื่องสิทธิ์ (permission error) แทนที่จะเป็นการนำเข้าไฟล์ตามปกติ
เริ่มการทำงานของ stack และสร้างผู้ใช้คนแรก
docker compose pull
docker compose up -d
docker compose run --rm webserver createsuperuser
docker compose logs -f webservercreatesuperuser จะเรียกให้ระบุชื่อผู้ใช้ อีเมล และรหัสผ่าน ระบบไม่มีการเข้าสู่ระบบเริ่มต้น ดังนั้นหากข้ามขั้นตอนนี้ไป คุณจะติดอยู่ที่หน้าลงชื่อเข้าใช้ซึ่งไม่สามารถเข้าใช้งานได้ ให้รอจนกว่า log จะแสดงข้อความว่าเซิร์ฟเวอร์กำลังฟังที่พอร์ต 8000 ก่อนที่จะเริ่มเข้าใช้งานผ่านเบราว์เซอร์ การเริ่มทำงานครั้งแรกจะมีการทำ database migrations ซึ่งอาจใช้เวลาประมาณ 1 ถึง 2 นาที
ตรวจสอบการทำงานในเครื่องก่อนที่จะเชื่อมต่อกับโดเมน:
curl -I http://127.0.0.1:8000หาก 302 เปลี่ยนเส้นทางไปยัง /accounts/login/ แสดงว่า stack ทำงานได้ตามปกติ
การติดตั้ง HTTPS ไว้หน้าบริการ
ไฟล์ compose มาตรฐานจะเผยแพร่ 8000:8000 ซึ่งผูกไว้กับทุกอินเทอร์เฟซบน VPS สาธารณะที่ให้บริการคลังเอกสารทั้งหมดของคุณผ่าน HTTP แบบไม่เข้ารหัสแก่ทุกคนที่พบที่อยู่ ให้เปลี่ยนบรรทัดพอร์ตเพื่อผูกไว้กับ loopback เท่านั้น:
ports:
- "127.0.0.1:8000:8000"จากนั้นให้ทำ TLS (transport layer security) termination ที่ reverse proxy แล้วส่งต่อคำขอไปยัง 127.0.0.1:8000 หากนี่เป็นแอปเดียวบนเซิร์ฟเวอร์ คุณสามารถใช้ proxy ใดก็ได้ที่มีไคลเอ็นต์ ACME (automatic certificate management environment) หากคุณกำลังรันคอนเทนเนอร์หลายตัวภายใต้การตั้งค่าใบรับรองชุดเดียว ให้ปฏิบัติตาม รูปแบบการใช้ Traefik reverse proxy สำหรับแอป Docker Compose หลายตัว และเชื่อมต่อบริการ webserver เข้ากับเครือข่ายของ proxy โดยไม่ต้องเผยแพร่พอร์ตใดๆ เลย
ไม่ว่าคุณจะใช้ proxy ใดก็ตาม จะต้องส่งค่า X-Forwarded-Proto: https หากไม่มีค่านี้ Django จะเข้าใจว่าคำขอส่งมาผ่าน HTTP ทำให้การตรวจสอบ origin บนหน้าล็อกอินล้มเหลว และคุณจะพบ CSRF verification failed. Request aborted. บนหน้าที่ดูเหมือนปกติ อีกส่วนหนึ่งของการแก้ไขคือการตั้งค่า PAPERLESS_URL ให้ตรงกับที่อยู่ https:// ที่คุณพิมพ์ในเบราว์เซอร์ทุกประการ
นอกจากนี้ ให้เพิ่มขีดจำกัดขนาดการอัปโหลดของ proxy ด้วย หากมีการสแกนขนาด 40 MB ผ่าน proxy ที่จำกัดขนาด body ไว้ที่ 1 MB คำขอจะถูกปฏิเสธก่อนที่ paperless จะได้รับ และเบราว์เซอร์จะรายงานความผิดพลาดในการอัปโหลดทั่วไป
การทำงานของไดเรกทอรี consume
ไฟล์ compose จะทำการ bind-mount ./consume จากไดเรกทอรี compose เข้าไปในคอนเทนเนอร์ ไฟล์ใดก็ตามที่คุณนำไปวางไว้ที่นั่นจะถูกนำเข้าสู่ระบบและถูกลบออกจากโฟลเดอร์ดังกล่าว เนื่องจากไฟล์นั้นได้ถูกย้ายไปอยู่ใน media volume ภายใต้การจัดการของ paperless แล้ว
cp ~/scan-2026-07-14.pdf ~/paperless/consume/
docker compose logs -f webserverคุณควรจะเห็น consumer ตรวจพบชื่อไฟล์ เริ่มกระบวนการ OCR และจบลงด้วยบรรทัดที่รายงานว่าเอกสารถูกเพิ่มเข้าสู่ระบบเรียบร้อยแล้ว วงจรทั้งหมดนี้ใช้เวลาเพียงไม่กี่วินาทีสำหรับการสแกนหนึ่งหน้า และอาจใช้เวลาถึงหนึ่งนาทีหรือมากกว่านั้นสำหรับเอกสารที่มีความยาว
มีการตั้งค่าสองรายการที่เปลี่ยนวิธีการค้นหาไฟล์ PAPERLESS_CONSUMER_RECURSIVE=true ทำให้ paperless ค้นหาไฟล์ในโฟลเดอร์ย่อย และ PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=true จะเปลี่ยนชื่อโฟลเดอร์ย่อยแต่ละชื่อให้เป็นแท็ก ดังนั้นการวางไฟล์ลงใน consume/invoices/2026/ จะทำให้ไฟล์นั้นถูกติดแท็ก invoices และ 2026 นี่คือระบบการจัดเก็บเอกสารที่ประหยัดที่สุดที่คุณจะเคยสร้างมา
การตรวจจับเป็นอีกส่วนหนึ่งที่สำคัญ โดยปกติแล้ว PAPERLESS_CONSUMER_POLLING_INTERVAL จะถูกตั้งค่าเป็น 0 ซึ่งหมายความว่า paperless จะใช้การแจ้งเตือนจากระบบไฟล์ของเคอร์เนล (kernel filesystem notifications) ซึ่งจะทำงานทันที อย่างไรก็ตาม การแจ้งเตือนเหล่านี้ไม่สามารถข้ามผ่านระบบไฟล์เครือข่ายได้ หากโฟลเดอร์ consume ของคุณเป็น NFS หรือ SMB share เพื่อให้เครื่องสแกนเนอร์ในเครือข่ายเขียนไฟล์ลงไปได้ ระบบจะไม่ตรวจพบไฟล์ใดๆ เลย วิธีแก้ไขคือการกำหนดค่าช่วงเวลาเป็นจำนวนวินาทีที่เป็นบวก เพื่อให้ paperless ทำการสแกนโฟลเดอร์แทนการรอการแจ้งเตือน
ภาษาสำหรับ OCR และค่าใช้จ่ายที่เกี่ยวข้อง
PAPERLESS_OCR_LANGUAGE รับรหัสภาษาของ Tesseract แบบสามตัวอักษร โดยค่าเริ่มต้นคือ eng คุณสามารถรวมหลายภาษาเข้าด้วยกันโดยใช้เครื่องหมายบวก เช่น deu+eng จากนั้น Tesseract จะทดสอบแต่ละภาษาและเลือกผลลัพธ์ที่ดีที่สุด ดังนั้นการเพิ่มภาษาจะส่งผลให้เวลาที่ CPU ใช้ประมวลผลในแต่ละหน้าเพิ่มขึ้นเป็นทวีคูณ บน VPS ที่ใช้ vCPU ร่วมกัน สิ่งนี้อาจสร้างความแตกต่างระหว่างการสแกนที่เสร็จสิ้นในสิบวินาทีกับการสแกนที่ใช้เวลาถึงหนึ่งนาที ให้ระบุเฉพาะภาษาที่ใช้ในเอกสารของคุณจริงๆ เท่านั้น
อิมเมจนี้มาพร้อมกับภาษาอังกฤษ เยอรมัน อิตาลี สเปน และฝรั่งเศส สำหรับภาษาอื่น ๆ ให้เพิ่มภาษาเหล่านั้นลงใน PAPERLESS_OCR_LANGUAGES โดยคั่นด้วยช่องว่าง เช่น PAPERLESS_OCR_LANGUAGES=tur ces แล้วจึงรีสตาร์ท คอนเทนเนอร์จะดาวน์โหลดชุดข้อมูลภาษาของ Tesseract ในระหว่างการเริ่มทำงาน ดังนั้นการบูตครั้งแรกหลังจากทำการเปลี่ยนแปลงนี้จะใช้เวลานานกว่าปกติ
สำรองข้อมูลฐานข้อมูลและสื่อ
การคัดลอก Docker volumes ในขณะที่ PostgreSQL กำลังทำงานอยู่ อาจทำให้ได้ข้อมูลสำรองที่ไม่สามารถกู้คืนได้ Paperless มีเครื่องมือส่งออกข้อมูล (exporter) ของตนเอง ซึ่งจะเขียนเอกสารพร้อมกับไฟล์ JSON manifest ที่เก็บ metadata ทั้งหมดลงใน bind mount ที่ ./export:
docker compose exec webserver document_exporter ../export --delete --no-progress-bar--delete จะลบไฟล์ที่ส่งออกไปแล้วซึ่งไม่ตรงกับเอกสารปัจจุบัน เพื่อให้โฟลเดอร์นี้เป็นภาพสะท้อนของระบบแทนที่จะขยายขนาดขึ้นเรื่อยๆ --no-progress-bar ช่วยให้ผลลัพธ์สะอาดตาเมื่อรันคำสั่งนี้ผ่าน cron
การกู้คืนข้อมูลทำได้โดยใช้ document_importer กับโฟลเดอร์เดิมบน stack ใหม่ ซึ่งหมายความว่าไดเรกทอรีที่ส่งออกข้อมูลเป็นสิ่งเดียวที่คุณต้องเก็บรักษาไว้ให้ปลอดภัย ให้ส่งข้อมูลออกไปยังสถานที่อื่นตามกำหนดเวลาด้วย การสำรองข้อมูลด้วย restic ที่เข้ารหัสและลดความซ้ำซ้อนจาก VPS ของคุณ และควรสั่งรันการส่งออกข้อมูลก่อน เพื่อให้ restic ไม่สำรองข้อมูลไฟล์ที่เขียนไม่เสร็จ
ตรวจสอบ backup โดยยืนยันว่า export/manifest.json มีอยู่จริง และจำนวนไฟล์ตรงกับจำนวนเอกสารที่แสดงใน interface backup ที่ไม่เคยตรวจสอบรายการไม่ถือว่าเป็น backup งาน export รายคืนที่เริ่มล้มเหลวโดยไม่แสดงอาการยิ่งมีความเสี่ยงมากกว่า ดังนั้นให้ cron job ส่ง exit status ไปยัง ntfy server ของคุณเอง แล้วคุณจะทราบภายในสัปดาห์ที่งานเริ่มล้มเหลว แทนที่จะทราบในวันที่ต้องกู้คืนข้อมูล
FAQ
ทำไมทุกหน้าถึงแสดงข้อผิดพลาด "Bad Request (400)" หลังจากชี้โดเมนมาที่นี่?
Django ปฏิเสธส่วนหัว Host เนื่องจากโดเมนของคุณไม่ได้อยู่ใน ALLOWED_HOSTS ให้ตั้งค่า PAPERLESS_URL=https://paperless.example.com ใน docker-compose.env โดยไม่ต้องใส่เครื่องหมายทับปิดท้าย จากนั้นรัน docker compose up -d เพื่อสร้างคอนเทนเนอร์ขึ้นใหม่ การแก้ไขไฟล์ env เพียงอย่างเดียวไม่มีผลใดๆ เนื่องจากคอนเทนเนอร์ที่กำลังทำงานอยู่จะยังคงใช้สภาพแวดล้อมเดิมที่เริ่มทำงานมาตั้งแต่ต้น
ฉันวางไฟล์ PDF ไว้ในโฟลเดอร์ consume แล้วไม่มีอะไรเกิดขึ้น เกิดอะไรขึ้น?
ให้ตรวจสอบ docker compose logs webserver ก่อน ข้อผิดพลาดด้านสิทธิ์การเข้าถึงหมายความว่า USERMAP_UID และ USERMAP_GID ไม่ตรงกับบัญชีผู้ใช้งานที่เป็นเจ้าของไฟล์ ให้แก้ไขค่าเหล่านั้นแล้วสร้างคอนเทนเนอร์ใหม่ หากไม่มีบรรทัด log ปรากฏขึ้นเลย แสดงว่าเหตุการณ์ของไฟล์ไม่ถูกส่งมา ซึ่งมักเกิดขึ้นบน network share เนื่องจาก kernel notification ไม่สามารถข้ามผ่านเครือข่ายได้ ให้ตั้งค่า PAPERLESS_CONSUMER_POLLING_INTERVAL เป็นค่าเช่น 30 แล้ว paperless จะสแกนโฟลเดอร์ทุกๆ 30 วินาทีแทน
ฉันสามารถรัน paperless-ngx ด้วย SQLite แทน PostgreSQL ได้หรือไม่?
ได้ docker-compose.sqlite.yml รองรับการใช้งานและใช้หน่วยความจำน้อยกว่า ซึ่งเหมาะกับ VPS ขนาดเล็ก ข้อแลกเปลี่ยนจะปรากฏให้เห็นเมื่อคลังเอกสารของคุณใหญ่ขึ้น โดยการค้นหาข้อความแบบเต็มและการแก้ไขแท็กจำนวนมากจะช้าลงอย่างเห็นได้ชัดเมื่อมีเอกสารจำนวนหลายพันฉบับ การย้ายฐานข้อมูลในภายหลังต้องใช้วิธี export และ import ดังนั้นให้เลือก PostgreSQL ตั้งแต่ตอนนี้หากคุณคาดว่าคลังเอกสารจะขยายตัวต่อไปเรื่อยๆ
คลังเอกสารที่สแกนต้องใช้พื้นที่ดิสก์เท่าใด?
ประมาณสองเท่าของขนาดไฟล์ต้นฉบับของคุณ Paperless จะเก็บไฟล์ต้นฉบับไว้โดยไม่มีการแก้ไข และจัดเก็บไฟล์ PDF ที่ผ่านการทำ OCR แล้วอีกชุดหนึ่งซึ่งมีเลเยอร์ข้อความที่ค้นหาได้ รวมถึงภาพตัวอย่างขนาดเล็ก ไฟล์สแกนที่เป็นข้อความล้วนขนาด 200 KB จะมีขนาดเล็ก แต่ไฟล์สแกนสีของสัญญาฉบับยาวขนาด 30 MB จะใช้พื้นที่ประมาณ 60 MB หากคุณเก็บไดเรกทอรี export ไว้ในดิสก์เดียวกันด้วย คลังเอกสารชุดเดียวกันก็จะถูกเก็บไว้บนดิสก์ถึงสามครั้ง
ฉันจำเป็นต้องใช้คอนเทนเนอร์ Tika และ Gotenberg หรือไม่?
จำเป็นเฉพาะในกรณีที่คุณต้องการให้ไฟล์ Word, Excel หรือ OpenDocument ถูกจัดทำดัชนีควบคู่ไปกับไฟล์ PDF ของคุณ คอนเทนเนอร์เหล่านี้จะแปลงรูปแบบไฟล์ดังกล่าวเป็น PDF เพื่อให้ paperless สามารถทำ OCR และค้นหาได้ นอกจากนี้ยังเป็นการเพิ่มจำนวนคอนเทนเนอร์ที่ทำงานอยู่และใช้หน่วยความจำเพิ่มขึ้นอีกหลายร้อยเมกะไบต์ ดังนั้นหากเอกสารทั้งหมดที่คุณจัดเก็บเป็นไฟล์ PDF หรือรูปภาพอยู่แล้ว ก็สามารถข้ามการติดตั้งส่วนนี้ไปได้หากใช้เครื่องที่มีทรัพยากรจำกัด