Paperless-ngx: Arsip Dokumen Self-Host dengan OCR dan Tag Otomatis

 


Dokumen Anda ada, tapi tidak pernah ketemu saat dibutuhkan

Kwitansi pajak, kontrak, polis asuransi, slip gaji, tagihan — semuanya tersimpan di suatu tempat. Masalahnya, "di suatu tempat" itu bisa berarti folder Downloads, lampiran email lama, kardus di lemari, atau tiga tempat sekaligus. Saat dokumen itu mendadak dibutuhkan, Anda menghabiskan waktu mencarinya, bukan menggunakannya.

Paperless-ngx dibangun untuk itu. Ia adalah aplikasi arsip dokumen open source yang berjalan di server Anda sendiri: setiap dokumen yang masuk — hasil scan, foto, atau PDF digital — dibaca isinya dengan OCR (pengenalan teks optis), diindeks teks lengkapnya, lalu bisa diberi tag dan dikelompokkan otomatis. Setelah itu Anda cukup mengetik kata kunci, misalnya nama bank atau nomor kontrak, dan dokumennya muncul. Tidak ada folder yang perlu dihafal.

Bedanya dengan sekadar menyimpan PDF di Google Drive: pencarian Paperless-ngx membaca isi dokumen, bukan hanya nama file. Dan bedanya dengan layanan arsip berbayar: datanya ada di server Anda, tanpa biaya per dokumen dan tanpa ada yang memindai dokumen pribadi Anda untuk iklan.

Satu hal yang perlu jujur di awal: Paperless-ngx mengarsipkan, bukan menyulap dokumen buruk menjadi bagus. Scan yang buram atau miring tetap menghasilkan OCR yang buruk. Kualitas arsip Anda sangat bergantung pada kualitas scan yang masuk.

Yang perlu disiapkan

  • VPS dengan patokan praktis 2 CPU dan 4 GB RAM (bukan angka resmi vendor). OCR membebani CPU — makin banyak dokumen bersamaan, makin terasa. Untuk arsip rumahan, spesifikasi ini cukup.
  • Docker dan Docker Compose.
  • Disk yang cukup: dokumen yang diarsip disimpan dua kali (asli + versi arsip yang bisa dicari), jadi siapkan ruang dua kali lipat dari ukuran arsip Anda.
  • Opsional tapi sangat disarankan: domain atau subdomain, misalnya dokumen.domainanda.com, supaya akses dari luar lewat HTTPS.

Perintah di artikel ini memakai Ubuntu 24.04. Kalau Anda memakai distro lain, sesuaikan manajer paketnya, tapi langkah Paperless-ngx-nya sama.

Install Docker

Kalau Docker belum terpasang, install dari repositori Ubuntu:

sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker
sudo usermod -aG docker $USER

Perintah terakhir menambahkan user Anda ke grup docker supaya tidak perlu sudo setiap kali menjalankan Docker. Setelah itu logout dan login lagi agar grup barunya aktif, lalu cek:

docker --version
docker compose version

Install Paperless-ngx dengan Docker Compose

Paperless-ngx terdiri dari tiga layanan inti: aplikasi web, database Postgres untuk metadata, dan broker antrean (Redis) untuk tugas latar seperti OCR. Dua layanan opsional — Gotenberg dan Tika — menambahkan kemampuan mengubah dokumen Office dan format lain menjadi PDF; varian compose -tika resmi menyediakannya, tapi instalasi pertama tidak memerlukannya.

Siapkan dulu direktori dan secret key:

sudo mkdir -p /opt/paperless
sudo chown "$USER:$USER" /opt/paperless
cd /opt/paperless
openssl rand -base64 32

Salin hasil perintah terakhir — itu akan menjadi PAPERLESS_SECRET_KEY Anda. Jangan memakai kunci contoh dari artikel mana pun.

Lalu buat docker-compose.yml:

services:
  broker:
    image: redis:7-alpine
    container_name: paperless_broker
    restart: unless-stopped
    volumes:
      - redisdata:/data

  db:
    image: postgres:16-alpine
    container_name: paperless_db
    restart: unless-stopped
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: GANTI_DENGAN_PASSWORD_KUAT
    volumes:
      - pgdata:/var/lib/postgresql/data

  webserver:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: paperless_web
    restart: unless-stopped
    depends_on:
      - db
      - broker
    ports:
      - "127.0.0.1:8000:8000"
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBENGINE: postgresql
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: GANTI_DENGAN_PASSWORD_KUAT
      PAPERLESS_SECRET_KEY: GANTI_DENGAN_SECRET_KEY_ANDA
      PAPERLESS_TIME_ZONE: Asia/Jakarta
      PAPERLESS_OCR_LANGUAGE: eng
      PAPERLESS_ADMIN_USER: admin
      PAPERLESS_ADMIN_PASSWORD: GANTI_DENGAN_PASSWORD_ADMIN
      PAPERLESS_URL: https://dokumen.domainanda.com
    volumes:
      - data:/usr/src/paperless/data
      - media:/usr/src/paperless/media
      - ./consume:/usr/src/paperless/consume

volumes:
  redisdata:
  pgdata:
  data:
  media:

Penjelasan singkat isinya:

  • Port 8000 diikat ke 127.0.0.1 saja — Paperless-ngx tidak terekspos langsung ke internet, melainkan diakses lewat reverse proxy dengan HTTPS.
  • data menyimpan data aplikasi, media menyimpan dokumen asli dan versi arsipnya, consume adalah folder pantau: setiap file yang ditaruh di sana akan diproses otomatis.
  • PAPERLESS_OCR_LANGUAGE di contoh memakai eng untuk dokumen berbahasa Inggris. Sesuaikan dengan bahasa dokumen Anda — Paperless-ngx mendukung banyak bahasa OCR, dan Anda bisa menggabungkan beberapa kode bahasa.
  • PAPERLESS_DBENGINE: postgresql wajib diisi — Paperless 3 tidak lagi menyimpulkannya dari PAPERLESS_DBHOST.
  • Password database di POSTGRES_PASSWORD dan PAPERLESS_DBPASS harus sama persis.

Jalankan dan verifikasi:

docker compose up -d
docker compose ps

Tunggu 2–3 menit pada start pertama selagi image diunduh dan database diinisialisasi. Buka http://127.0.0.1:8000 lewat terowongan SSH untuk sementara (ssh -L 8000:127.0.0.1:8000 user@IP-VPS), lalu login dengan akun admin dari file Compose. Setelah login pertama, ingat: dokumen di sini bisa sangat pribadi, jadi akses dari luar wajib lewat HTTPS (reverse proxy atau Tunnel) sebelum Anda mengunggah apa pun yang sensitif.

Tiga cara memasukkan dokumen

1. Lewat folder consume. Taruh file ke folder ./consume di server — lewat scp, rsync, atau folder yang tersinkron dari HP — dan Paperless-ngx akan mengambilnya sendiri, menjalankan OCR, lalu memindahkannya ke arsip. Ini jalur paling enak untuk hasil scan massal: pindai segepok dokumen, salin semuanya sekaligus, biarkan antrean bekerja.

2. Lewat upload di web. Buka dashboard, seret file ke area upload. Cocok untuk satu-dua dokumen yang datang lewat email atau unduhan.

3. Lewat email. Paperless-ngx bisa mengambil lampiran dari kotak email lewat IMAP. Jalur ini berguna kalau tagihan dan laporan rutin datang lewat email — tapi siapkan akun email khusus untuk ini, jangan memakai akun email utama Anda.

Setelah dokumen masuk, Paperless-ngx menjalankan OCR dengan Tesseract secara lokal (tidak dikirim ke layanan cloud), menyimpan dokumen asli plus versi PDF yang bisa dicari, lalu mengindeks teksnya.





Tag otomatis: dari tumpukan menjadi sistem

Mengarsipkan saja belum cukup — tanpa struktur, Anda hanya memindahkan kekacauan dari folder ke aplikasi. Paperless-ngx punya tiga alat untuk ini:

  • Correspondent (pengirim): siapa yang mengeluarkan dokumen — bank, perusahaan listrik, kantor pajak. Setelah Anda menandai beberapa dokumen dari pengirim yang sama, Paperless-ngx bisa memprediksi pengirim dokumen baru.
  • Document type (jenis dokumen): kwitansi, kontrak, tagihan, laporan. Sama seperti correspondent, prediksinya membaik setelah Anda memberi cukup contoh.
  • Tag dan aturan pencocokan (matching): Anda bisa membuat aturan seperti "kalau teks dokumen mengandung nama perusahaan listrik, beri tag Listrik". Aturan ini yang mengubah arsip dari sekadar tempat simpan menjadi sistem yang merapikan sendiri.

Yang terbukti bekerja di lapangan: jangan membuat 50 tag di hari pertama. Mulai dengan correspondent untuk 5–10 pengirim tersering, satu tag per kategori besar (Keuangan, Pajak, Rumah, Kesehatan), lalu tambahkan aturan pencocokan secara bertahap saat polanya terlihat. Prediksi otomatis Paperless-ngx baru bisa diandalkan setelah belasan dokumen sejenis sudah ditandai — di awal, koreksi manual adalah bagian dari proses, bukan kegagalan.

Fitur lain yang layak dipakai sejak awal adalah saved views (tampilan tersimpan): misalnya satu tampilan untuk "tagihan belum dibayar" atau "dokumen pajak tahun berjalan". Ini menghemat pencarian berulang untuk hal yang sama.

Paperless-ngx vs folder vs layanan arsip berbayar

AspekPaperless-ngxFolder / Drive biasaLayanan arsip berbayar
Pencarian isi dokumenYa, OCR lokalHanya nama file (umumnya)Ya
Tag dan aturan otomatisYaManualYa, bervariasi
BiayaGratis, hanya sewa serverGratis sampai batas storageLangganan bulanan
Privasi dokumenData di server AndaTergantung penyediaData di penyedia
Yang mengurus serverAndaPenyediaPenyedia

Paperless-ngx menang di pencarian dan privasi dengan biaya minimal, tapi Anda yang memegang tanggung jawab backup dan keamanan — sama seperti semua layanan self-host lainnya.

Backup: tiga hal yang harus selamat

Arsip dokumen adalah salah satu data yang paling menyakitkan kalau hilang, karena sebagian dokumen tidak bisa dibuat ulang. Cadangkan ketiganya:

  1. Volume media — dokumen asli dan versi arsipnya.
  2. Volume data — data aplikasi Paperless-ngx.
  3. Database Postgres — metadata, tag, dan aturan. Dump dari container database:
docker exec -t paperless_db pg_dumpall -U paperless > /opt/paperless/backup-$(date +%F).sql

Lalu salin volume media, volume data, dump SQL, dan file docker-compose.yml (simpan password di tempat terpisah yang aman) ke lokasi lain, minimal VPS lain atau storage cloud. Jadwalkan tiap malam. Dan seperti biasa: uji restore sesekali di folder terpisah; backup yang belum pernah diuji restore-nya baru sebatas asumsi.

Cek sebelum selesai

  • Docker dan Docker Compose terpasang, docker compose version jalan.
  • Paperless-ngx up lewat Compose, ketiga container (web, db, broker) berjalan.
  • Login admin berhasil, dan akses dari luar sudah lewat HTTPS (bukan HTTP polos).
  • Satu dokumen uji masuk lewat folder consume, OCR selesai, dan teksnya bisa ditemukan lewat pencarian.
  • Correspondent dan tag dasar sudah dibuat untuk pengirim tersering.
  • Volume media, data, dan dump database masuk dalam jadwal backup.

Kalau semua checklist ini centang, arsip Anda sudah bekerja sendiri: dokumen masuk, dibaca, diberi label, dan muncul saat dicari — tanpa biaya langganan dan tanpa dokumen Anda berkeliaran di server orang lain.

Dokumen apa yang paling sering Anda cari tapi tidak ketemu?

Baca juga: Docker Volume dan Backup: Jangan Sampai Data Hilang, Backup VPS Otomatis dan Terenkripsi ke Google Drive, Membaca Log Server dengan journalctl dan logrotate.



Komentar