SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Perbandingan Pembaca RSS Self-hosted untuk VPS Kecil

Bandingkan Miniflux, FreshRSS, CommaFeed, yarr, dan Tiny Tiny RSS: kebutuhan memori, database, dukungan API Fever dan Google Reader, serta perilaku upgrade.

Pembaca RSS self-hosted mana yang cocok untuk VPS kecil

Miniflux adalah pembaca RSS self-hosted yang tepat untuk VPS kecil. Aplikasi ini berupa satu binary Go yang berjalan bersama PostgreSQL. Miniflux mendukung API Fever dan Google Reader, sehingga aplikasi ponsel pihak ketiga dapat terhubung, dan proses upgrade cukup dilakukan dengan satu docker compose pull. Pilih FreshRSS jika Anda menginginkan ekstensi dan satu container yang sudah menyertakan SQLite.

Lima pembaca RSS layak dipasang pada VPS: Miniflux, FreshRSS, CommaFeed, yarr, dan Tiny Tiny RSS. Halaman ini membandingkan perbedaan yang benar-benar relevan: memori yang dibutuhkan setiap stack, database yang diwajibkan masing-masing aplikasi, API sinkronisasi yang dibutuhkan aplikasi ponsel, serta proses yang terjadi saat upgrade. Setiap angka di sini berasal dari publikasi proyek atau perhitungan sederhana, dan teks menjelaskan sumbernya. Tidak ada angka yang merupakan benchmark perangkat keras Anda, jadi ukur server Anda sendiri dengan docker stats.

Lima pembaca, masing-masing satu paragraf

Miniflux ditulis dalam Go dan dirilis sebagai satu binary yang dikompilasi secara statis. Dokumentasinya menjelaskan satu dependensi wajib secara tegas: Miniflux "hanya berfungsi dengan PostgreSQL". Tidak ada mode SQLite. Miniflux menyediakan REST API, API yang kompatibel dengan Fever, dan API yang kompatibel dengan Google Reader, serta impor dan ekspor OPML. Pencarian teks lengkap ditangani oleh PostgreSQL. Hal ini menjadi salah satu alasan database tersebut tidak bersifat opsional.

FreshRSS ditulis dalam PHP dan berjalan sebagai satu container yang memuat web server serta aplikasinya. SQLite adalah database default dan tidak memerlukan service kedua, sedangkan PostgreSQL dan MySQL didukung untuk instalasi yang lebih besar. FreshRSS mendukung Google Reader API dan Fever API. Instalasinya sudah dibahas dalam panduan FreshRSS di VPS kami, sehingga halaman ini membandingkannya tanpa mengulangi langkah instalasi.

CommaFeed ditulis dalam Java di atas Quarkus, dengan tata letak yang meniru Google Reader. Databasenya dipilih saat build, bukan saat runtime. Karena itu, proyek ini merilis satu image untuk setiap database: athou/commafeed:latest-h2 untuk database H2 tertanam, athou/commafeed:latest-postgresql untuk PostgreSQL, serta varian lain untuk MySQL dan MariaDB. CommaFeed menyediakan REST API dan API yang kompatibel dengan Fever.

yarr (yet another rss reader) adalah satu binary Go dengan SQLite tertanam dan tidak memerlukan container. ./yarr tanpa opsi tambahan mendengarkan pada 127.0.0.1:7070. Flag-nya singkat: -addr 0.0.0.0:7070 -auth alice:secret membuatnya dapat diakses dari jaringan dengan perlindungan password, sedangkan -db /data/yarr.db menentukan lokasi database. yarr menyediakan API yang kompatibel dengan Fever. Rilis bertag terbarunya adalah v2.8, dari July 2024, diperiksa pada August 2026. Karena itu, anggap yarr sebagai software yang sudah selesai, bukan software yang masih aktif dikembangkan.

Tiny Tiny RSS adalah yang tertua dari lima pembaca ini dan paling berat untuk dijalankan. Konfigurasi Docker resminya terdiri atas empat service: container PostgreSQL, container aplikasi PHP-FPM, container updater terpisah yang mengambil feed, dan container nginx di bagian depan. Dokumentasinya menyatakan dengan jelas bahwa "konfigurasi ini menggunakan PostgreSQL". Tiny Tiny RSS memiliki JSON API sendiri, yang digunakan oleh client Android dan beberapa aplikasi pihak ketiga. Fever tidak didukung.

Kebutuhan memori setiap stack

Angka di bawah ini adalah anggaran, bukan hasil pengukuran: batas memori yang harus dipatuhi setiap stack pada VPS kecil. Angka CommaFeed berasal dari contoh resmi yang dipublikasikan proyek tersebut, yang membatasi container hingga 256 MB. Angka lainnya adalah batas yang masih menyisakan ruang untuk feed fetcher, yaitu komponen yang penggunaan memorinya melonjak saat siklus refresh dimulai.

ChartMemory ceiling per reader stack, in MB
The data behind this chart
[
  {
    "label": "yarr (SQLite)",
    "containers": 1,
    "mem_limit_mb": 128
  },
  {
    "label": "FreshRSS (SQLite)",
    "containers": 1,
    "mem_limit_mb": 256
  },
  {
    "label": "CommaFeed (H2)",
    "containers": 1,
    "mem_limit_mb": 256
  },
  {
    "label": "Miniflux + Postgres",
    "containers": 2,
    "mem_limit_mb": 320
  },
  {
    "label": "Tiny Tiny RSS",
    "containers": 4,
    "mem_limit_mb": 640
  }
]

yarr memiliki kebutuhan terendah, yaitu 128 MB, karena hanya terdiri dari satu binary dan satu file SQLite, tanpa database server dan language runtime di bawahnya. Miniflux membutuhkan 320 MB untuk 2 container, dan sebagian besar memori tersebut digunakan PostgreSQL, bukan Miniflux. Tiny Tiny RSS merupakan pengecualian dengan kebutuhan 640** MB untuk 4 container, karena aplikasi, updater, database, dan web server berjalan sebagai empat proses terpisah dengan heap masing-masing.

Tetapkan angka ini sebagai batas nyata, bukan sekadar harapan. Batas memori di Docker Compose membahas sintaks dan perilaku container saat mencapai batas tersebut. Container tanpa batas tidak berhenti dengan baik ketika host kehabisan memori: kernel memilih satu proses lalu menghentikannya, dan proses yang dihentikan sering kali bukan proses dari container yang menyebabkan tekanan memori.

Database yang dipaksakan oleh setiap aplikasi

Database merupakan perbedaan operasional terbesar di antara kelima aplikasi ini. Ini adalah keputusan yang lebih besar daripada perbedaan apa pun pada antarmuka pengguna, karena database menentukan prosedur pencadangan dan risiko upgrade.

Miniflux dan setup Tiny Tiny RSS resmi memerlukan PostgreSQL. PostgreSQL menyediakan pencarian teks lengkap yang sesungguhnya dan penulisan konkuren yang aman. Konsekuensinya adalah satu container tambahan, satu volume, dan satu masalah berulang: image PostgreSQL resmi tidak dapat memigrasikan data antarversi mayor secara langsung. Dokumentasi Tiny Tiny RSS menyatakannya secara langsung dan memperingatkan bahwa "container PostgreSQL resmi tidak mendukung migrasi data antarversi mayor". Pilihan realistis Anda adalah mempertahankan versi mayor lama, atau melakukan dump dan restore dengan pg_dump dan pg_restore. Rencanakan proses ini setiap satu atau dua tahun.

SQLite adalah default FreshRSS dan yarr. Hanya satu file, tanpa server, tanpa port, dan tanpa password. SQLite bekerja baik untuk satu orang dengan beberapa ratus feed. Kinerjanya menurun ketika beberapa pengguna menulis secara bersamaan. Pada kondisi tersebut, opsi PostgreSQL pada FreshRSS mulai memberikan manfaat. yarr menambahkan dukungan PostgreSQL opsional pada v2.7, tetapi file bawaan adalah cara yang umum untuk menjalankannya.

H2 adalah default tertanam CommaFeed. Database ini perlu dipertimbangkan sebelum Anda memulai, karena CommaFeed memilih databasenya saat image dibuat. Memindahkan H2 ke PostgreSQL nantinya bukan perubahan konfigurasi. Anda memerlukan image yang berbeda serta migrasi data yang harus dilakukan sendiri. Karena itu, tentukan pilihannya sebelum riwayat baca selama satu tahun tersimpan di server.

Apakah aplikasi ponsel Anda akan berfungsi

Pertanyaan ini menentukan lebih banyak hal daripada yang diperkirakan, karena antarmuka web hanya mencakup separuh cara feed reader digunakan.

Miniflux menyediakan API yang kompatibel dengan Fever dan API yang kompatibel dengan Google Reader, sehingga sebagian besar client iOS dan Android dapat terhubung ke Miniflux. FreshRSS menyediakan dua API yang sama. Dokumentasinya mengurutkan keduanya: Google Reader API adalah pilihan "terbaik" dengan dukungan fitur penuh, sedangkan Fever API memiliki perilaku dengan "fitur terbatas dan kurang efisien". FreshRSS juga memerlukan dua langkah sebelum aplikasi apa pun dapat login. Aktifkan "Allow API access (required for mobile apps)" di bagian Authentication, lalu buat kata sandi API pada profil pengguna. Jika kata sandi API tidak dibuat, aplikasi akan mengalami kegagalan autentikasi, sementara login melalui web tetap berfungsi. Hal ini membingungkan sampai Anda mengetahui tempat pemeriksaannya.

CommaFeed dan yarr hanya menyediakan API yang kompatibel dengan Fever. Keduanya berfungsi dengan client yang mendukung Fever, tetapi tidak dengan aplikasi yang hanya mendukung Google Reader. Sebaliknya, Tiny Tiny RSS memiliki API sendiri. Karena itu, Anda memerlukan client yang dibuat untuk Tiny Tiny RSS. Pastikan aplikasi pilihan Anda mendukung reader tersebut sebelum mengimpor 300 feed ke dalamnya.

File compose yang berfungsi untuk server dengan RAM 1 GB

Ini adalah stack Miniflux yang diadaptasi dari contoh Docker resmi proyek tersebut per Agustus 2026. Port yang dipublikasikan diikat ke loopback, alamat listen ditetapkan secara eksplisit, dan kedua container memiliki batas memori.

services:
  miniflux:
    image: miniflux/miniflux:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    depends_on:
      db:
        condition: service_healthy
    environment:
      - DATABASE_URL=postgres://miniflux:CHANGE_ME@db/miniflux?sslmode=disable
      - LISTEN_ADDR=0.0.0.0:8080
      - BASE_URL=https://rss.example.com/
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=CHANGE_ME_TOO
      - POLLING_FREQUENCY=60
    healthcheck:
      test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
    mem_limit: 128m
  db:
    image: postgres:18
    restart: unless-stopped
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=CHANGE_ME
      - POSTGRES_DB=miniflux
    volumes:
      - miniflux-db:/var/lib/postgresql
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "miniflux"]
      interval: 10s
      start_period: 30s
    mem_limit: 192m
volumes:
  miniflux-db:

Tiga baris dalam file tersebut sering salah dikonfigurasi. LISTEN_ADDR=0.0.0.0:8080 ditetapkan karena nilai default yang didokumentasikan untuk binary tersebut adalah 127.0.0.1:8080. Proses yang diikat ke loopback di dalam container tidak dapat diakses melalui port yang dipublikasikan. Akibatnya, koneksi di-reset meskipun container terlihat sehat. Path volume /var/lib/postgresql sesuai dengan PostgreSQL 18. PostgreSQL versi 17 dan sebelumnya menyimpan data di /var/lib/postgresql/data. Jika path yang dipasang salah, direktori data tidak berada di volume sama sekali. Akibatnya, semua data hilang saat container dibuat ulang. 127.0.0.1:8080:8080 menjaga port agar tidak dapat diakses dari Internet publik. Tanpa alamat, publikasi port menambahkan aturan ke chain yang tidak dikelola oleh ufw. Port Docker melewati ufw menjelaskan mekanisme tersebut, sedangkan reverse proxy Traefik digunakan untuk menempatkan TLS di depannya.

docker compose up -d
docker compose ps
docker compose logs -f miniflux
docker stats --no-stream

docker compose ps harus menampilkan kedua service sebagai berjalan, dengan database berstatus healthy. Saat pertama kali dijalankan, Miniflux mencatat migrasi skemanya di log. Migrasi tersebut dipicu oleh RUN_MIGRATIONS=1. docker stats --no-stream menampilkan kolom memori aktual. Bandingkan angka tersebut dengan batas pada tabel di atas. Jika container Miniflux terus-menerus restart, baca log-nya. connect: connection refused berarti Miniflux berjalan sebelum PostgreSQL siap menerima koneksi. Kondisi ini dicegah oleh kondisi service_healthy. Jadi, pastikan kondisi tersebut tetap ada setelah Anda mengedit file. Jika Compose masih baru bagi Anda, Dasar-dasar Docker Compose pada VPS menjelaskan struktur file terlebih dahulu.

Komponen yang tidak akan muat pada server 1 GB

Tiny Tiny RSS adalah aplikasi yang sebaiknya dilewati. Stack empat service resminya dapat berjalan pada VPS 1 GB jika VPS tersebut tidak menjalankan hal lain, tetapi tidak dapat berjalan bersama aplikasi lain yang menggunakan database dan reverse proxy. Empat service berarti empat set overhead, dan salah satunya adalah PostgreSQL.

CommaFeed dapat berjalan, tetapi hanya dengan image H2 dan batas 256 MB yang ditetapkan dalam contoh milik proyek tersebut. Kombinasi yang membebani server kecil adalah JVM yang berjalan bersama server database terpisah, karena JVM akan menggunakan ruang memori tersisa yang Anda sediakan. Dokumentasi CommaFeed menyebut -Xmx256m sebagai batas keras dan OpenJ9 sebagai "a more memory-efficient alternative to the HotSpot JVM", yang menunjukkan ke mana memori digunakan.

Saat server kehabisan memori, out-of-memory killer pada kernel memilih sebuah proses lalu menghentikannya. dmesg -T menampilkan baris seperti Out of memory: Killed process 1234 (java), dan container tersebut langsung menghilang dari docker compose ps tanpa pesan pada log aplikasi karena aplikasi tidak pernah sempat menulis pesan.

Perilaku upgrade pada masing-masing aplikasi

  • Miniflux: docker compose pull && docker compose up -d, dengan migrasi skema yang diterapkan saat start ketika RUN_MIGRATIONS=1 ditetapkan. Risiko upgrade bukan berasal dari Miniflux. Risiko tersebut berasal dari versi mayor PostgreSQL yang mendasarinya.
  • FreshRSS: tarik image baru. Dengan SQLite, tidak ada engine database yang perlu di-upgrade, sehingga masalah yang biasanya muncul berasal dari ekstensi pihak ketiga yang belum diperbarui.
  • CommaFeed: tarik varian image yang sesuai dengan database Anda. Beralih dari latest-h2 ke latest-postgresql tidak memindahkan data Anda.
  • yarr: ganti binary dan pertahankan file database. Karena tidak ada rilis sejak v2.8 pada July 2024, berdasarkan pemeriksaan pada August 2026, biasanya tidak ada yang perlu di-upgrade.
  • Tiny Tiny RSS: docker compose pull && docker compose up -d. Migrasi skema berjalan otomatis, dan antarmuka mengarahkan Anda ke layar migrasi jika diperlukan konfirmasi.

Buat dump database sebelum melakukan salah satu upgrade ini, bukan setelahnya.

docker compose exec -T db pg_dump -U miniflux miniflux | gzip > miniflux-$(date +%F).sql.gz

Biaya bandwidth berdasarkan interval refresh

Angka di bawah ini adalah hasil perhitungan, bukan hasil pengukuran. Perhitungan ini mengasumsikan 100 feed, satu request per feed pada setiap interval, dan 40 KB per response. Trafik aktual biasanya lebih rendah jika server mematuhi conditional request, dan lebih tinggi jika feed memuat teks artikel lengkap.

ChartMonthly fetches and bandwidth for 100 feeds at 40 KB per response
The data behind this chart
[
  {
    "label": "Every 5 minutes",
    "fetches_per_month": "864,000",
    "gb_per_month": 34.6
  },
  {
    "label": "Every 15 minutes",
    "fetches_per_month": "288,000",
    "gb_per_month": 11.5
  },
  {
    "label": "Every 30 minutes",
    "fetches_per_month": "144,000",
    "gb_per_month": 5.8
  },
  {
    "label": "Every 60 minutes",
    "fetches_per_month": "72,000",
    "gb_per_month": 2.9
  }
]

Interval lima menit pada 100 feed menghasilkan 864,000 request dan sekitar 34.6 GB per bulan. Polling setiap jam menghasilkan 72,000 request dan sekitar 2.9 GB. Miniflux menggunakan POLLING_FREQUENCY selama 60 menit secara default, yang merupakan baris terakhir pada grafik tersebut, dan nilai default ini tepat untuk hampir semua orang. Artikel tidak akan tersedia lebih cepat hanya karena Anda memintanya lebih sering.

Conditional request menjaga angka aktual tetap di bawah hasil perhitungan. Reader yang menyimpan header ETag dan Last-Modified yang dikembalikan oleh feed akan mengirimkannya kembali sebagai If-None-Match dan If-Modified-Since, lalu server yang tidak memiliki konten baru akan menjawab 304 Not Modified tanpa body. Koneksi tetap memerlukan handshake, tetapi tidak memerlukan payload. Feed yang mengabaikan conditional request akan mengirimkan seluruh dokumen setiap kali, sehingga beberapa feed berukuran besar dapat mendominasi biaya transfer Anda.

Polling terlalu sering juga dapat menyebabkan Anda diblokir. Server yang memutuskan bahwa Anda mengirim terlalu banyak request akan membalas 429 Too Many Requests, dan beberapa situs akan membalas 403 sebagai gantinya. Miniflux mencatat error terakhir pada feed itu sendiri, sehingga daftar feed adalah tempat pertama yang perlu diperiksa ketika satu feed berhenti diperbarui sementara feed lainnya tetap berfungsi.

Feed mati, dan file OPML bukan cadangan

Feed berhenti berfungsi lebih cepat dari perkiraan Anda. Domain kedaluwarsa, situs berpindah ke platform yang tidak menyediakan feed, dan URL yang sebelumnya menyajikan XML mulai menyajikan halaman error HTML dengan status 200 OK. Kasus terakhir adalah yang paling sulit: pengambilan berhasil, penguraian gagal, dan pembaca Anda mencatat error penguraian, bukan error jaringan. Setahun sekali, urutkan daftar feed berdasarkan waktu pembaruan terakhir, lalu hapus feed yang sudah lama tidak aktif.

Ekspor OPML adalah daftar langganan Anda. File ini menyimpan URL feed dan nama folder. File ini tidak menyimpan status baca, artikel berbintang, pengaturan per feed, aturan filter, atau teks artikel yang Anda simpan. Jika OPML tersebut diimpor ke instalasi baru, feed Anda akan kembali, tetapi semua artikel yang pernah Anda baca akan kembali ditandai belum dibaca.

Cadangan yang penting adalah database. Untuk PostgreSQL, perintah pg_dump di atas sudah mencakup seluruh proses. Untuk pembaca SQLite seperti FreshRSS atau yarr, hentikan proses yang menulis lalu salin file tersebut, atau buat salinan konsisten saat proses berjalan menggunakan sqlite3 yarr.db ".backup '/tmp/yarr-backup.db'". Menjalankan cp biasa pada database yang sedang ditulis dapat menghasilkan file yang nantinya tidak dapat dibuka karena salinan tersebut menangkap proses penulisan yang belum selesai. Selanjutnya, kirim file-file tersebut ke luar server secara terjadwal. Itulah kegunaan cadangan restic pada VPS. Pulihkan salah satunya ke container sementara setidaknya sekali agar Anda mengetahui bahwa prosedurnya berfungsi.

Pembaca feed adalah salah satu service yang paling murah untuk dijalankan sendiri. Karena itu, service ini muncul dalam setiap daftar hal yang layak di-self-host pada 2026. Tempatkan instance SearXNG yang di-self-host di sebelahnya agar aktivitas membaca dan pencarian Anda tetap berjalan pada perangkat keras yang Anda kendalikan.

FAQ

Pembaca RSS self-hosted mana yang menggunakan memori paling sedikit?

yarr. Aplikasi ini berupa satu binary Go dengan SQLite yang sudah dikompilasi di dalamnya, sehingga tidak memerlukan server database atau runtime bahasa pemrograman lain. Batas 128 MB masih mencukupi. Konsekuensinya adalah pemeliharaan dan fitur yang lebih terbatas: rilis terbarunya adalah v2.8 pada July 2024, dan aplikasi ini hanya mendukung Fever API. Jika Anda menginginkan proyek yang masih aktif dikembangkan dengan penggunaan resource serupa, Miniflux plus PostgreSQL pada 320 MB adalah pilihan yang lebih baik.

Apakah saya dapat menjalankan pembaca RSS self-hosted pada VPS 1 GB?

Ya. Miniflux dengan PostgreSQL dapat berjalan dalam sekitar 320 MB jika Anda menetapkan mem_limit pada kedua container, sedangkan FreshRSS dengan SQLite dapat berjalan dalam satu container. Yang perlu dihindari pada VPS 1 GB adalah stack Tiny Tiny RSS resmi, yang terdiri atas 4 service termasuk PostgreSQL miliknya sendiri. Selalu tetapkan batas memori. Container tanpa batas memori pada server yang penuh dapat menyebabkan kernel menghentikan sebuah proses, dan proses yang dipilih sering kali adalah database, bukan aplikasi yang bermasalah.

Mana yang kompatibel dengan aplikasi RSS iOS dan Android?

Miniflux dan FreshRSS mendukung Fever API yang kompatibel serta Google Reader API yang kompatibel, sehingga hampir semua client mobile dapat terhubung. CommaFeed dan yarr hanya menyediakan Fever API. Tiny Tiny RSS menggunakan API sendiri, sehingga Anda memerlukan client yang dibuat khusus untuknya. Pada FreshRSS, Anda juga harus mengaktifkan akses API di bagian Authentication dan menetapkan password API terpisah pada profile. Jika tidak, aplikasi gagal login, meskipun website tetap dapat digunakan.

Apakah ekspor OPML merupakan backup pembaca RSS saya?

Tidak. OPML menyimpan URL feed dan folder, sehingga hanya dapat membangun ulang daftar subscription Anda. Status baca, item yang diberi bintang, aturan filter, dan teks artikel tersimpan di database. Backup database itu sendiri menggunakan pg_dump untuk PostgreSQL atau perintah .backup untuk SQLite, lalu salin hasilnya ke luar server.

Apakah Miniflux mendukung SQLite?

Tidak. Dokumentasi proyek menyatakan bahwa aplikasi ini "works only with PostgreSQL". Pencarian teks lengkap juga diimplementasikan menggunakan fitur PostgreSQL, sehingga tidak ada mode yang lebih ringan untuk digunakan. Jika Anda menginginkan pembaca feed tanpa container database, jalankan FreshRSS dengan backend SQLite default atau yarr dengan file embedded.