Alternatif Open WebUI Terbaik untuk VPS
Bandingkan Open WebUI, LibreChat, Hollama dan OrionChat pada VPS ber-IP awam: RAM untuk model, log masuk, Ollama jauh dan kos penyelenggaraan.
Alternatif Open WebUI yang sesuai untuk VPS
Alternatif Open WebUI hampir selalu dibandingkan pada komputer riba, apabila RAM murah dan tiada perkhidmatan mendengar pada alamat awam. VPS mengubah kedua-dua keadaan ini, lalu mengubah susunan penilaian. Open WebUI kekal sebagai pilihan lalai yang tepat sebaik sahaja orang kedua log masuk, kerana ia menyediakan akaun pengguna sebenar dan panel pentadbir. Projek yang lebih ringan lebih sesuai apabila antara muka perlu berkongsi gigabait RAM terakhir dengan model. Kelemahan pilihan ini ialah pengesahan: projek tersebut tidak menyediakannya.
Semua maklumat di bawah diambil daripada dokumentasi setiap projek sendiri, yang dibaca pada Ogos 2026. Empat paksi penilaian ini hanya menjadi penting apabila pelayan boleh dicapai dari internet.
Empat aspek yang hanya penting pada IP awam
- Memori bersebelahan dengan model. Pelayan model ialah proses yang menggunakan sumber paling banyak pada mesin. Setiap megabait yang digunakan oleh antara muka ialah megabait yang tidak dapat digunakan oleh model.
- Pengesahan. Sesetengah projek ini mempunyai akaun pengguna dan peranan. Projek lain menganggap bahawa projek tersebut ialah satu-satunya perisian yang berjalan pada komputer riba anda, lalu tidak menyediakan log masuk langsung.
- Inferens jauh. UI yang hanya boleh mencapai
127.0.0.1:11434memaksa model berjalan pada mesin yang sama dengan antara muka. - Penyelenggaraan. Satu kontena dengan fail SQLite memerlukan pengurusan yang berbeza daripada enam kontena dengan MongoDB dan pangkalan data vektor di belakangnya.
Berapa banyak RAM yang diperuntukkan model untuk antara muka
Antara muka bukan komponen terbesar pada pelayan. Model ialah komponen terbesar. Saiz muat turun yang diterbitkan memberikan nilai minimum, kerana pemberat perlu kekal dalam memori semasa model menjawab, dan penggunaan memori sebenar lebih tinggi daripada saiz muat turun selepas cache konteks diperuntukkan.
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 dipaparkan oleh halaman pustaka Ollama pada Ogos 2026. Angka tersebut ialah saiz yang diterbitkan, bukan hasil pengukuran. Pada VPS 4 GB, qwen3:4b berukuran 2.5 GB meninggalkan kurang daripada 1.5 GB untuk sistem pengendalian dan komponen lain. Cache konteks pula menggunakan sebahagian memori itu apabila perbualan semakin panjang. Oleh itu, nilai num_ctx yang anda tetapkan ialah keputusan memori dan juga keputusan kualiti. qwen3:8b berukuran 5.2 GB langsung tidak muat pada pelayan tersebut. Inilah keadaan yang tidak pernah diliputi oleh ulasan komputer riba, iaitu antara muka sembang yang menggunakan beberapa ratus megabait boleh menentukan sama ada model dapat dijalankan. Jika anda menyediakan pelayan untuk model yang jauh lebih besar daripada tag ini, pengiraan bagi model 27B pada VPS CPU sahaja menunjukkan betapa pantasnya antara muka tidak lagi menjadi faktor penentu.
Buat pengukuran dan jangan bergantung pada mana-mana angka dalam ulasan, termasuk angka ini. Jalankan docker stats --no-stream selepas sejam penggunaan sebenar, bukan seminit selepas container dimulakan, kerana memori yang penting diperuntukkan pada penggunaan pertama. Ollama juga melepaskan pemberat selepas lima minit tanpa aktiviti. Oleh itu, bacaan yang diambil antara dua perbualan akan merendahkan anggaran puncak penggunaan. Mesej seterusnya perlu memuatkan keseluruhan model sekali lagi, kecuali anda mengekalkan model dalam memori menggunakan keep_alive.
Open WebUI: masih lalai secara lalai untuk lebih daripada seorang pengguna
Open WebUI dijalankan daripada satu imej dan menyimpan datanya dalam satu volum.
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 projek menerbitkan -p 3000:8080, yang mendengar pada semua antara muka. Awalan 127.0.0.1: memastikan ia kekal pada gelung balik. Pada VPS, awalan itu lebih penting daripada bahagian lain pada baris tersebut kerana Docker menulis peraturan iptables sendiri dan port yang diterbitkan mengabaikan peraturan deny ufw anda.
Akses halaman itu melalui terowong atau proksi, yang kedua-duanya diterangkan di bawah, kemudian cipta akaun pertama. Akaun itu menjadi pentadbir. Pendaftaran seterusnya dibuat dengan peranan pending, iaitu nilai lalai yang didokumenkan dalam DEFAULT_USER_ROLE. Oleh itu, orang luar yang mencapai halaman itu masih tidak boleh menggunakan model anda sehingga pentadbir meluluskannya.
Open WebUI menggunakan lebih banyak memori berbanding projek di bawah kerana fungsinya lebih banyak, dan halaman prestasinya sendiri menyenaraikan komponen yang menyebabkan penggunaan itu. Enjin embedding lalai memuatkan model sentence-transformers dalam container, yang didokumenkan menggunakan kira-kira 500 MB bagi setiap proses worker. Menetapkan RAG_EMBEDDING_ENGINE=ollama menyerahkan tugas itu kepada server model yang sudah anda jalankan. AUDIO_STT_ENGINE=webapi mengelakkan pemuatan model speech-to-text setempat. Pada SQLite apabila DATABASE_POOL_SIZE tidak ditetapkan, pool kembali kepada saiz dalaman yang besar dan setiap sambungan membina page cache serta memory map sendiri. Oleh itu, pada mesin kecil, tetapkan DATABASE_POOL_SIZE=8 dan DATABASE_SQLITE_PRAGMA_MMAP_SIZE=0. ENABLE_AUTOCOMPLETE_GENERATION=False menghentikan antara muka daripada meminta completion kepada model semasa pengguna masih menaip.
LibreChat: berbilang pengguna, dengan stack di belakangnya
git clone https://github.com/danny-avila/LibreChat.git
cd LibreChat
cp .env.example .env
docker compose up -dAntara muka tersedia pada port 3080. LibreChat sesuai apabila anda memerlukan sistem identiti, bukan sekadar kotak log masuk: dokumentasinya menerangkan log masuk LDAP dan OAuth2, serta menyediakan panel pentadbir untuk pengguna dan peranan. Keupayaan ini memerlukan satu 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"
}
]Fail compose lalai memulakan 6 servis: api, admin panel, MongoDB, Meilisearch, pgvector, RAG API. Tiada satu pun daripadanya ialah model. MongoDB dan pgvector masing-masing memerlukan memori sendiri, dan pada mesin dengan RAM 4 GB, memori itu sepatutnya digunakan oleh model.
Naik taraf dilakukan melalui operasi git. Bahagian inilah yang sering tersilap.
docker compose down
git pull
docker compose pull
docker compose up -dgit pull akan berhenti dengan konflik jika anda mengedit docker-compose.yml yang dijejaki, lalu proses naik taraf menjadi separuh siap. Letakkan perubahan anda dalam docker-compose.override.yml, yang disediakan oleh projek untuk tujuan ini, dan simpan rahsia dalam .env. Kedua-dua fail ini tidak dijejaki, jadi git pull tidak akan mengubahnya.
Arahkan LibreChat ke pelayan model anda sendiri dengan endpoint tersuai dalam 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"Gantikan model-host dengan alamat mesin yang menjalankan Ollama. Medan apiKey mesti ada walaupun Ollama mengabaikan nilainya, jadi nilai pemegang tempat sudah memadai. Jika LibreChat berjalan dalam Docker dan Ollama berjalan pada mesin yang sama, localhost dalam container merujuk kepada container itu sendiri. Oleh itu, gunakan host.docker.internal di situ.
Hollama dan OrionChat: pelayar yang melakukan kerja
Hollama menyediakan aplikasi pelayar daripada satu container kecil. Perbualan disimpan dalam storan pelayar anda, bukan pada pelayan.
docker run -d --restart unless-stopped -p 127.0.0.1:4173:4173 --name hollama ghcr.io/fmaclen/hollama:latestVersi perintah dalam README ini menggunakan --rm, yang memadamkan container apabila container itu berhenti. Oleh itu, antara muka tidak kembali selepas reboot. Di belakang reverse proxy, tambahkan -e VITE_ALLOWED_HOSTS='chat.example.com' kerana image hanya membenarkan host localhost. Image itu membalas permintaan untuk hostname lain dengan ralat blocked-host, bukan dengan aplikasi.
OrionChat melangkah lebih jauh dan langsung tiada komponen pelayan. Clone repository itu dan sediakan folder tersebut dengan web server yang sudah anda jalankan, atau buka index.html daripada disk. API key disimpan dalam localStorage pelayar, sejarah perbualan kekal dalam pelayar, dan aplikasi memadamkan perbualan paling lama apabila bilangannya melebihi 512.
Kedua-dua projek ini tiada login kerana kedua-duanya tiada pelayan yang boleh menyemaknya. Pada laptop, keadaan ini tidak menjadi masalah. Pada VPS, ini bermakna halaman itu tidak boleh diterbitkan pada 0.0.0.0. Ini juga bermakna sesuatu yang lebih mudah terlepas pandang: pelayar memanggil model, bukan pelayan.
Fakta itu menentukan tempat kedua-dua aplikasi ini boleh digunakan. Pelayar anda perlu mencapai Ollama secara terus. Oleh itu, Ollama perlu mendengar pada alamat selain loopback, dan Ollama tidak menyediakan sebarang pengesahan. Dua peraturan pelayar terhasil daripadanya. Halaman yang disediakan melalui HTTPS tidak boleh memanggil endpoint HTTP biasa, dan console mencetak 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 sehingga anda membenarkan origin tersebut.
Cara yang didokumenkan oleh Ollama untuk mengubah mana-mana tetapan ini ialah 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 kini sepatutnya mencetak 0.0.0.0:11434, sedangkan sebelum ini mencetak 127.0.0.1:11434. Buat perubahan ini hanya apabila firewall atau proxy yang menyediakan pengesahan sudah mengawal pihak yang boleh mencapai port tersebut. Port 11434 yang terbuka ialah model server yang terbuka, dan pengimbas massa boleh mencapai port awam baharu dengan cepat. SSH tunnel di bawah mengelakkan keseluruhan isu ini: halaman tersebut kemudian berjalan pada origin localhost, yang dibenarkan oleh Ollama secara lalai, dan port itu tidak pernah keluar dari mesin.
Bolehkah setiap satunya menggunakan endpoint Ollama atau vLLM jauh
Open WebUI boleh berbuat demikian, dan sambungan dibuat pada bahagian pelayan. OLLAMA_BASE_URL=http://model-host:11434 menunjukkannya kepada Ollama. Untuk vLLM atau mana-mana pelayan lain yang serasi dengan OpenAI, tetapkan OPENAI_API_BASE_URL=http://model-host:8000/v1 dengan OPENAI_API_KEY yang tidak kosong, dan kekalkan akhiran /v1 kerana akhiran itu diperlukan. OPENAI_API_BASE_URLS menerima beberapa backend yang dipisahkan dengan koma bertitik.
LibreChat boleh berbuat demikian melalui baseURL bagi endpoint tersuai yang ditunjukkan di atas. Permintaan itu juga keluar dari pelayan, jadi peraturan pelayar tidak terpakai. URL asas yang sama dan kunci ruang letak yang sama turut berfungsi di luar tetingkap sembang, dan itu sahaja yang diperlukan untuk menunjukkan ejen pengekodan kepada model yang sudah anda hoskan.
Hollama dan OrionChat boleh diarahkan kepada mana-mana endpoint yang anda masukkan dalam tetapan masing-masing, tetapi permintaan itu keluar dari pelayar anda. Semua yang dinyatakan dalam bahagian di atas terpakai kepada kedua-duanya dan tidak kepada yang lain di sini.
Memisahkan antara muka daripada model ialah manfaat paling berguna yang diberikan oleh endpoint jauh. Letakkan antara muka pada mesin kecil dan model pada mesin yang mempunyai memori yang mencukupi. Pada tahap ini juga anda perlu menentukan sama ada Ollama atau vLLM patut melayan permintaan, kerana kedua-duanya berkelakuan sangat berbeza apabila beberapa orang berinteraksi dengan model pada masa yang sama. Jika pelayan model belum wujud, mulakan dengan menjalankan Ollama pada VPS, dan jika menggunakan mesin CPU sahaja, baca perbandingan Ollama dengan llama.cpp sebelum memilih runner.
Jangan terbitkan UI chat tanpa log masuk pada 0.0.0.0
Halaman pengukuhan Open WebUI menyatakan bahawa projek ini "dibina untuk rangkaian peribadi dan dipercayai, sama seperti infrastruktur self-hosted lain seperti pangkalan data, pendaftaran container dan pelayan CI", serta mengarahkan anda meletakkannya di belakang VPN atau reverse proxy dengan pengesahan. Projek yang langsung tiada log masuk sekurang-kurangnya memerlukan perlindungan yang sama.
Semak perkara yang sedang mendengar pada port sebelum mempercayai mana-mana konfigurasi.
sudo ss -lntp | grep -E ':(3000|3080|4173|11434)'Baris yang berbunyi 127.0.0.1:3000 ialah hasil yang dikehendaki. Baris yang berbunyi 0.0.0.0:3000 bermakna antara muka chat anda boleh dicapai dari Internet awam. Dari mesin anda sendiri, jawapan curl -sI http://YOUR.VPS.IP:3000 bagi HTTP/1.1 200 OK menyatakan perkara yang sama dengan lebih jelas.
Mematikan log masuk Open WebUI dengan WEBUI_AUTH=False ialah tetapan pengguna tunggal untuk mesin yang tidak boleh dicapai oleh orang lain. Tetapan ini juga tidak boleh digunakan pada pemasangan yang sudah mempunyai akaun, dengan mesej You can't turn off authentication because there are existing users.
Corak pertama: ikat pada loopback dan capai melalui SSH. Terbitkan setiap port pada 127.0.0.1, kemudian buat forward bagi perkara yang diperlukan: ssh -N -L 3000:127.0.0.1:3000 you@vps.example.com, dan buka http://localhost:3000 pada komputer riba anda. Tiada apa-apa yang diterbitkan, jadi tiada apa-apa yang boleh diimbas. Untuk Hollama atau OrionChat, buat forward bagi port model dalam arahan yang sama menggunakan -L 11434:127.0.0.1:11434 dan biarkan Ollama pada loopback. Kekuatan corak ini bergantung sepenuhnya pada konfigurasi SSH anda, jadi gabungkannya dengan SSH dengan kunci sahaja dan sshd yang diperkukuh.
Corak kedua: reverse proxy yang membuat pengesahan sebelum aplikasi menerima permintaan. Kekalkan aplikasi pada loopback, biarkan proxy mengendalikan port 443, dan letakkan single sign-on di hadapan aplikasi. Traefik yang dikawal oleh label Docker Compose bersama Authentik sebagai penyedia identiti memberikan setiap aplikasi pada mesin itu satu log masuk dan satu sijil. Dengan Open WebUI di belakang TLS (keselamatan lapisan pengangkutan), tetapkan WEBUI_SESSION_COOKIE_SECURE=true dan WEBUI_SESSION_COOKIE_SAME_SITE=strict. Pendekkan juga JWT_EXPIRES_IN daripada nilai lalai empat minggu kerana dokumentasi Open WebUI menyatakan bahawa tanpa Redis, proses log keluar tidak membatalkan token: token itu kekal boleh digunakan sehingga tamat tempoh sendiri.
Corak kedua tidak melindungi projek yang hanya berfungsi melalui pelayar. Proxy di hadapan halaman tidak melindungi endpoint model, dan permintaan fetch dari halaman itu ke hostname lain tidak membawa cookie sesi anda. Oleh itu, proxy pengesahan di hadapan Ollama menjawab dengan redirect ke borang log masuk dan chat gagal. Sama ada halakan endpoint model di bawah hostname yang sama seperti halaman tersebut, atau gunakan corak pertama.
Yang mana hendak dipilih
Jika orang lain selain anda akan menggunakannya, jalankan Open WebUI. Ia mempunyai akaun sebenar, pengguna baharu akan ditempatkan dalam baris gilir kelulusan, dan penyelenggaranya menerbitkan panduan hardening yang boleh anda ikuti. Jika anda memerlukan LDAP atau panel pentadbiran, jalankan LibreChat dan sahkan dengan docker stats bahawa enam servisnya bersama model anda benar-benar boleh dijalankan sebelum anda bergantung padanya. Jika hanya seorang pengguna pada pelayan kecil dan model itu sudah menggunakan sebahagian besar RAM, sediakan Hollama atau OrionChat melalui terowong SSH dan biarkan pelayar menyimpan keadaan. Pilihan yang salah pada VPS ialah menerbitkan mana-mana daripadanya pada 0.0.0.0 tanpa log masuk di hadapannya.
FAQ
Adakah Open WebUI selamat untuk didedahkan terus pada IP awam?
Halaman hardeningnya sendiri menerangkan bahawa perisian ini adalah untuk rangkaian persendirian dan dipercayai, dalam kategori yang sama seperti pangkalan data atau pelayan CI. Open WebUI mempunyai akaun sebenar, dan akaun pertama menjadi pentadbir manakala akaun seterusnya kekal pending sehingga diluluskan. Oleh itu, Open WebUI jauh lebih selamat berbanding UI tanpa log masuk. Namun, letakkannya di belakang reverse proxy dengan TLS dan, jika boleh, gunakan single sign-on. Terbitkan port container sebagai 127.0.0.1:3000:8080 supaya peraturan iptables Docker sendiri tidak membukanya kepada Internet tanpa pengetahuan anda.
Alternatif Open WebUI yang manakah menggunakan RAM paling sedikit pada VPS?
Aplikasi berasaskan pelayar, iaitu Hollama dan OrionChat, kerana aplikasi berjalan pada klien. Pelayan hanya menghantar fail statik, dan OrionChat langsung tidak memerlukan container aplikasi. Open WebUI mengekalkan proses Python, pangkalan data dan, secara lalai, model embedding tempatan dalam memori. Dokumentasinya menyatakan penggunaan sekitar 500 MB bagi setiap worker untuk model embedding sahaja. Sahkan angka tersebut pada mesin anda sendiri dengan docker stats --no-stream kerana penggunaan berubah mengikut ciri yang diaktifkan.
Bolehkah UI sembang ini menggunakan pelayan Ollama pada hos lain?
Open WebUI dan LibreChat boleh berbuat demikian, dan pelayannya yang membuat sambungan. Oleh itu, peraturan pelayar tidak terpakai. Tetapkan OLLAMA_BASE_URL untuk Open WebUI, atau baseURL dalam endpoint tersuai untuk LibreChat. Untuk vLLM atau pelayan lain yang serasi dengan OpenAI, gunakan OPENAI_API_BASE_URL bersama akhiran /v1 dan API key yang tidak kosong. Hollama dan OrionChat juga boleh menunjuk ke mana-mana lokasi, tetapi permintaan datang daripada pelayar anda. Oleh itu, endpoint tersebut juga mesti boleh dicapai daripada pelayar anda.
Mengapakah UI sembang dalam pelayar saya tidak dapat mencapai Ollama?
Dua punca merangkumi hampir semua kes. Secara lalai, Ollama mengikat 127.0.0.1:11434. Oleh itu, pelayar pada mesin lain tidak dapat mencapainya sehingga OLLAMA_HOST diubah. Ollama juga hanya menerima permintaan cross-origin daripada localhost. Oleh itu, halaman yang disajikan daripada domain anda sendiri akan ditolak dengan No 'Access-Control-Allow-Origin' header is present on the requested resource sehingga origin tersebut disenaraikan dalam OLLAMA_ORIGINS. Jika halaman menggunakan HTTPS tetapi endpoint menggunakan HTTP, pelayar menyekat panggilan itu sebagai mixed content sebelum Ollama menerimanya. Tetapkan kedua-dua pemboleh ubah dalam override systemctl edit ollama.service, atau majukan port melalui SSH dan masalah itu akan hilang.