Alternatif Open WebUI Terbaik untuk VPS
Bandingkan Open WebUI, LibreChat, Hollama, dan OrionChat di VPS ber-IP publik: RAM tersisa untuk model, login, Ollama jarak jauh, dan pemeliharaan.
Alternatif Open WebUI yang tepat untuk VPS
Alternatif Open WebUI hampir selalu dibandingkan pada laptop, saat RAM murah dan tidak ada layanan yang listen pada alamat publik. VPS mengubah kedua kondisi tersebut, sehingga urutannya juga berubah. Open WebUI tetap menjadi pilihan default yang tepat ketika orang kedua mulai login, karena menyediakan akun pengguna dan panel admin yang lengkap. Proyek yang lebih ringan unggul ketika antarmuka harus berbagi gigabyte RAM terakhir dengan model. Konsekuensi dari keunggulan tersebut adalah autentikasi: proyek-proyek itu tidak menyediakannya.
Semua informasi di bawah ini berasal dari dokumentasi masing-masing proyek, yang dibaca pada Agustus 2026. Keempat aspek tersebut baru terlihat setelah server dapat dijangkau dari internet.
Empat aspek yang hanya penting pada IP publik
- Memori yang digunakan bersama model. Server model adalah proses paling mahal pada mesin. Setiap megabita yang digunakan antarmuka mengurangi memori yang tersedia untuk model.
- Autentikasi. Sebagian proyek ini menyediakan akun pengguna dan peran. Proyek lain mengasumsikan bahwa proyek tersebut adalah satu-satunya aplikasi yang berjalan pada laptop Anda, sehingga tidak menyediakan login sama sekali.
- Inferensi jarak jauh. UI yang hanya dapat menjangkau
127.0.0.1:11434mengharuskan model berjalan pada mesin yang sama dengan antarmuka. - Pemeliharaan. Satu container dengan file SQLite memerlukan pengelolaan yang berbeda dari enam container dengan MongoDB dan database vektor di belakangnya.
Berapa banyak RAM yang tersisa untuk antarmuka
Antarmuka bukan komponen terbesar di server. Model-lah yang terbesar. Ukuran unduhan yang dipublikasikan menjadi batas bawah, karena bobot model harus tetap berada di memori saat model memberikan jawaban. Penggunaan memori sebenarnya lebih tinggi daripada ukuran unduhan setelah cache konteks dialokasikan.
The data behind this chart
[
{
"label": "llama3.2:3b",
"download_gb": "2.0"
},
{
"label": "qwen3:4b",
"download_gb": "2.5"
},
{
"label": "gemma3:4b",
"download_gb": "3.3"
},
{
"label": "qwen3:8b",
"download_gb": "5.2"
}
]Itulah angka yang tercantum pada halaman library Ollama pada Agustus 2026. Angka tersebut adalah ukuran yang dipublikasikan, bukan hasil pengukuran. Pada VPS 4 GB, qwen3:4b berukuran 2.5 GB menyisakan kurang dari 1.5 GB untuk sistem operasi dan komponen lain. Cache konteks juga mengurangi sisa tersebut seiring bertambahnya panjang percakapan. Karena itu, nilai num_ctx yang Anda tetapkan merupakan keputusan terkait memori sekaligus kualitas. qwen3:8b berukuran 5.2 GB sama sekali tidak muat pada server tersebut. Ringkasan perbandingan laptop tidak pernah membahas situasi ini. Padahal, pada kondisi inilah antarmuka chat yang menggunakan beberapa ratus megabyte dapat menentukan apakah model bisa berjalan. Jika Anda menyiapkan server untuk model yang jauh lebih besar daripada tag tersebut, perhitungan untuk model 27B pada VPS yang hanya menggunakan CPU menunjukkan betapa cepatnya antarmuka berhenti menjadi faktor penentu.
Lakukan pengukuran, bukan mengandalkan angka apa pun dalam ringkasan perbandingan, termasuk angka dalam artikel ini. Jalankan docker stats --no-stream setelah penggunaan nyata selama satu jam, bukan satu menit setelah container dimulai, karena memori yang relevan dialokasikan saat pertama kali digunakan. Ollama juga melepaskan bobot model setelah tidak aktif selama lima menit. Karena itu, pembacaan yang dilakukan di antara percakapan akan meremehkan penggunaan puncak. Pesan berikutnya harus memuat seluruh model kembali, kecuali Anda mempertahankan model di memori dengan keep_alive.
Open WebUI: masih menggunakan konfigurasi default untuk lebih dari satu pengguna
Open WebUI berjalan dari satu image dan menyimpan datanya dalam satu volume.
docker run -d -p 127.0.0.1:3000:8080 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:mainPerintah dalam README proyek memublikasikan -p 3000:8080, yang listen pada semua interface. Prefix 127.0.0.1: membatasinya ke loopback. Pada VPS, prefix tersebut lebih penting daripada bagian lain pada baris itu karena Docker menulis aturan iptables sendiri dan port yang dipublikasikan mengabaikan aturan deny ufw Anda.
Akses halaman tersebut melalui tunnel atau proxy, yang keduanya dijelaskan di bawah, lalu buat akun pertama. Akun tersebut menjadi administrator. Pendaftaran berikutnya dibuat dengan role pending, yaitu default yang didokumentasikan pada DEFAULT_USER_ROLE. Dengan demikian, orang asing yang berhasil mengakses halaman tersebut tetap tidak dapat menggunakan model Anda sampai admin menyetujuinya.
Open WebUI menggunakan lebih banyak memori daripada proyek-proyek di bawah karena fiturnya lebih banyak. Halaman performanya sendiri menjelaskan komponen yang menyebabkan penggunaan tersebut. Embedding engine default memuat model sentence-transformers di dalam container, dengan penggunaan yang didokumentasikan sekitar 500 MB untuk setiap proses worker. Dengan menetapkan RAG_EMBEDDING_ENGINE=ollama, tugas tersebut dialihkan ke model server yang sudah Anda jalankan. AUDIO_STT_ENGINE=webapi mencegah pemuatan model speech-to-text lokal. Pada SQLite ketika DATABASE_POOL_SIZE tidak ditetapkan, pool menggunakan ukuran internal yang besar sebagai fallback. Setiap koneksi kemudian membuat page cache dan memory map sendiri. Karena itu, pada mesin kecil tetapkan DATABASE_POOL_SIZE=8 dan DATABASE_SQLITE_PRAGMA_MMAP_SIZE=0. ENABLE_AUTOCOMPLETE_GENERATION=False menghentikan interface agar tidak meminta completion kepada model saat pengguna masih mengetik.
LibreChat: multi-user, dengan stack di belakangnya
git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat
cp .env.example .env
docker compose up -dAntarmuka tersedia pada port 3080. LibreChat cocok digunakan saat Anda memerlukan sistem identitas, bukan sekadar kotak login: dokumentasinya mencakup login LDAP dan OAuth2, serta menyediakan panel admin untuk pengguna dan peran. Kemampuan tersebut memerlukan sebuah stack.
The data behind this chart
[
{
"label": "OrionChat",
"containers": 0,
"notes": "static files, served by a web server you already run"
},
{
"label": "Hollama",
"containers": 1,
"notes": "one container serving a browser app"
},
{
"label": "Open WebUI",
"containers": 1,
"notes": "application and SQLite in one image"
},
{
"label": "LibreChat",
"containers": 6,
"notes": "api, admin panel, MongoDB, Meilisearch, pgvector, RAG API"
}
]File compose default menjalankan 6 service: api, admin panel, MongoDB, Meilisearch, pgvector, RAG API. Tidak satu pun dari service tersebut merupakan model. MongoDB dan pgvector masing-masing memerlukan memori sendiri, dan pada mesin dengan RAM 4 GB, memori itu akan mengurangi memori yang diperlukan model.
Upgrade dilakukan melalui operasi git. Bagian inilah yang sering salah.
docker compose down
git pull
docker compose pull
docker compose up -dgit pull berhenti dengan konflik jika Anda mengubah docker-compose.yml yang dilacak, lalu proses upgrade hanya diterapkan sebagian. Simpan perubahan Anda di docker-compose.override.yml, yang disediakan proyek untuk tujuan ini, dan simpan secret di .env. Kedua file tersebut tidak dilacak, sehingga git pull tidak akan mengubahnya.
Arahkan LibreChat ke server model Anda sendiri dengan endpoint khusus di librechat.yaml.
endpoints:
custom:
- name: "Ollama"
apiKey: "ollama"
baseURL: "http://model-host:11434/v1/"
models:
default: ["llama3.2"]
fetch: true
titleConvo: true
titleModel: "current_model"
modelDisplayLabel: "Ollama"Ganti model-host dengan alamat mesin yang menjalankan Ollama. Field apiKey harus tetap ada meskipun Ollama mengabaikan nilainya, sehingga placeholder dapat digunakan. Jika LibreChat berjalan di Docker dan Ollama berjalan pada mesin yang sama, localhost di dalam container berarti container itu sendiri. Karena itu, gunakan host.docker.internal sebagai gantinya.
Hollama dan OrionChat: browser yang menjalankan prosesnya
Hollama menyajikan aplikasi browser dari satu container kecil. Percakapan disimpan di storage browser, bukan di server.
docker run -d --restart unless-stopped -p 127.0.0.1:4173:4173 --name hollama ghcr.io/fmaclen/hollama:latestVersi perintah dalam README menggunakan --rm, yang menghapus container saat container berhenti. Akibatnya, antarmuka tidak kembali setelah reboot. Di balik reverse proxy, tambahkan -e VITE_ALLOWED_HOSTS='chat.example.com' karena image hanya mengizinkan host localhost. Untuk hostname lain, image mengembalikan error blocked-host, bukan aplikasi.
OrionChat melangkah lebih jauh dan sama sekali tidak memiliki komponen server. Clone repository tersebut, lalu sajikan foldernya dengan web server yang sudah Anda jalankan, atau buka index.html dari disk. API key disimpan di localStorage milik browser, riwayat percakapan tetap berada di browser, dan aplikasi menghapus percakapan terlama setelah jumlahnya melebihi 512.
Kedua project tidak memiliki login karena tidak ada server yang dapat memeriksanya. Pada laptop, hal ini tidak masalah. Pada VPS, halaman tersebut tidak boleh dipublikasikan di 0.0.0.0. Ada hal lain yang lebih mudah terlewat: browser memanggil model, bukan server.
Fakta tersebut menentukan tempat kedua aplikasi ini dapat digunakan. Browser Anda harus dapat menjangkau Ollama secara langsung. Karena itu, Ollama harus listen pada alamat selain loopback, dan Ollama tidak memiliki autentikasi apa pun. Dua aturan browser berlaku. Halaman yang disajikan melalui HTTPS tidak dapat memanggil endpoint HTTP biasa, dan console menampilkan Mixed Content: The page at 'https://chat.example.com/' was loaded over HTTPS, but requested an insecure resource 'http://203.0.113.10:11434/api/tags'. This request has been blocked.. Panggilan ke origin lain ditolak dengan has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource sampai Anda mengizinkan origin tersebut.
Cara yang didokumentasikan Ollama untuk mengubah salah satu pengaturan tersebut adalah dengan systemd override.
sudo systemctl edit ollama.service[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=https://chat.example.com"sudo systemctl daemon-reload
sudo systemctl restart ollama
sudo ss -lntp | grep 11434ss sekarang seharusnya menampilkan 0.0.0.0:11434, yang sebelumnya menampilkan 127.0.0.1:11434. Lakukan perubahan ini hanya jika firewall atau proxy yang menyediakan autentikasi sudah mengontrol siapa yang dapat menjangkau port tersebut. Port 11434 yang terbuka berarti model server terbuka, dan mass scanner dapat segera menjangkau port publik baru. SSH tunnel di bawah menghindari seluruh masalah tersebut: halaman berjalan pada origin localhost, yang diizinkan Ollama secara default, dan port tersebut tidak pernah keluar dari mesin.
Apakah masing-masing dapat menggunakan endpoint Ollama atau vLLM jarak jauh
Open WebUI dapat menggunakannya, dan koneksi dibuat di sisi server. OLLAMA_BASE_URL=http://model-host:11434 mengarahkannya ke Ollama. Untuk vLLM atau server lain yang kompatibel dengan OpenAI, tetapkan OPENAI_API_BASE_URL=http://model-host:8000/v1 dengan OPENAI_API_KEY yang tidak kosong, dan pertahankan sufiks /v1 karena sufiks ini wajib digunakan. OPENAI_API_BASE_URLS menerima beberapa backend yang dipisahkan dengan titik koma.
LibreChat dapat menggunakannya melalui baseURL pada endpoint kustom yang ditampilkan di atas. Permintaan tersebut juga keluar dari server, sehingga aturan browser tidak berlaku. URL dasar yang sama dan kunci placeholder yang sama juga dapat digunakan di luar jendela chat. Itu sudah cukup untuk mengarahkan coding agent ke model yang sudah Anda host.
Hollama dan OrionChat dapat diarahkan ke endpoint apa pun yang Anda masukkan dalam pengaturannya, tetapi permintaan keluar dari browser Anda. Semua hal pada bagian di atas berlaku untuk keduanya, dan tidak berlaku untuk hal lain di sini.
Memisahkan antarmuka dari model adalah manfaat utama yang diberikan endpoint jarak jauh. Tempatkan antarmuka pada mesin kecil dan model pada mesin dengan kapasitas memori yang memadai. Pada tahap ini, tentukan juga apakah Ollama atau vLLM yang harus melayani permintaan, karena keduanya berperilaku sangat berbeda ketika beberapa orang menggunakan model secara bersamaan. Jika server model belum tersedia, mulailah dengan menjalankan Ollama pada VPS, dan pada mesin yang hanya menggunakan CPU, baca perbandingan Ollama dengan llama.cpp sebelum memilih runner.
Jangan publikasikan antarmuka chat tanpa login pada 0.0.0.0
Halaman penguatan keamanan Open WebUI menyatakan bahwa proyek ini "dibuat untuk jaringan privat dan tepercaya, seperti infrastruktur self-hosted lainnya, misalnya database, container registry, dan server CI", serta mengarahkan Anda untuk menempatkannya di belakang VPN atau reverse proxy dengan autentikasi. Proyek yang sama sekali tidak memiliki login setidaknya memerlukan perlindungan yang sama.
Periksa apa yang sedang listening sebelum mempercayainya.
sudo ss -lntp | grep -E ':(3000|3080|4173|11434)'Baris yang berisi 127.0.0.1:3000 adalah kondisi yang diinginkan. Baris yang berisi 0.0.0.0:3000 berarti antarmuka chat Anda berada di Internet publik. Dari mesin Anda sendiri, curl -sI http://YOUR.VPS.IP:3000 yang menjawab HTTP/1.1 200 OK menyatakan hal yang sama dengan lebih jelas.
Menonaktifkan login Open WebUI dengan WEBUI_AUTH=False adalah pengaturan untuk satu pengguna pada mesin yang tidak dapat dijangkau orang lain. Pengaturan ini juga tidak dapat diterapkan pada instalasi yang sudah memiliki akun, dengan pesan You can't turn off authentication because there are existing users.
Pola satu: bind ke loopback dan akses melalui SSH. Publikasikan setiap port pada 127.0.0.1, lalu teruskan port yang diperlukan: ssh -N -L 3000:127.0.0.1:3000 you@vps.example.com, dan buka http://localhost:3000 pada laptop Anda. Tidak ada yang dipublikasikan, sehingga tidak ada yang dapat dipindai. Untuk Hollama atau OrionChat, teruskan port model dalam perintah yang sama menggunakan -L 11434:127.0.0.1:11434 dan biarkan Ollama tetap pada loopback. Keamanan pola ini bergantung pada konfigurasi SSH Anda, jadi padukan dengan SSH yang hanya menggunakan key dan sshd yang diperkuat.
Pola dua: reverse proxy yang melakukan autentikasi sebelum aplikasi menerima request. Pertahankan aplikasi pada loopback, biarkan proxy menggunakan port 443, lalu tempatkan single sign-on di depannya. Traefik yang dikonfigurasi melalui label Docker Compose dengan Authentik sebagai identity provider memberikan satu login dan satu sertifikat untuk setiap aplikasi pada server. Jika Open WebUI berada di belakang TLS (transport layer security), tetapkan WEBUI_SESSION_COOKIE_SECURE=true dan WEBUI_SESSION_COOKIE_SAME_SITE=strict. Persingkat juga JWT_EXPIRES_IN dari nilai default empat minggunya, karena dokumentasi Open WebUI menyatakan bahwa tanpa Redis, proses sign-out tidak membatalkan token: token tetap dapat digunakan sampai kedaluwarsa sendiri.
Pola dua tidak menyelesaikan masalah proyek yang hanya mendukung browser. Proxy di depan halaman tidak melindungi endpoint model, dan fetch dari halaman tersebut ke hostname yang berbeda tidak membawa cookie sesi Anda. Akibatnya, proxy autentikasi di depan Ollama menjawab dengan redirect ke formulir login dan chat gagal. Gunakan hostname yang sama untuk endpoint model dan halaman, atau gunakan pola satu.
Yang harus dipilih
Jika aplikasi ini akan digunakan oleh orang lain selain Anda, jalankan Open WebUI. Aplikasi ini menyediakan akun pengguna, menempatkan pengguna baru dalam antrean persetujuan, dan pengelolanya menerbitkan panduan hardening yang dapat Anda ikuti. Jika Anda memerlukan LDAP atau panel admin, jalankan LibreChat, lalu pastikan dengan docker stats bahwa keenam servicenya dan model Anda benar-benar dapat berjalan bersama sebelum mengandalkannya. Jika hanya satu orang yang akan menggunakannya pada server kecil, sementara model sudah menggunakan sebagian besar RAM, sajikan Hollama atau OrionChat melalui tunnel SSH dan biarkan browser menyimpan state. Pilihan yang salah pada VPS adalah mempublikasikan salah satu aplikasi tersebut pada 0.0.0.0 tanpa login di depannya.
FAQ
Apakah Open WebUI aman jika langsung diekspos pada IP publik?
Halaman hardening-nya sendiri menjelaskan bahwa Open WebUI ditujukan untuk jaringan privat dan tepercaya, dalam kategori yang sama dengan database atau server CI. Open WebUI memiliki akun nyata. Akun pertama menjadi administrator, sedangkan akun berikutnya tetap berstatus pending sampai disetujui. Karena itu, Open WebUI jauh lebih aman daripada UI tanpa login. Namun, tetap tempatkan Open WebUI di belakang reverse proxy dengan TLS dan, jika memungkinkan, gunakan single sign-on. Publikasikan port container sebagai 127.0.0.1:3000:8080 agar aturan iptables milik Docker tidak membuka aksesnya ke Internet tanpa sepengetahuan Anda.
Alternatif Open WebUI mana yang menggunakan RAM paling sedikit pada VPS?
Aplikasi berbasis browser, yaitu Hollama dan OrionChat, karena aplikasi berjalan pada client. Server hanya mengirim file statis, dan OrionChat sama sekali tidak memerlukan application container. Open WebUI menjalankan proses Python, database, dan secara default model embedding lokal di memori. Dokumentasinya menyebut penggunaan sekitar 500 MB per worker hanya untuk model embedding. Verifikasi angka tersebut pada server Anda sendiri dengan docker stats --no-stream, karena penggunaan RAM berubah sesuai fitur yang diaktifkan.
Apakah UI chat ini dapat menggunakan server Ollama pada host lain?
Open WebUI dan LibreChat dapat melakukannya, dan koneksi dibuat oleh server masing-masing sehingga aturan browser tidak berlaku. Atur OLLAMA_BASE_URL untuk Open WebUI, atau gunakan baseURL pada custom endpoint untuk LibreChat. Untuk vLLM atau server lain yang kompatibel dengan OpenAI, gunakan OPENAI_API_BASE_URL bersama suffix /v1 dan API key yang tidak kosong. Hollama dan OrionChat juga dapat diarahkan ke host mana pun, tetapi request berasal dari browser Anda. Karena itu, endpoint tersebut juga harus dapat dijangkau dari browser Anda.
Mengapa UI chat pada browser saya tidak dapat menjangkau Ollama?
Hampir semua kasus disebabkan oleh dua hal. Secara default, Ollama melakukan bind pada 127.0.0.1:11434. Karena itu, browser pada mesin lain tidak dapat menjangkaunya sampai OLLAMA_HOST diubah. Ollama juga hanya menerima request lintas origin dari localhost. Akibatnya, halaman yang disajikan dari domain Anda sendiri akan ditolak dengan No 'Access-Control-Allow-Origin' header is present on the requested resource sampai origin tersebut dicantumkan dalam OLLAMA_ORIGINS. Jika halaman menggunakan HTTPS sedangkan endpoint menggunakan HTTP, browser akan memblokir request sebagai mixed content sebelum Ollama menerimanya. Atur kedua variabel tersebut dalam override systemctl edit ollama.service, atau teruskan port melalui SSH agar masalah ini tidak terjadi.