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 mana yang tepat untuk VPS
Alternatif Open WebUI hampir selalu dibandingkan pada laptop, ketika RAM berlimpah dan tidak ada layanan yang mendengarkan pada alamat publik. VPS mengubah kedua kondisi tersebut, sehingga urutannya juga berubah. Open WebUI tetap menjadi pilihan default yang tepat begitu orang kedua masuk, karena menyediakan akun pengguna dan panel admin. Proyek yang lebih ringan lebih unggul ketika antarmuka harus berbagi gigabyte RAM terakhir dengan model. Konsekuensinya adalah autentikasi: proyek-proyek tersebut tidak memilikinya.
Semua informasi di bawah ini berasal dari dokumentasi masing-masing proyek, yang dibaca pada Agustus 2026. Keempat aspek ini baru penting setelah server dapat dijangkau dari Internet.
Empat aspek yang hanya penting pada IP publik
- Memori yang digunakan bersama model. Server model adalah proses yang paling banyak menggunakan sumber daya pada server. Setiap megabita yang digunakan oleh antarmuka berarti satu megabita lebih sedikit yang tersedia untuk model.
- Autentikasi. Beberapa proyek menyediakan akun pengguna dan peran. Proyek lainnya mengasumsikan bahwa proyek tersebut adalah satu-satunya aplikasi yang berjalan di laptop Anda dan sama sekali tidak menyediakan login.
- Inferensi jarak jauh. UI yang hanya dapat mengakses
127.0.0.1:11434mengharuskan model berjalan pada server 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 paling banyak menggunakan RAM. Ukuran unduhan yang dipublikasikan menjadi batas minimum, karena bobot model harus tetap berada di memori saat model menghasilkan jawaban. Penggunaan memori sebenarnya lebih besar 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 ditampilkan oleh halaman pustaka 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 lainnya. Cache konteks juga mengurangi sisa tersebut seiring bertambahnya percakapan. qwen3:8b berukuran 5.2 GB sama sekali tidak dapat dijalankan pada server tersebut. Inilah kondisi yang tidak pernah dibahas dalam perbandingan laptop. Pada kondisi ini, antarmuka chat yang menggunakan beberapa ratus megabita dapat menentukan apakah model dapat berjalan. Jika Anda menyiapkan server untuk model yang jauh lebih besar daripada model-model tersebut, perhitungan untuk model 27B pada VPS yang hanya menggunakan CPU menunjukkan betapa cepatnya antarmuka berhenti menjadi faktor penentu.
Lakukan pengukuran, bukan mempercayai angka apa pun dalam perbandingan, termasuk angka di sini. Jalankan docker stats --no-stream setelah penggunaan nyata selama satu jam, bukan satu menit setelah container dimulai, karena memori yang penting baru dialokasikan saat penggunaan pertama.
Open WebUI: tetap sebagai pilihan 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 mendengarkan 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 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, sehingga orang asing yang berhasil mengakses halaman tetap tidak dapat menggunakan model Anda sampai admin menyetujuinya.
Open WebUI menggunakan lebih banyak memori daripada proyek-proyek di bawah karena fiturnya lebih banyak, dan halaman performanya sendiri menyebutkan komponen yang menyebabkan penggunaan tersebut. Engine embedding 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 dan setiap koneksi membuat page cache serta memory map sendiri. Oleh karena itu, pada mesin kecil tetapkan DATABASE_POOL_SIZE=8 dan DATABASE_SQLITE_PRAGMA_MMAP_SIZE=0. ENABLE_AUTOCOMPLETE_GENERATION=False menghentikan interface meminta completion dari model saat pengguna masih mengetik.
LibreChat: multi-pengguna, 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 ketika Anda memerlukan sistem identitas, bukan sekadar kotak login: dokumentasinya mencakup login LDAP dan OAuth2, serta menyediakan panel admin untuk pengguna dan peran. Kemampuan ini disertai 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 service tersebut merupakan model. MongoDB dan pgvector masing-masing memerlukan memorinya sendiri, dan pada server dengan RAM 4 GB, memori tersebut akan mengurangi memori yang diperlukan model.
Upgrade dilakukan dengan 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 mengedit 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 mengubahnya.
Arahkan LibreChat ke model server 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 server 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 di sana.
Hollama dan OrionChat: browser yang menjalankan proses
Hollama menyajikan aplikasi browser dari satu container kecil. Percakapan disimpan di penyimpanan 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 dan menjawab permintaan untuk hostname lain dengan error blocked-host, bukan dengan aplikasi.
OrionChat melangkah lebih jauh dan sama sekali tidak memiliki komponen server. Clone repository tersebut dan 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 paling lama setelah jumlahnya melebihi 512.
Kedua proyek tidak memiliki login karena tidak memiliki server yang dapat memeriksa login tersebut. Pada laptop, hal ini tidak menjadi masalah. Pada VPS, halaman tersebut tidak boleh dipublikasikan pada 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 mendengarkan koneksi selain dari 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, sedangkan sebelumnya menampilkan 127.0.0.1:11434. Lakukan perubahan tersebut hanya jika firewall atau proxy yang menyediakan autentikasi sudah mengendalikan siapa yang dapat menjangkau port tersebut. Port 11434 yang terbuka berarti model server terbuka, dan pemindai massal dapat menjangkau port publik baru dengan cepat. SSH tunnel di bawah menghindari masalah tersebut. Halaman kemudian berjalan pada origin localhost, yang secara default diizinkan Ollama, dan port tersebut tidak pernah keluar dari mesin.
Dapatkah masing-masing menggunakan endpoint Ollama atau vLLM jarak jauh
Open WebUI dapat melakukannya, 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. OPENAI_API_BASE_URLS menerima beberapa backend yang dipisahkan dengan titik koma.
LibreChat dapat melakukannya melalui baseURL pada endpoint khusus yang ditampilkan di atas. Permintaan tersebut juga keluar dari server, sehingga aturan browser tidak berlaku. Base URL yang sama dan placeholder key yang sama juga dapat digunakan di luar jendela chat. Itu sudah cukup untuk menghubungkan 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 yang lain di sini.
Memisahkan antarmuka dari model adalah manfaat paling penting yang diberikan endpoint jarak jauh. Tempatkan antarmuka pada perangkat kecil dan model pada perangkat yang memiliki kapasitas memori. 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, lalu pada perangkat yang hanya menggunakan CPU, baca perbandingan Ollama dengan llama.cpp sebelum memilih runner.
Jangan memublikasikan UI chat tanpa login pada 0.0.0.0
Halaman hardening Open WebUI menyatakan bahwa proyek ini "dibangun untuk jaringan privat dan tepercaya, seperti infrastruktur self-hosted lainnya, termasuk database, container registry, dan server CI", serta menyarankan agar Anda menempatkannya di balik VPN atau reverse proxy dengan autentikasi. Proyek yang sama sekali tidak memiliki login setidaknya memerlukan perlakuan yang sama.
Periksa apa yang sedang listening sebelum mempercayai konfigurasi apa pun.
sudo ss -lntp | grep -E ':(3000|3080|4173|11434)'Baris yang berisi 127.0.0.1:3000 adalah hasil yang diharapkan. Baris yang berisi 0.0.0.0:3000 berarti antarmuka chat Anda berada di Internet publik. Dari mesin Anda sendiri, respons curl -sI http://YOUR.VPS.IP:3000 terhadap HTTP/1.1 200 OK menyatakan hal yang sama dengan lebih tegas.
Menonaktifkan login Open WebUI dengan WEBUI_AUTH=False adalah pengaturan single-user untuk 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 di laptop Anda. Tidak ada yang dipublikasikan, sehingga tidak ada yang dapat dipindai. Untuk Hollama atau OrionChat, teruskan port model dalam perintah yang sama dengan -L 11434:127.0.0.1:11434 dan biarkan Ollama tetap menggunakan loopback. Keamanan pola ini hanya sekuat konfigurasi SSH Anda, jadi padukan dengan SSH hanya dengan key dan sshd yang diperketat.
Pola dua: reverse proxy yang melakukan autentikasi sebelum aplikasi menerima request. Pertahankan aplikasi pada loopback, biarkan proxy mengelola port 443, lalu tempatkan single sign-on di depannya. Traefik yang dikendalikan oleh label Docker Compose dengan Authentik sebagai identity provider memberikan satu login dan satu sertifikat untuk setiap aplikasi pada server. Jika Open WebUI berada di balik TLS (transport layer security), atur WEBUI_SESSION_COOKIE_SECURE=true dan WEBUI_SESSION_COOKIE_SAME_SITE=strict. Kurangi juga JWT_EXPIRES_IN dari nilai default empat minggunya, karena dokumentasi Open WebUI menyatakan bahwa tanpa Redis, sign-out tidak membatalkan token: token tetap dapat digunakan sampai kedaluwarsa dengan sendirinya.
Pola dua tidak melindungi proyek yang hanya berjalan di browser. Proxy di depan halaman tidak melindungi endpoint model, dan fetch dari halaman tersebut ke hostname yang berbeda tidak membawa session cookie Anda. Akibatnya, proxy autentikasi di depan Ollama merespons dengan redirect ke formulir login dan chat gagal. Arahkan endpoint model di bawah hostname yang sama dengan halaman, atau gunakan pola satu.
Yang Harus Dipilih
Jika ada orang lain yang akan menggunakannya, jalankan Open WebUI. Open WebUI menyediakan akun pengguna, menempatkan pengguna baru dalam antrean persetujuan, dan pengelolanya menerbitkan panduan hardening yang dapat Anda ikuti. Jika memerlukan LDAP atau panel admin, jalankan LibreChat, lalu gunakan docker stats untuk memastikan bahwa enam service-nya dan model Anda benar-benar sesuai sebelum Anda mengandalkannya. Jika hanya satu orang yang menggunakannya pada komputer kecil dan model sudah menggunakan sebagian besar RAM, sajikan Hollama atau OrionChat melalui tunnel SSH, lalu biarkan browser menyimpan state. Pilihan yang salah pada VPS adalah memublikasikan salah satu aplikasi tersebut pada 0.0.0.0 tanpa login di depannya.
FAQ
Apakah Open WebUI aman jika langsung diekspos ke IP publik?
Halaman hardening Open WebUI sendiri menjelaskannya sebagai software untuk jaringan privat dan tepercaya, dalam kategori yang sama dengan database atau server CI. Open WebUI memiliki akun pengguna yang sebenarnya. Akun pertama menjadi administrator, sedangkan akun berikutnya tetap 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 akses 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 container aplikasi. Open WebUI menjalankan proses Python, database, serta, secara default, model embedding lokal di memori. Dokumentasinya menyebutkan penggunaan sekitar 500 MB per worker hanya untuk model embedding. Verifikasi angka tersebut pada server Anda sendiri dengan docker stats --no-stream, karena penggunaan memorinya berubah sesuai fitur yang diaktifkan.
Apakah UI chat ini dapat menggunakan server Ollama pada host lain?
Open WebUI dan LibreChat dapat melakukannya. Koneksi dibuat oleh server masing-masing, sehingga aturan browser tidak berlaku. Atur OLLAMA_BASE_URL untuk Open WebUI, atau baseURL pada endpoint kustom untuk LibreChat. Untuk vLLM atau server lain yang kompatibel dengan OpenAI, gunakan OPENAI_API_BASE_URL dengan suffix /v1 dan API key yang tidak kosong. Hollama dan OrionChat juga dapat diarahkan ke host mana pun. Namun, permintaan dikirim dari browser Anda, sehingga endpoint tersebut juga harus dapat dijangkau dari browser.
Mengapa UI chat pada browser saya tidak dapat menjangkau Ollama?
Hampir semua kasus disebabkan oleh 2 hal. Secara default, Ollama melakukan binding pada 127.0.0.1:11434. Karena itu, browser pada mesin lain tidak dapat menjangkaunya sampai OLLAMA_HOST diubah. Ollama juga hanya menerima permintaan 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 permintaan 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.