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.1saja — Paperless-ngx tidak terekspos langsung ke internet, melainkan diakses lewat reverse proxy dengan HTTPS. datamenyimpan data aplikasi,mediamenyimpan dokumen asli dan versi arsipnya,consumeadalah folder pantau: setiap file yang ditaruh di sana akan diproses otomatis.PAPERLESS_OCR_LANGUAGEdi contoh memakaienguntuk dokumen berbahasa Inggris. Sesuaikan dengan bahasa dokumen Anda — Paperless-ngx mendukung banyak bahasa OCR, dan Anda bisa menggabungkan beberapa kode bahasa.PAPERLESS_DBENGINE: postgresqlwajib diisi — Paperless 3 tidak lagi menyimpulkannya dariPAPERLESS_DBHOST.- Password database di
POSTGRES_PASSWORDdanPAPERLESS_DBPASSharus 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
| Aspek | Paperless-ngx | Folder / Drive biasa | Layanan arsip berbayar |
|---|---|---|---|
| Pencarian isi dokumen | Ya, OCR lokal | Hanya nama file (umumnya) | Ya |
| Tag dan aturan otomatis | Ya | Manual | Ya, bervariasi |
| Biaya | Gratis, hanya sewa server | Gratis sampai batas storage | Langganan bulanan |
| Privasi dokumen | Data di server Anda | Tergantung penyedia | Data di penyedia |
| Yang mengurus server | Anda | Penyedia | Penyedia |
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:
- Volume
media— dokumen asli dan versi arsipnya. - Volume
data— data aplikasi Paperless-ngx. - 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 versionjalan. - 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
Posting Komentar