VPS-এ Paperless-ngx সেটআপ করার নিয়ম
Docker Compose ব্যবহার করে VPS-এ Paperless-ngx ইনস্টল করার পূর্ণাঙ্গ গাইড। Postgres কনফিগারেশন, PAPERLESS_URL সেটআপ, OCR ভাষা নির্বাচন এবং HTTPS সিকিউরিটি নিশ্চিত করার উপায় জানুন।
আপনি যা তৈরি করছেন
একটি VPS-এ Paperless-ngx ব্যবহার করলে স্ক্যান করা কাগজের ফাইলগুলোকে একটি সার্চযোগ্য আর্কাইভে রূপান্তর করা যায়। আপনি একটি PDF ফাইল একটি নির্দিষ্ট ডিরেক্টরিতে রাখলে, সার্ভার সেটির ওপর OCR (optical character recognition) চালায়, টেক্সট বের করে, তারিখ ও প্রেরক অনুমান করে এবং ফাইলটি সংরক্ষণ করে। এই ইনস্টলেশনটি চারটি সার্ভিসসহ একটি Docker Compose ফাইলের মাধ্যমে সম্পন্ন হয়। এর পরের সবকিছুই কনফিগারেশনের বিষয়, এবং এই গাইডের বেশিরভাগ অংশ জুড়ে এটিই আলোচনা করা হয়েছে, কারণ ইনস্টলেশনগুলো সাধারণত এখানেই ব্যর্থ হয়। এটি কোনো ফটো লাইব্রেরি নয়: OCR এবং প্রেরক অনুমানের সুবিধাগুলো ছুটির দিনের JPEG ছবির ফোল্ডারের জন্য কোনো কাজে আসে না, তাই সেগুলোকে তাদের জন্য তৈরি একটি ফটো সার্ভারে রাখুন এবং Paperless-কে শুধুমাত্র কাগজের নথিপত্রের জন্য ব্যবহার করুন।
Paperless-ngx হলো মূল Paperless project-এর রক্ষণাবেক্ষণ করা community fork। এটি free, self-hosted এবং আপনার নথি disk-এ plain file হিসেবে সংরক্ষণ করে। তাই নিজের archive থেকে আপনি কখনোই প্রবেশাধিকার হারাবেন না। বাড়ির কম্পিউটারের বদলে VPS-এ এটি চালালে home router-এ কোনো port খোলা ছাড়াই যেকোনো স্থান থেকে scan করা নথিতে প্রবেশ করা যায়। কাগজে নেই এমন file-এর জন্য একটি private Nextcloud instance ব্যবহার করলেও এটি ভালোভাবে কাজ করে। একই যুক্তি সেই desktop-এর ক্ষেত্রেও প্রযোজ্য, যার সঙ্গে scanner সংযুক্ত। কারণ সেই VPS-এ আপনার নিজস্ব একটি RustDesk relay থাকলে router-এ port না খুলেই অন্য স্থান থেকে ওই machine নিয়ন্ত্রণ করতে পারবেন।
স্ট্যাকটি আসলে যা চালায়
অফিসিয়াল compose ফাইলটি চারটি কন্টেইনার চালু করে। প্রতিটি কন্টেইনার কী কাজ করে তা জানা থাকলে লগগুলো পড়া সহজ হয়।
webserver: paperless-ngx ইমেজটি নিজেই। এটি ওয়েব ইন্টারফেস, API, আপনার ইনপুট ফোল্ডার পর্যবেক্ষণকারী কনজিউমার এবং OCR-এর কাজ করা Celery টাস্ক ওয়ার্কারগুলো চালায়।db: PostgreSQL। এটি মেটাডেটা, ট্যাগ, করেসপন্ডেন্ট এবং ফুল-টেক্সট সার্চ ইনডেক্স টেবিলগুলো সংরক্ষণ করে। এটি আপনার PDF ফাইলগুলো সংরক্ষণ করে না।broker: Valkey, একটি Redis-সামঞ্জস্যপূর্ণ কি-ভ্যালু স্টোর। এটি ওয়েব প্রসেস এবং ওয়ার্কারদের মধ্যে টাস্ক কিউ হিসেবে কাজ করে।gotenbergএবংtika: ঐচ্ছিক, শুধুমাত্র-tikacompose ভেরিয়েন্টগুলোতে থাকে। এগুলো অফিস ডকুমেন্টগুলোকে (.docx,.xlsx,.odt) PDF-এ রূপান্তর করে যাতে paperless সেগুলোকে ইনডেক্স করতে পারে।
জুলাই 2026 অনুযায়ী, postgres compose ফাইলটি docker.io/library/postgres:18 এবং docker.io/valkey/valkey:9-alpine ভার্সন পিন করে রাখে এবং ghcr.io/paperless-ngx/paperless-ngx:latest থেকে অ্যাপটি পুল করে।
পূর্বশর্ত
- sudo অ্যাক্সেসসহ একটি Ubuntu 24.04 KVM VPS এবং আগে থেকেই ইনস্টল করা Docker ও Compose প্লাগইন। যদি এই অংশটি আপনার জন্য নতুন হয়, তবে VPS-এর জন্য Docker Compose-এর মৌলিক বিষয়গুলো থেকে শুরু করুন এবং তারপর এখানে ফিরে আসুন।
- একটি ডোমেইন নাম যার A রেকর্ডটি আপনার VPS-এর দিকে নির্দেশ করছে। Paperless এমন কোনো হোস্টনামে সার্ভিস দিতে অস্বীকার করে যা সম্পর্কে তাকে আগে জানানো হয়নি, তাই এটি আপনার প্রত্যাশার চেয়েও আগে গুরুত্বপূর্ণ হয়ে ওঠে।
- মেমোরি হলো আসল সীমাবদ্ধতা। PostgreSQL, Valkey, gunicorn এবং একটি Tesseract OCR ওয়ার্কার একসাথে চলার জন্য হালকা ব্যবহারের ক্ষেত্রে 2 GB মেমোরি যথেষ্ট। আপনি যদি শত শত স্ক্যান করা ফাইলের ব্যাকলগ ইমপোর্ট করার পরিকল্পনা করেন, তবে 4 GB মেমোরি বরাদ্দ করুন। কারণ বড় মাল্টি-পেজ PDF-এর ওপর OCR চালানোর সময় মেমোরির যে হঠাৎ চাপ তৈরি হয়, তাতে কার্নেলের out-of-memory কিলার ওয়ার্কারটিকে বন্ধ করে দিতে পারে।
- ডিস্ক: আপনার আর্কাইভটি দুইবার সংরক্ষিত হয়—মূল ফাইল এবং OCR করা আর্কাইভ PDF। তাই আপনার স্ক্যান করা ফাইলের মোট আকারের প্রায় দ্বিগুণ জায়গা বাজেট হিসেবে রাখুন।
অফিসিয়াল compose ফাইলগুলো সংগ্রহ করা
এখানে একটি ইন্টারঅ্যাক্টিভ ইনস্টলার রয়েছে:
bash -c "$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)"এটি আপনাকে কিছু প্রশ্ন করবে এবং আপনার জন্য ফাইলগুলো তৈরি করে দেবে। তবে হাতে কলমে কাজ করা মানে চারটি কমান্ড চালানো, যা আপনাকে সার্ভারের প্রতিটি ফাইলের অবস্থান সম্পর্কে পরিষ্কার ধারণা দেবে। রক্ষণাবেক্ষণের জন্য এটিই সবচেয়ে ভালো পদ্ধতি।
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 ঠিক আছে, কিন্তু PostgreSQL-এর তুলনায় এর ফুল-টেক্সট সার্চ ইনডেক্স অনেক আগেই ধীর হয়ে যায়।
.env ফাইলটিতে একটি মাত্র লাইন থাকে, COMPOSE_PROJECT_NAME=paperless। এই নামটি প্রতিটি কন্টেইনার এবং ভলিউমের প্রিফিক্স হিসেবে ব্যবহৃত হয়। তাই এটি মুছে ফেলবেন না, অন্যথায় 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 হিসেবে আসে। এটি সেশন কুকি সাইন (sign) করার কাজে ব্যবহৃত হয়, তাই এটি পরিবর্তন না করলে যে কেউ ডিফল্ট মান জেনে সেশন জালিয়াতি করতে পারে। প্রথমবার চালু করার আগেই এটি সেট করুন, কারণ পরে পরিবর্তন করলে সব ব্যবহারকারী লগ-আউট হয়ে যাবেন।
PAPERLESS_URL সেটিংটি আপনার অনেক সময় বাঁচাবে। Paperless একটি Django অ্যাপ্লিকেশন এবং Django প্রতিটি অনুরোধের Host হেডার যাচাই করে। PAPERLESS_URL সেট করলে এটি আপনার জন্য স্বয়ংক্রিয়ভাবে ALLOWED_HOSTS, CORS_ALLOWED_HOSTS এবং CSRF_TRUSTED_ORIGINS পূরণ করে দেয়। এটি খালি রাখলে এবং ডোমেইন পয়েন্ট করলে প্রতিটি পেজে Bad Request (400) এরর আসবে এবং কন্টেইনার লগে DisallowedHost দেখা যাবে। এটি লেখার সময় শেষে কোনো স্ল্যাশ (/) বা পাথ দেবেন না।
USERMAP_GID এবং USERMAP_UID দিয়ে নির্ধারণ করা হয় কোন ব্যবহারকারীর অধীনে কন্টেইনারটি চলবে। id -u এবং id -g কমান্ড দিয়ে আপনার নিজস্ব অ্যাকাউন্টের তথ্য যাচাই করে সে অনুযায়ী এগুলো সেট করুন। যদি এগুলো না মেলে, তবে consume ফোল্ডারে কপি করা ফাইলগুলো কনজিউমার পড়তে পারবে না এবং লগে ইমপোর্টের পরিবর্তে পারমিশন এরর দেখাবে।
স্ট্যাকটি চালু করুন এবং প্রথম ব্যবহারকারী তৈরি করুন
docker compose pull
docker compose up -d
docker compose run --rm webserver createsuperuser
docker compose logs -f webservercreatesuperuser একটি ইউজারনেম, একটি ইমেইল এবং একটি পাসওয়ার্ড জানতে চাইবে। এখানে কোনো ডিফল্ট লগইন নেই, তাই এই ধাপটি বাদ দিলে আপনি এমন একটি সাইন-ইন পেজে আটকে যাবেন যেখানে কোনো কিছুই কাজ করবে না। ব্রাউজারে চেষ্টা করার আগে লগ লাইনে সার্ভারটি 8000 পোর্টে লিসেন করছে কি না, তা নিশ্চিত হয়ে নিন। প্রথমবার চালু করার সময় ডাটাবেস মাইগ্রেশন সম্পন্ন হয়, যার জন্য এক বা দুই মিনিট সময় লাগতে পারে।
ডোমেইন যুক্ত করার আগে লোকালি এটি পরীক্ষা করুন:
curl -I http://127.0.0.1:8000302 থেকে /accounts/login/-এ রিডাইরেক্ট হওয়া মানে হলো স্ট্যাকটি সঠিকভাবে কাজ করছে।
এর সামনে HTTPS যুক্ত করুন
স্টক compose ফাইলটি 8000:8000 পাবলিশ করে, যা প্রতিটি ইন্টারফেসের সাথে বাইন্ড হয়। একটি পাবলিক VPS-এ এটি আপনার সম্পূর্ণ ডকুমেন্ট আর্কাইভকে plain HTTP-এর মাধ্যমে যে কারো জন্য উন্মুক্ত করে দেয়, যে কেউ ঠিকানাটি খুঁজে পেলেই তা দেখতে পাবে। পোর্ট লাইনটি পরিবর্তন করে শুধুমাত্র loopback-এর সাথে বাইন্ড করুন:
ports:
- "127.0.0.1:8000:8000"এরপর একটি reverse proxy-তে TLS (transport layer security) টার্মিনেট করুন এবং 127.0.0.1:8000-এ ফরোয়ার্ড করুন। যদি এটিই সার্ভারের একমাত্র অ্যাপ হয়, তবে ACME (automatic certificate management environment) ক্লায়েন্ট আছে এমন যেকোনো প্রক্সি ব্যবহার করা যাবে। যদি আপনি একটি সার্টিফিকেট সেটআপের অধীনে একাধিক কন্টেইনার চালান, তবে একাধিক Docker Compose অ্যাপের জন্য Traefik reverse proxy প্যাটার্ন অনুসরণ করুন এবং webserver সার্ভিসটিকে প্রক্সি নেটওয়ার্কের সাথে যুক্ত করুন, কোনো পোর্ট পাবলিশ না করেই।
আপনি যে প্রক্সিও ব্যবহার করুন না কেন, সেটিকে অবশ্যই X-Forwarded-Proto: https পাঠাতে হবে। এটি ছাড়া Django মনে করবে অনুরোধটি HTTP-এর মাধ্যমে এসেছে, লগইন ফর্মে origin চেক ব্যর্থ হবে এবং আপনি এমন একটি পেজে CSRF verification failed. Request aborted. পাবেন যা দেখতে সঠিক মনে হয়। এই সমস্যার সমাধানের অন্য অংশটি হলো PAPERLESS_URL-কে ব্রাউজারে টাইপ করা সঠিক https:// ঠিকানায় সেট করা।
এছাড়া প্রক্সির আপলোড সাইজ লিমিট বাড়িয়ে দিন। একটি 40 MB স্ক্যান যদি এমন প্রক্সির মধ্য দিয়ে যায় যা বডি সাইজ 1 MB-তে সীমাবদ্ধ রাখে, তবে তা paperless-এ পৌঁছানোর আগেই প্রত্যাখ্যাত হবে এবং ব্রাউজার একটি সাধারণ আপলোড ব্যর্থতার বার্তা দেখাবে।
consume ডিরেক্টরি যেভাবে কাজ করে
Compose ফাইলটি compose ডিরেক্টরি থেকে ./consume-কে কন্টেইনারের ভেতর bind-mount করে। আপনি সেখানে যা কিছু রাখবেন তা ইমপোর্ট করা হবে এবং এরপর ফোল্ডার থেকে মুছে ফেলা হবে, কারণ ফাইলটি এখন paperless ব্যবস্থাপনার অধীনে media ভলিউমে সংরক্ষিত থাকে।
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 কার্নেল ফাইলসিস্টেম নোটিফিকেশন ব্যবহার করে, যা তাৎক্ষণিকভাবে কাজ করে। এই নোটিফিকেশনগুলো নেটওয়ার্ক ফাইলসিস্টেমের ক্ষেত্রে কাজ করে না। যদি আপনার consume ফোল্ডারটি একটি NFS বা SMB শেয়ার হয় যাতে কোনো নেটওয়ার্ক স্ক্যানার ফাইল লিখতে পারে, তবে কোনো ফাইলই শনাক্ত হবে না। এর সমাধান হলো ইন্টারভ্যালকে একটি ধনাত্মক সেকেন্ডে সেট করা, যাতে paperless নির্দিষ্ট সময় পরপর ফোল্ডারটি স্ক্যান করতে পারে।
OCR ভাষা এবং সেগুলোর খরচ
PAPERLESS_OCR_LANGUAGE একটি তিন-অক্ষরের Tesseract কোড গ্রহণ করে, যার ডিফল্ট মান হলো eng। একাধিক ভাষাকে প্লাস চিহ্ন দিয়ে যুক্ত করুন, যেমন deu+eng। Tesseract তখন প্রতিটি ভাষা পরীক্ষা করে সেরা ফলাফলটি বেছে নেয়, তাই প্রতিটি অতিরিক্ত ভাষা প্রতিটি পৃষ্ঠার জন্য CPU-এর সময় বহুগুণ বাড়িয়ে দেয়। একটি শেয়ারড-vCPU VPS-এ এটি স্ক্যান সম্পন্ন হওয়ার সময় 10 সেকেন্ড থেকে বাড়িয়ে এক মিনিটে নিয়ে যেতে পারে। শুধুমাত্র সেই ভাষাগুলোই তালিকাভুক্ত করুন যেগুলোতে আপনার ডকুমেন্টগুলো লেখা হয়েছে।
ইমেজটিতে ইংরেজি, জার্মান, ইতালীয়, স্প্যানিশ এবং ফরাসি ভাষা অন্তর্ভুক্ত থাকে। অন্য যেকোনো ভাষার জন্য, PAPERLESS_OCR_LANGUAGES-এ স্পেস দিয়ে আলাদা করা তালিকা হিসেবে ভাষাটি যোগ করুন, উদাহরণস্বরূপ PAPERLESS_OCR_LANGUAGES=tur ces, এবং তারপর রিস্টার্ট করুন। কন্টেইনারটি স্টার্টআপের সময় Tesseract ডেটা প্যাকগুলো ডাউনলোড করে, তাই এই পরিবর্তনের পর প্রথমবার বুট হতে কিছুটা বেশি সময় লাগে।
ডাটাবেস এবং মিডিয়া ব্যাকআপ নেওয়া
PostgreSQL চলাকালীন Docker volumes কপি করলে এমন একটি ব্যাকআপ তৈরি হতে পারে যা রিস্টোর করা সম্ভব নাও হতে পারে। Paperless-এর নিজস্ব একটি exporter রয়েছে, যা ডকুমেন্ট এবং সমস্ত মেটাডেটার একটি JSON manifest ফাইল ./export bind mount-এ লিখে রাখে:
docker compose exec webserver document_exporter ../export --delete --no-progress-bar--delete বর্তমান ডকুমেন্টের সাথে মিল নেই এমন এক্সপোর্ট করা ফাইলগুলো মুছে ফেলে, ফলে ফোল্ডারটি অহেতুক বড় না হয়ে একটি মিরর হিসেবে থাকে। --no-progress-bar ক্রন (cron) থেকে এটি চালানোর সময় আউটপুট পরিষ্কার রাখে।
নতুন কোনো স্ট্যাকে একই ফোল্ডার ব্যবহার করে document_importer কমান্ডের মাধ্যমে রিস্টোর করা যায়, যার অর্থ হলো এই এক্সপোর্ট ডিরেক্টরিটিই আপনার একমাত্র নিরাপদ রাখার বিষয়। একটি নির্দিষ্ট সময়সূচী অনুযায়ী আপনার VPS থেকে এনক্রিপ্টেড, ডিডুপ্লিকেটেড restic ব্যাকআপ ব্যবহার করে এটি অফসাইটে পাঠিয়ে দিন এবং restic যাতে অসম্পূর্ণ কোনো আর্কাইভ কপি না করে সেজন্য আগে এক্সপোর্ট কমান্ডটি চালান।
export/manifest.json আছে কি না এবং interface-এ দেখানো document count-এর সঙ্গে file count মেলে কি না, তা পরীক্ষা করে backup যাচাই করুন। আপনি কখনও তালিকাভুক্ত করেননি এমন backup কার্যকর backup নয়। প্রতি রাতে চলা export নীরবে ব্যর্থ হতে থাকলে পরিস্থিতি আরও খারাপ হয়। তাই cron job-এর exit status আপনার নিজস্ব ntfy server-এ পাঠানোর ব্যবস্থা করুন। তাহলে restore করার প্রয়োজনের দিন নয়, backup ব্যর্থ হওয়ার সপ্তাহেই বিষয়টি জানতে পারবেন।
FAQ
আমার ডোমেইন পয়েন্ট করার পর প্রতিটি পেজে কেন "Bad Request (400)" দেখাচ্ছে?
Django আপনার Host হেডারটি প্রত্যাখ্যান করেছে কারণ আপনার ডোমেইনটি ALLOWED_HOSTS-এ নেই। docker-compose.env ফাইলে PAPERLESS_URL=https://paperless.example.com সেট করুন (শেষে কোনো slash দেবেন না), তারপর কন্টেইনারটি পুনরায় তৈরি করতে docker compose up -d কমান্ডটি চালান। শুধুমাত্র env ফাইল পরিবর্তন করলে কোনো কাজ হবে না, কারণ চলমান কন্টেইনারটি তার শুরুর সময়ের এনভায়রনমেন্ট ধরে রাখে।
আমি consume ফোল্ডারে একটি PDF রেখেছি কিন্তু কিছুই হচ্ছে না। সমস্যা কোথায়?
প্রথমে docker compose logs webserver চেক করুন। পারমিশন এরর মানে হলো USERMAP_UID এবং USERMAP_GID ফাইলটির মালিক অ্যাকাউন্টের সাথে মিলছে না; তাই সেগুলো ঠিক করে কন্টেইনারটি পুনরায় তৈরি করুন। যদি কোনো লগ লাইনই না আসে, তবে বুঝতে হবে ফাইল ইভেন্টটি পৌঁছায়নি। নেটওয়ার্ক শেয়ারের ক্ষেত্রে এমনটি ঘটে কারণ কার্নেল নোটিফিকেশন সেগুলো পার হতে পারে না। সেক্ষেত্রে PAPERLESS_CONSUMER_POLLING_INTERVAL-কে 30-এর মতো কোনো মানে সেট করুন, এতে paperless প্রতি 30 সেকেন্ড অন্তর ফোল্ডারটি স্ক্যান করবে।
আমি কি PostgreSQL-এর পরিবর্তে SQLite দিয়ে paperless-ngx চালাতে পারি?
হ্যাঁ, docker-compose.sqlite.yml সমর্থিত এবং এটি কম মেমোরি ব্যবহার করে, যা ছোট VPS-এর জন্য উপযুক্ত। তবে আর্কাইভ বড় হওয়ার সাথে সাথে এর সীমাবদ্ধতা দেখা দেয়: হাজার হাজার ডকুমেন্টের ক্ষেত্রে ফুল-টেক্সট সার্চ এবং বাল্ক ট্যাগ এডিট বেশ ধীর হয়ে যায়। পরবর্তীতে মাইগ্রেট করতে হলে এক্সপোর্ট এবং ইম্পোর্ট করতে হবে, তাই আপনার আর্কাইভ যদি বড় হওয়ার সম্ভাবনা থাকে তবে শুরু থেকেই PostgreSQL বেছে নিন।
স্ক্যান করা আর্কাইভের জন্য আসলে কতটুকু ডিস্ক স্পেস প্রয়োজন?
আপনার সোর্স ফাইলের আকারের প্রায় দ্বিগুণ। Paperless মূল ফাইলটিকে অক্ষত রাখে এবং একটি সার্চযোগ্য টেক্সট লেয়ারসহ দ্বিতীয় একটি OCR'd PDF সংরক্ষণ করে, সাথে ছোট থাম্বনেইলও থাকে। 200 KB-এর একটি টেক্সট-অনলি স্ক্যান ছোটই থাকে। কিন্তু একটি বড় চুক্তিনামার 30 MB-এর কালার স্ক্যান প্রায় 60 MB জায়গা নেয়। যদি এক্সপোর্ট ডিরেক্টরি একই ডিস্কে রাখেন, তবে একই আর্কাইভ ডিস্কে তিনবার জমা হবে।
আমার কি Tika এবং Gotenberg কন্টেইনার প্রয়োজন?
শুধুমাত্র যদি আপনি চান যে আপনার PDF-এর পাশাপাশি Word, Excel বা OpenDocument ফাইলগুলোও ইনডেক্স হোক। এগুলো ফাইল ফরম্যাটগুলোকে PDF-এ রূপান্তর করে যাতে paperless সেগুলো OCR এবং সার্চ করতে পারে। এগুলো আরও দুটি চলমান কন্টেইনার এবং কয়েকশ মেগাবাইট মেমোরি ব্যবহার করে, তাই আপনার সব ফাইল যদি আগে থেকেই PDF বা ইমেজ ফরম্যাটে থাকে, তবে ছোট সার্ভারে এগুলো এড়িয়ে চলাই ভালো।