VPS-এ Paperless-ngx ইনস্টল করার নিয়ম
Docker Compose ব্যবহার করে VPS-এ Paperless-ngx সেটআপ করার পূর্ণাঙ্গ গাইড। এতে Postgres কনফিগারেশন, PAPERLESS_URL সেটিংস, OCR ল্যাঙ্গুয়েজ এবং ব্যাকআপ নেওয়ার সঠিক পদ্ধতি দেওয়া হয়েছে।
আপনি যা তৈরি করছেন
একটি VPS-এ Paperless-ngx ব্যবহার করলে স্ক্যান করা কাগজের নথিগুলো একটি অনুসন্ধানযোগ্য আর্কাইভে পরিণত হয়। আপনি একটি PDF ফাইল একটি নির্দিষ্ট ডিরেক্টরিতে রাখলে, সার্ভার সেটির ওপর OCR (অপটিক্যাল ক্যারেক্টার রিকগনিশন) চালায়, টেক্সট বের করে, তারিখ ও প্রেরক অনুমান করে এবং ফাইলটি সংরক্ষণ করে। এই ইনস্টলেশনটি চারটি সার্ভিস বিশিষ্ট একটি Docker Compose ফাইলের মাধ্যমে সম্পন্ন হয়। এর পরের সবকিছুই কনফিগারেশন, এবং এই গাইডের বেশিরভাগ অংশ জুড়ে এটিই আলোচনা করা হয়েছে, কারণ এখানেই ইনস্টলেশনগুলো সাধারণত ব্যর্থ হয়।
Paperless-ngx হলো মূল Paperless প্রজেক্টের একটি রক্ষণাবেক্ষণকৃত কমিউনিটি ফর্ক। এটি বিনামূল্যে ব্যবহারযোগ্য, সেলফ-হোস্টেড এবং আপনার ডকুমেন্টগুলোকে ডিস্কে সাধারণ ফাইল হিসেবে সংরক্ষণ করে, তাই আপনি কখনোই আপনার নিজের আর্কাইভ থেকে বিচ্ছিন্ন হবেন না। এটিকে বাড়ির কম্পিউটারের পরিবর্তে একটি VPS-এ চালানোর অর্থ হলো, আপনার বাড়ির রাউটারে কোনো পোর্ট না খুলেই আপনি যেকোনো জায়গা থেকে আপনার স্ক্যান করা ফাইলগুলো অ্যাক্সেস করতে পারবেন। এছাড়া, এটি কাগজ নয় এমন ফাইলের জন্য একটি ব্যক্তিগত Nextcloud ইনস্ট্যান্সের সাথে খুব ভালোভাবে কাজ করে।
স্ট্যাকটি আসলে যা চালায়
অফিসিয়াল 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 থাকে। এটি সেশন কুকি স্বাক্ষর করার কাজে ব্যবহৃত হয়, তাই এটি পরিবর্তন না করলে যে কেউ ডিফল্ট মানটি জেনে সেশন জাল করতে পারবে। প্রথমবার চালু করার আগেই এটি সেট করুন, কারণ পরে পরিবর্তন করলে সব ব্যবহারকারী লগ-আউট হয়ে যাবেন।
PAPERLESS_URL সেটিংসটি আপনার অনেক সময় বাঁচাবে। Paperless একটি Django অ্যাপ্লিকেশন এবং Django প্রতিটি রিকোয়েস্টের Host হেডার যাচাই করে। PAPERLESS_URL সেট করলে এটি স্বয়ংক্রিয়ভাবে আপনার জন্য ALLOWED_HOSTS, CORS_ALLOWED_HOSTS এবং CSRF_TRUSTED_ORIGINS পূরণ করে দেয়। এটি খালি রাখলে এবং সার্ভারের দিকে ডোমেইন পয়েন্ট করলে, প্রতিটি পেজে Bad Request (400) এরর দেখাবে এবং কন্টেইনার লগে DisallowedHost ত্রুটি দেখা যাবে। এটি লেখার সময় শেষে কোনো স্ল্যাশ (/) বা পাথ দেবেন না।
USERMAP_UID এবং USERMAP_GID দিয়ে নির্ধারণ করা হয় কন্টেইনারটি কোন ব্যবহারকারীর অধীনে চলবে। এগুলোর মান আপনার নিজের অ্যাকাউন্টের সাথে মিলিয়ে দিন, যা 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-এ এটি আপনার সম্পূর্ণ ডকুমেন্ট আর্কাইভ সাধারণ HTTP-এর মাধ্যমে যে কারো কাছে উন্মুক্ত করে দেয়, যে ঠিকানাটি খুঁজে পায়। পোর্ট লাইনটি পরিবর্তন করে শুধুমাত্র লুপব্যাক (loopback)-এর সাথে বাইন্ড করুন:
ports:
- "127.0.0.1:8000:8000"এরপর একটি রিভার্স প্রক্সিতে TLS (transport layer security) টার্মিনেট করুন এবং 127.0.0.1:8000-এ ফরোয়ার্ড করুন। যদি এটিই সার্ভারের একমাত্র অ্যাপ হয়, তবে ACME (automatic certificate management environment) ক্লায়েন্টযুক্ত যেকোনো প্রক্সি কাজ করবে। যদি আপনি একটি সার্টিফিকেট সেটআপের অধীনে একাধিক কন্টেইনার চালান, তবে একাধিক Docker Compose অ্যাপের জন্য Traefik রিভার্স প্রক্সি প্যাটার্ন অনুসরণ করুন এবং webserver সার্ভিসটিকে প্রক্সি নেটওয়ার্কের সাথে সংযুক্ত করুন, কোনো পোর্ট প্রকাশ না করেই।
আপনি যে প্রক্সিও ব্যবহার করুন না কেন, সেটিকে অবশ্যই X-Forwarded-Proto: https পাঠাতে হবে। এটি ছাড়া Django মনে করে যে অনুরোধটি HTTP-এর মাধ্যমে এসেছে, লগইন ফর্মে অরিজিন চেক ব্যর্থ হয় এবং আপনি এমন একটি পেজে 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আপনি দেখবেন যে কনজিউমার ফাইলের নাম শনাক্ত করছে, 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-এ এটি দশ সেকেন্ডে স্ক্যান শেষ হওয়া এবং এক মিনিটে শেষ হওয়ার মধ্যে পার্থক্য তৈরি করে। শুধুমাত্র সেই ভাষাগুলোই তালিকাভুক্ত করুন যেগুলোতে আপনার নথিপত্র প্রকৃতপক্ষে লেখা হয়েছে।
ইমেজটিতে ইংরেজি, জার্মান, ইতালীয়, স্প্যানিশ এবং ফরাসি ভাষা অন্তর্ভুক্ত থাকে। অন্য যেকোনো ভাষার জন্য, PAPERLESS_OCR_LANGUAGES-এ স্পেস দিয়ে আলাদা করা তালিকা হিসেবে ভাষাটি যোগ করুন, উদাহরণস্বরূপ PAPERLESS_OCR_LANGUAGES=tur ces, এবং তারপর রিস্টার্ট করুন। কন্টেইনারটি স্টার্টআপের সময় Tesseract ডেটা প্যাকগুলো ডাউনলোড করে, তাই সেই পরিবর্তনের পর প্রথমবার বুট হতে সময় বেশি লাগে।
ডেটাবেস এবং মিডিয়া ব্যাকআপ করা
PostgreSQL চলমান থাকা অবস্থায় Docker ভলিউম কপি করলে এমন একটি ব্যাকআপ তৈরি হতে পারে যা রিস্টোর করা সম্ভব নাও হতে পারে। Paperless নিজস্ব এক্সপোর্টার সরবরাহ করে, যা নথিপত্র এবং সমস্ত মেটাডেটার একটি JSON ম্যানিফেস্ট ./export বাইন্ড মাউন্টে লিখে রাখে:
docker compose exec webserver document_exporter ../export --delete --no-progress-bar--delete সেই এক্সপোর্ট করা ফাইলগুলো মুছে ফেলে যা বর্তমান নথির সাথে আর মেলে না, ফলে ফোল্ডারটি অসীমভাবে বড় না হয়ে একটি মিরর হিসেবে থাকে। যখন এটি cron থেকে চালানো হয়, তখন --no-progress-bar আউটপুটকে পরিষ্কার রাখে।
রিস্টোর করার প্রক্রিয়াটি হলো একটি নতুন স্ট্যাকে সেই একই ফোল্ডারের বিপরীতে document_importer চালানো, যার অর্থ হলো এক্সপোর্ট ডিরেক্টরিটিই একমাত্র জিনিস যা আপনাকে নিরাপদে রাখতে হবে। এটিকে একটি সময়সূচী অনুযায়ী আপনার VPS থেকে এনক্রিপ্ট করা, ডিডুপ্লিকেটেড restic ব্যাকআপ হিসেবে অফসাইটে পাঠান এবং এক্সপোর্টটি আগে চালান যাতে restic কখনোই অর্ধেক লেখা কোনো আর্কাইভ ক্যাপচার না করে।
export/manifest.json বিদ্যমান আছে কি না এবং ফাইলের সংখ্যা ইন্টারফেসে থাকা আপনার নথির সংখ্যার সাথে মেলে কি না তা যাচাই করে একটি ব্যাকআপ নিশ্চিত করুন। যে ব্যাকআপ আপনি কখনোই তালিকাভুক্ত করেননি, তা কোনো ব্যাকআপ নয়।
FAQ
আমার ডোমেইন নির্দেশ করার পর প্রতিটি পেজ কেন "Bad Request (400)" দেখাচ্ছে?
আপনার ডোমেইন ALLOWED_HOSTS-এ না থাকায় Django Host হেডারটি প্রত্যাখ্যান করেছে। docker-compose.env-এ PAPERLESS_URL=https://paperless.example.com সেট করুন, শেষে কোনো স্ল্যাশ (/) রাখবেন না, তারপর কন্টেইনারটি পুনরায় তৈরি করতে 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 করা PDF সংরক্ষণ করে, সাথে ছোট থাম্বনেইলও থাকে। 200 KB-এর শুধুমাত্র টেক্সট স্ক্যান ছোটই থাকে। একটি দীর্ঘ চুক্তির 30 MB রঙের স্ক্যান প্রায় 60 MB জায়গা নেয়। যদি আপনি এক্সপোর্ট ডিরেক্টরি একই ডিস্কে রাখেন, তবে একই আর্কাইভ ডিস্কে তিনবার জমা হবে।
আমার কি Tika এবং Gotenberg কন্টেইনার প্রয়োজন?
শুধুমাত্র যদি আপনি চান যে Word, Excel বা OpenDocument ফাইলগুলো আপনার PDF-এর পাশাপাশি ইনডেক্স হোক। এগুলো ওই ফরম্যাটগুলোকে PDF-এ রূপান্তর করে যাতে paperless সেগুলোকে OCR করতে এবং সার্চ করতে পারে। এগুলো আরও দুটি চলমান কন্টেইনার যোগ করে এবং কয়েকশ মেগাবাইট মেমরি খরচ করে, তাই যদি আপনার সব ফাইল আগে থেকেই PDF বা ইমেজ হয়, তবে ছোট সার্ভারে এগুলো এড়িয়ে চলুন।