VPS پر Paperless-ngx کیسے انسٹال کریں: مکمل گائیڈ
Docker Compose کے ذریعے VPS پر Paperless-ngx سیٹ اپ کریں۔ اس گائیڈ میں Postgres کنفیگریشن، OCR زبانیں، HTTPS سیکیورٹی، اور ڈیٹا بیک اپ کے اہم مراحل شامل ہیں۔
آپ کیا بنا رہے ہیں
VPS پر Paperless-ngx اسکین شدہ کاغذات کے فولڈر کو ایک قابلِ تلاش آرکائیو میں تبدیل کر دیتا ہے۔ آپ ایک PDF کو واچڈ ڈائریکٹری میں ڈالتے ہیں، سرور اس پر OCR (آپٹیکل کریکٹر ریکگنیشن) چلاتا ہے، متن کو نکالتا ہے، تاریخ اور نامہ نگار کا اندازہ لگاتا ہے، اور اسے فائل کر دیتا ہے۔ یہ تنصیب ایک Docker Compose فائل پر مشتمل ہے جس میں 4 سروسز ہیں۔ اس کے بعد سب کچھ کنفیگریشن ہے، اور یہ گائیڈ اس پر زیادہ وقت صرف کرتی ہے، کیونکہ تنصیبات یہیں خراب ہوتی ہیں۔
Paperless-ngx اصل Paperless پروجیکٹ کا برقرار رکھا گیا کمیونٹی فورک ہے۔ یہ مفت ہے، خود میزبانی (self-hosted) کی سہولت دیتا ہے، اور آپ کی دستاویزات کو ڈسک پر سادہ فائلوں کے طور پر محفوظ کرتا ہے، لہذا آپ اپنے آرکائیو سے کبھی بھی باہر نہیں ہوں گے۔ اسے ہوم باکس کے بجائے VPS پر چلانے کا مطلب یہ ہے کہ آپ کے اسکین کہیں سے بھی قابلِ رسائی ہیں بغیر آپ کے ہوم راؤٹر پر کوئی پورٹ کھولے، اور یہ ان فائلوں کے لیے ایک نجی Nextcloud انسٹینس کے ساتھ بہترین جوڑی بناتا ہے جو کاغذ نہیں ہیں۔
اسٹیک دراصل کیا چلاتا ہے
آفیشل compose فائل چار کنٹینرز شروع کرتی ہے، اور یہ جاننا کہ ہر ایک کیا کام کرتا ہے، لاگز کو پڑھنے کے قابل بناتا ہے۔
webserver: خود paperless-ngx امیج۔ یہ ویب انٹرفیس، API، کنزیومر جو آپ کے ان پٹ فولڈر کو مانیٹر کرتا ہے، اور Celery ٹاسک ورکرز جو OCR کرتے ہیں، انہیں چلاتا ہے۔db: PostgreSQL۔ یہ میٹا ڈیٹا، ٹیگز، نامہ نگاروں، اور فل ٹیکسٹ سرچ انڈیکس ٹیبلز کو محفوظ رکھتا ہے۔ یہ آپ کی PDF فائلیں محفوظ نہیں کرتا۔broker: Valkey، ایک Redis سے مطابقت رکھنے والا کی-ویلیو اسٹور۔ یہ ویب پروسیس اور ورکرز کے درمیان ٹاسک کیو (queue) کا کام کرتا ہے۔gotenbergاورtika: اختیاری، صرف-tikacompose ویریئنٹس میں۔ یہ آفس دستاویزات (.docx،.xlsx،.odt) کو PDF میں تبدیل کرتے ہیں تاکہ paperless انہیں انڈیکس کر سکے۔
جولائی 2026 تک، postgres compose فائل docker.io/library/postgres:18 اور docker.io/valkey/valkey:9-alpine کو پن (pin) کرتی ہے، اور ایپ کو ghcr.io/paperless-ngx/paperless-ngx:latest سے پل (pull) کرتی ہے۔
پیشگی شرائط
- ایک Ubuntu 24.04 KVM VPS جس پر sudo تک رسائی حاصل ہو، اور Docker بمعہ Compose پلگ ان پہلے سے انسٹال ہو۔ اگر یہ مرحلہ آپ کے لیے نیا ہے، تو VPS کے لیے Docker Compose کے بنیادی اصول سے شروعات کریں اور پھر واپس آئیں۔
- ایک ڈومین نام جس کا A ریکارڈ VPS کی طرف اشارہ کر رہا ہو۔ Paperless ایسے ہوسٹ نام پر سروس فراہم کرنے سے انکار کر دیتا ہے جس کے بارے میں اسے مطلع نہ کیا گیا ہو، لہذا یہ معاملہ آپ کی توقع سے پہلے اہم ہو جاتا ہے۔
- میموری اصل رکاوٹ ہے۔ PostgreSQL، Valkey، gunicorn اور Tesseract OCR ورکر، سب ایک ساتھ 2 GB میں ہلکے استعمال کے لیے فٹ ہو جاتے ہیں۔ اگر آپ سینکڑوں اسکینز کا بیک لاگ امپورٹ کرنے کا ارادہ رکھتے ہیں تو اسے 4 GB دیں، کیونکہ بڑی کثیر صفحات والی PDF پر OCR کرنے سے میموری میں اچانک اضافہ ہوتا ہے جس کی وجہ سے کرنل کا out-of-memory killer ورکر کو ختم کر دیتا ہے۔
- ڈسک: آپ کا آرکائیو دو بار اسٹور ہوتا ہے، اصل فائل اور OCR شدہ آرکائیو PDF، لہذا اپنے اسکینز کے حجم سے تقریباً دوگنا جگہ مختص کریں۔
سرکاری 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 ٹھیک ہے، لیکن 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 ہوتی ہے۔ یہ سیشن کوکیز کو سائن کرتی ہے، لہذا اسے تبدیل نہ کرنے کا مطلب یہ ہے کہ کوئی بھی شخص جو ڈیفالٹ ویلیو جانتا ہو، وہ سیشن کو جعلی بنا سکتا ہے۔ اسے پہلی بار چلانے سے پہلے سیٹ کریں، کیونکہ بعد میں اسے تبدیل کرنے سے تمام صارفین لاگ آؤٹ ہو جائیں گے۔
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 فولڈر میں کاپی کی گئی فائلیں کنزیومر کے لیے ناقابلِ رسائی ہوں گی، اور لاگ میں امپورٹ کے بجائے اجازت (permission) کا ایرر ظاہر ہوگا۔
اسٹیک کو شروع کریں اور پہلا صارف بنائیں
docker compose pull
docker compose up -d
docker compose run --rm webserver createsuperuser
docker compose logs -f webservercreatesuperuser صارف نام، ای میل اور پاس ورڈ کے لیے پوچھتا ہے۔ کوئی ڈیفالٹ لاگ ان موجود نہیں ہے، لہذا اس مرحلے کو چھوڑنے سے آپ ایک ایسے سائن ان صفحے پر رہ جائیں گے جو کبھی کسی چیز کو قبول نہیں کرے گا۔ براؤزر میں کوشش کرنے سے پہلے اس لاگ لائن کا انتظار کریں جو یہ بتاتی ہے کہ سرور پورٹ 8000 پر لسن (listen) کر رہا ہے۔ پہلی بار شروع کرنے پر ڈیٹا بیس مائیگریشنز بھی چلتی ہیں، جس میں ایک یا دو منٹ لگتے ہیں۔
ڈومین کو شامل کرنے سے پہلے اسے مقامی طور پر چیک کریں:
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 فائل ./consume کو compose ڈائریکٹری سے کنٹینر میں بائنڈ-ماؤنٹ (bind-mount) کرتی ہے۔ آپ وہاں جو کچھ بھی رکھتے ہیں، اسے امپورٹ کر لیا جاتا ہے اور پھر فولڈر سے حذف کر دیا جاتا ہے، کیونکہ اب یہ فائل paperless کے انتظام کے تحت media والیوم میں موجود ہوتی ہے۔
cp ~/scan-2026-07-14.pdf ~/paperless/consume/
docker compose logs -f webserverآپ کو دیکھنا چاہیے کہ consumer فائل کا نام اٹھاتا ہے، OCR چلاتا ہے، اور اس لائن کے ساتھ مکمل کرتا ہے جو بتاتی ہے کہ دستاویز شامل کر دی گئی ہے۔ ایک صفحے کے اسکین کے لیے پورا چکر چند سیکنڈ کا ہوتا ہے اور ایک لمبی دستاویز کے لیے یہ ایک منٹ یا اس سے زیادہ ہو سکتا ہے۔
دو سیٹنگز اس بات کو تبدیل کرتی ہیں کہ فائلیں کیسے تلاش کی جاتی ہیں۔ PAPERLESS_CONSUMER_RECURSIVE=true کی وجہ سے paperless ذیلی فولڈرز (subfolders) میں تلاش کرتا ہے، اور PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=true ہر ذیلی فولڈر کے نام کو ایک ٹیگ میں تبدیل کر دیتا ہے، لہذا اگر آپ کوئی فائل consume/invoices/2026/ میں ڈالتے ہیں تو اسے invoices اور 2026 کے ٹیگز لگ جاتے ہیں۔ یہ سب سے سستا فائلنگ سسٹم ہے جو آپ کبھی بھی بنا سکیں گے۔
ڈیٹیکشن (Detection) دوسرا حصہ ہے۔ بائی ڈیفالٹ PAPERLESS_CONSUMER_POLLING_INTERVAL کی ویلیو 0 ہوتی ہے، جس کا مطلب ہے کہ paperless کرنل فائل سسٹم کی اطلاعات (notifications) استعمال کرتا ہے، جو فوری طور پر متحرک ہو جاتی ہیں۔ یہ اطلاعات نیٹ ورک فائل سسٹم کے پار نہیں جاتی ہیں۔ اگر آپ کا consume فولڈر ایک NFS یا SMB شیئر ہے تاکہ نیٹ ورک اسکینر اس میں لکھ سکے، تو کچھ بھی ڈیٹیکٹ نہیں ہوگا، اور اس کا حل یہ ہے کہ انٹرول کو سیکنڈز کی مثبت تعداد پر سیٹ کر دیا جائے تاکہ paperless فولڈر کو اسکین کر سکے۔
OCR زبانیں اور ان کی قیمت
PAPERLESS_OCR_LANGUAGE تین حروف پر مشتمل Tesseract کوڈ لیتا ہے، جو کہ بائی ڈیفالٹ eng ہوتا ہے۔ زبانوں کو جمع (+) کے نشان کے ساتھ ملائیں، جیسا کہ deu+eng میں ہے۔ Tesseract پھر ہر ایک کو آزماتا ہے اور بہترین نتیجہ محفوظ کر لیتا ہے، لہذا ہر اضافی زبان ہر صفحے پر صرف ہونے والے CPU وقت کو ضرب دیتی ہے۔ ایک شیئرڈ vCPU VPS پر یہ فرق اس بات کا ہے کہ اسکین دس سیکنڈ میں مکمل ہو یا ایک منٹ میں۔ صرف وہی زبانیں درج کریں جن میں آپ کی دستاویزات درحقیقت لکھی گئی ہیں۔
یہ امیج English، German، Italian، Spanish اور French کے ساتھ آتی ہے۔ کسی بھی دوسری زبان کے لیے، اسے 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 ان ایکسپورٹ شدہ فائلوں کو ہٹا دیتا ہے جو اب موجودہ دستاویز سے مطابقت نہیں رکھتیں، تاکہ فولڈر ہمیشہ ایک عکس (mirror) رہے اور لامحدود طور پر نہ بڑھے۔ --no-progress-bar اس بات کو یقینی بناتا ہے کہ جب یہ cron سے چلے تو آؤٹ پٹ صاف رہے۔
بحالی کا عمل ایک نئے اسٹیک پر اسی فولڈر کے خلاف document_importer ہے، جس کا مطلب ہے کہ ایکسپورٹ ڈائریکٹری ہی وہ واحد چیز ہے جسے آپ کو محفوظ رکھنا ہے۔ اسے ایک شیڈول کے مطابق اپنے VPS سے انکرپٹڈ، ڈی ڈپلیکیٹڈ restic بیک اپس کے ذریعے آف سائٹ بھیجیں، اور ایکسپورٹ کو پہلے چلائیں تاکہ restic کبھی بھی ادھورا آرکائیو کیپچر نہ کرے۔
یہ تصدیق کر کے بیک اپ کی جانچ کریں کہ export/manifest.json موجود ہے اور فائلوں کی تعداد انٹرفیس میں موجود آپ کی دستاویزات کی تعداد سے میل کھاتی ہے۔ وہ بیک اپ جس کی آپ نے کبھی فہرست نہیں دیکھی، وہ بیک اپ نہیں ہے۔
FAQ
جب میں اپنے ڈومین کو اس کی طرف پوائنٹ کرتا ہوں تو ہر صفحہ "Bad Request (400)" کیوں دیتا ہے؟
Django نے Host ہیڈر کو مسترد کر دیا ہے کیونکہ آپ کا ڈومین ALLOWED_HOSTS میں شامل نہیں ہے۔ docker-compose.env میں PAPERLESS_URL=https://paperless.example.com کو سیٹ کریں، جس کے آخر میں کوئی سلیش نہ ہو، اور پھر کنٹینر کو دوبارہ بنانے کے لیے docker compose up -d چلائیں۔ صرف env فائل میں ترمیم کرنے سے کچھ نہیں ہوگا، کیونکہ چلتا ہوا کنٹینر اسی ماحول کو برقرار رکھتا ہے جس کے ساتھ وہ شروع ہوا تھا۔
میں نے consume فولڈر میں ایک PDF ڈالی اور کچھ نہیں ہوا۔ کیا مسئلہ ہے؟
سب سے پہلے docker compose logs webserver کو چیک کریں۔ اجازت (permission) کی خرابی کا مطلب ہے کہ 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 فائلیں آپ کی PDFs کے ساتھ انڈیکس ہوں۔ وہ ان فارمیٹس کو PDF میں تبدیل کرتے ہیں تاکہ paperless ان کا OCR کر سکے اور انہیں تلاش کر سکے۔ وہ دو مزید چلتے ہوئے کنٹینرز اور چند سو میگا بائٹ میموری کا اضافہ بھی کرتے ہیں، لہذا اگر آپ جو کچھ بھی فائل کر رہے ہیں وہ پہلے سے ہی PDF یا امیج ہے تو چھوٹے باکس پر انہیں چھوڑ دیں۔