Alternatif Open WebUI terbaik untuk VPS
Bandingkan Open WebUI, LibreChat, Hollama dan OrionChat untuk VPS dengan IP awam. Ketahui penggunaan RAM, sistem log masuk dan pengurusan Ollama bagi setiap pilihan.
Alternatif Open WebUI yang manakah sesuai untuk VPS
Alternatif Open WebUI hampir selalu dibandingkan pada komputer riba, di mana RAM adalah murah dan tiada apa-apa yang mendengar pada alamat awam. VPS mengubah kedua-dua fakta ini, dan ia mengubah kedudukan tersebut. Open WebUI kekal sebagai pilihan lalai yang tepat sebaik sahaja orang kedua log masuk, kerana ia menyediakan akaun pengguna sebenar dan panel admin. Projek yang lebih ringan menang apabila antara muka bersaing dengan model untuk mendapatkan gigabait RAM terakhir. Harga bagi kemenangan itu ialah pengesahan: projek tersebut tidak mempunyainya.
Segala maklumat di bawah diperoleh daripada dokumentasi setiap projek, dibaca pada Ogos 2026. Empat paksi yang dinyatakan adalah paksi yang hanya muncul sebaik sahaja pelayan boleh dicapai dari internet.
Empat paksi yang hanya penting pada IP awam
- Memori di sebelah model. Pelayan model ialah proses yang mahal pada mesin tersebut. Setiap megabait yang digunakan oleh antara muka ialah megabait yang tidak boleh digunakan oleh model.
- Pengesahan. Sesetengah projek ini mempunyai akaun pengguna dan peranan. Projek lain menganggap ia adalah satu-satunya perkara yang berjalan pada komputer riba anda, dan ia tidak mempunyai sebarang log masuk langsung.
- Inferens jauh. UI yang hanya boleh mencapai
127.0.0.1:11434memaksa model berada pada mesin yang sama dengan antara muka. - Penyelenggaraan. Satu kontena dengan fail SQLite ialah tugasan yang berbeza daripada enam kontena dengan MongoDB dan pangkalan data vektor di belakangnya.
Berapakah jumlah RAM yang ditinggalkan oleh model untuk antara muka
Antara muka bukanlah komponen terbesar pada pelayan. Model tersebut adalah komponen yang terbesar. Saiz muat turun yang diterbitkan memberikan anda nilai lantai, kerana pemberat (weights) perlu berada dalam memori semasa model menjawab, dan penggunaan memori sebenar adalah lebih tinggi daripada saiz muat turun sebaik sahaja 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"
}
]Itu adalah angka yang dicetak pada halaman pustaka Ollama pada Ogos 2026. Ia merupakan saiz yang diterbitkan, bukan ukuran sebenar. Pada VPS 4 GB, qwen3:4b pada 2.5 GB meninggalkan kurang daripada 1.5 GB untuk sistem pengendalian dan segala-galanya, dan cache konteks akan mengurangkan baki tersebut apabila perbualan semakin panjang. qwen3:8b pada 5.2 GB langsung tidak muat pada pelayan tersebut. Ini adalah situasi yang tidak pernah diliputi oleh ulasan komputer riba, dan di sinilah antara muka sembang yang menggunakan beberapa ratus megabait menentukan sama ada model tersebut boleh berjalan atau tidak. Jika anda sedang menentukan saiz pelayan untuk sesuatu yang jauh melebihi tag ini, pengiraan untuk model 27B pada VPS berasaskan CPU sahaja menunjukkan betapa cepatnya antara muka berhenti menjadi angka yang menentukan segala-galanya.
Lakukan pengukuran dan jangan sekadar mempercayai mana-mana angka dalam ulasan, termasuk angka ini. Jalankan docker stats --no-stream selepas satu jam penggunaan sebenar, bukan satu minit selepas kontena dimulakan, kerana memori yang penting diperuntukkan pada penggunaan pertama.
Open WebUI: masih menjadi 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 setiap antara muka. Prefiks 127.0.0.1: mengekalkannya pada loopback. Pada VPS, prefiks itu lebih penting daripada perkara lain pada baris tersebut, kerana Docker menulis peraturan iptablesnya sendiri dan port yang diterbitkan mengabaikan peraturan deny ufw anda.
Capai halaman tersebut melalui tunnel atau proxy, kedua-duanya diterangkan di bawah, kemudian cipta akaun pertama. Akaun itu menjadi pentadbir. Pendaftaran seterusnya dicipta dengan peranan pending, lalai yang didokumentasikan bagi DEFAULT_USER_ROLE, jadi orang asing yang mencapai halaman tersebut masih tidak boleh menggunakan model anda sehingga admin meluluskan mereka.
Open WebUI menggunakan lebih banyak memori berbanding projek di bawah kerana ia melakukan lebih banyak perkara, dan halaman prestasinya sendiri menamakan bahagian yang memakan kos tersebut. Enjin embedding lalai memuatkan model sentence-transformers di dalam kontena, didokumentasikan pada sekitar 500 MB bagi setiap proses pekerja. Menetapkan RAG_EMBEDDING_ENGINE=ollama menyerahkan tugas itu kepada pelayan model yang sudah anda jalankan. AUDIO_STT_ENGINE=webapi mengelakkan pemuatan model pertuturan-ke-teks tempatan. Pada SQLite dengan DATABASE_POOL_SIZE tidak ditetapkan, pool kembali kepada saiz dalaman yang besar dan setiap sambungan mengembangkan cache halaman serta peta memorinya sendiri, jadi pada kotak kecil tetapkan DATABASE_POOL_SIZE=8 dan DATABASE_SQLITE_PRAGMA_MMAP_SIZE=0. ENABLE_AUTOCOMPLETE_GENERATION=False menghalang antara muka daripada meminta model untuk pelengkapan 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 ini menjawab pada port 3080. LibreChat adalah pilihan yang perlu dilihat apabila anda memerlukan sistem identiti dan bukannya sekadar kotak log masuk: ia mendokumentasikan log masuk LDAP dan OAuth2, serta menyertakan panel admin untuk pengguna dan peranan. Keupayaan tersebut hadir bersama 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 adalah model. MongoDB dan pgvector masing-masing memerlukan memori sendiri, dan pada pelayan 4 GB, itu adalah memori yang diperlukan oleh model.
Naik taraf adalah operasi git, iaitu bahagian yang sering disalah faham oleh pengguna.
docker compose down
git pull
docker compose pull
docker compose up -dgit pull akan terhenti dengan konflik jika anda menyunting docker-compose.yml yang dijejaki, dan kemudian naik taraf tersebut hanya diaplikasikan separuh jalan. Letakkan perubahan anda dalam docker-compose.override.yml, yang disediakan oleh projek ini untuk tujuan tersebut, dan simpan rahsia dalam .env. Kedua-dua fail ini tidak dijejaki, jadi git pull tidak akan mengganggu fail tersebut.
Halakan 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 pelayan yang menjalankan Ollama. Medan apiKey perlu ada walaupun Ollama mengabaikan nilainya, jadi penggunaan placeholder sudah memadai. Jika LibreChat berjalan dalam Docker dan Ollama berjalan pada mesin yang sama, localhost di dalam container bermaksud container itu sendiri, jadi gunakan host.docker.internal di situ sebagai gantinya.
Hollama dan OrionChat: pelayar melakukan kerja tersebut
Hollama menyediakan aplikasi pelayar daripada satu kontena kecil. Sembang 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 README bagi arahan ini menggunakan --rm, yang memadamkan kontena apabila ia berhenti, jadi antara muka tidak akan muncul semula selepas but semula. Di sebalik reverse proxy, tambahkan -e VITE_ALLOWED_HOSTS='chat.example.com', kerana imej tersebut hanya membenarkan host localhost dan menjawab permintaan untuk mana-mana hostname lain dengan ralat blocked-host dan bukannya aplikasi.
OrionChat melangkah lebih jauh dan tidak mempunyai komponen pelayan langsung. Klon repositori tersebut dan sediakan folder dengan pelayan web yang anda sudah jalankan, atau buka index.html daripada cakera. API keys disimpan dalam localStorage pelayar, sejarah sembang kekal dalam pelayar, dan aplikasi memadamkan sembang paling lama sebaik sahaja jumlahnya melebihi 512.
Kedua-dua projek tidak mempunyai log masuk, kerana kedua-duanya tidak mempunyai pelayan yang boleh menyemaknya. Pada komputer riba, ini tidak menjadi masalah. Pada VPS, ini bermakna halaman tersebut tidak boleh diterbitkan pada 0.0.0.0, dan ia bermakna sesuatu yang lebih mudah terlepas pandang: pelayar memanggil model, bukan pelayan.
Fakta tersebut menentukan di mana kedua-duanya boleh digunakan. Pelayar anda perlu mencapai Ollama secara terus, jadi Ollama perlu mendengar pada lebih daripada sekadar loopback, dan Ollama tidak mempunyai sebarang bentuk pengesahan. Dua peraturan pelayar terhasil daripadanya. Halaman yang disediakan melalui HTTPS tidak boleh memanggil endpoint HTTP biasa, dan konsol 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 mana-mana 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 didokumentasikan oleh Ollama untuk menukar mana-mana tetapan tersebut adalah melalui 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 di mana ia mencetak 127.0.0.1:11434 sebelum ini. Hanya buat perubahan tersebut apabila firewall atau proksi pengesahan sudah mengawal siapa yang boleh mencapai port tersebut, kerana port 11434 yang terbuka adalah pelayan model yang terbuka dan pengimbas massa mencapai port awam baharu dengan cepat. Terowong SSH di bawah mengelakkan keseluruhan persoalan tersebut: halaman kemudian berjalan pada origin localhost, yang dibenarkan oleh Ollama secara lalai, dan port tersebut tidak pernah keluar dari kotak.
Bolehkah setiap satu menggunakan endpoint Ollama atau vLLM jauh
Open WebUI boleh melakukannya, dan sambungan dibuat di sebelah pelayan. OLLAMA_BASE_URL=http://model-host:11434 menghalakannya 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, yang diperlukan. OPENAI_API_BASE_URLS menerima beberapa backend yang dipisahkan dengan koma bertitik.
LibreChat boleh melakukannya, melalui baseURL bagi endpoint tersuai yang ditunjukkan di atas. Permintaan itu juga meninggalkan pelayan, jadi tiada peraturan pelayar yang terpakai. URL asas yang sama dan kunci pemegang tempat yang sama berfungsi di luar tetingkap sembang juga, yang merupakan semua yang diperlukan untuk menghalakan ejen pengekodan kepada model yang anda sudah hoskan.
Hollama dan OrionChat boleh menghala ke mana-mana endpoint yang anda taip ke dalam tetapan mereka, tetapi permintaan itu meninggalkan pelayar anda. Segala-galanya dalam bahagian di atas terpakai kepada mereka dan tiada yang lain di sini.
Memisahkan antara muka daripada model adalah perkara paling berguna yang anda peroleh daripada endpoint jauh. Letakkan antara muka pada kotak kecil dan model di tempat memori berada. Itu juga merupakan titik untuk memutuskan sama ada Ollama atau vLLM harus melayani permintaan tersebut, kerana kedua-duanya berkelakuan sangat berbeza apabila beberapa orang bercakap dengan model itu serentak. Jika pelayan model belum wujud lagi, mulakan dengan menjalankan Ollama pada VPS, dan pada kotak yang hanya menggunakan CPU, baca bagaimana Ollama dibandingkan dengan llama.cpp sebelum anda memilih pelari.
Jangan sekali-kali menerbitkan UI sembang tanpa log masuk pada 0.0.0.0
Halaman pengukuhan (hardening) Open WebUI menyatakan bahawa projek ini "dibina untuk rangkaian peribadi yang dipercayai, sama seperti infrastruktur self-hosted lain seperti pangkalan data, registry kontena, dan pelayan CI", dan ia mengarahkan anda untuk meletakkannya di belakang VPN atau di belakang reverse proxy dengan pengesahan. Projek yang langsung tidak mempunyai log masuk wajar menerima tahap perlindungan yang sama.
Semak apa yang sedang mendengar (listening) sebelum anda mempercayai mana-mana bahagiannya.
sudo ss -lntp | grep -E ':(3000|3080|4173|11434)'Baris yang membaca 127.0.0.1:3000 adalah apa yang anda mahukan. Baris yang membaca 0.0.0.0:3000 bermakna antara muka sembang anda berada di internet awam. Dari mesin anda sendiri, curl -sI http://YOUR.VPS.IP:3000 yang menjawab HTTP/1.1 200 OK menyatakan perkara yang sama dengan lebih terus terang.
Mematikan log masuk Open WebUI dengan WEBUI_AUTH=False adalah tetapan pengguna tunggal untuk mesin yang tidak boleh dicapai oleh orang lain. Ia juga enggan digunakan pada pemasangan yang sudah mempunyai akaun, dengan mesej You can't turn off authentication because there are existing users.
Corak satu: bind kepada loopback dan capai melalui SSH. Terbitkan setiap port pada 127.0.0.1, kemudian forward apa yang anda perlukan: 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, forward port model dalam arahan yang sama dengan -L 11434:127.0.0.1:11434 dan biarkan Ollama pada loopback. Corak ini hanya sekuat persediaan SSH anda, jadi pasangkannya dengan SSH kunci sahaja dan sshd yang diperkukuh.
Corak dua: reverse proxy yang mengesahkan sebelum aplikasi melihat permintaan. Kekalkan aplikasi pada loopback, biarkan proxy menguasai port 443, dan letakkan single sign-on di hadapan. Traefik yang dipacu oleh label Docker Compose dengan Authentik sebagai penyedia identiti memberikan setiap aplikasi pada pelayan satu log masuk dan satu sijil. Dengan Open WebUI di belakang TLS (transport layer security), tetapkan WEBUI_SESSION_COOKIE_SECURE=true dan WEBUI_SESSION_COOKIE_SAME_SITE=strict. Pendekkan JWT_EXPIRES_IN daripada lalai empat minggunya juga, kerana Open WebUI mendokumenkan bahawa tanpa Redis, log keluar tidak membatalkan token: ia kekal boleh digunakan sehingga ia tamat tempoh dengan sendirinya.
Corak dua tidak menyelamatkan projek yang hanya berasaskan pelayar. Proxy di hadapan halaman tidak melindungi endpoint model, dan fetch daripada halaman tersebut ke hostname yang berbeza tidak membawa kuki sesi anda, jadi proxy pengesahan di hadapan Ollama menjawab dengan redirect ke borang log masuk dan sembang tersebut gagal. Sama ada halakan endpoint model di bawah hostname yang sama dengan halaman tersebut, atau gunakan corak satu.
Yang mana satu untuk dipilih
Jika ada orang lain selain anda yang akan menggunakannya, jalankan Open WebUI. Ia mempunyai akaun sebenar, pengguna baharu akan diletakkan dalam baris gilir kelulusan, dan penyelenggaranya menerbitkan panduan pengukuhan keselamatan yang boleh anda ikuti. Jika anda memerlukan LDAP atau panel pentadbir, jalankan LibreChat, dan sahkan dengan docker stats sama ada enam servisnya berserta model anda benar-benar muat sebelum anda bergantung kepadanya. Jika ia hanya untuk seorang pengguna pada pelayan kecil di mana model tersebut telah menggunakan sebahagian besar RAM, hidangkan Hollama atau OrionChat melalui SSH tunnel dan biarkan pelayar web menyimpan statusnya. Jawapan yang salah pada VPS adalah mana-mana daripadanya diterbitkan pada 0.0.0.0 tanpa sebarang log masuk di hadapannya.
FAQ
Adakah Open WebUI selamat untuk didedahkan secara terus pada IP awam?
Halaman pengukuhan (hardening) perisian ini menyifatkannya sebagai perisian untuk rangkaian peribadi yang dipercayai, dalam kategori yang sama seperti pangkalan data atau pelayan CI. Ia mempunyai akaun sebenar, dan akaun pertama akan menjadi pentadbir manakala akaun seterusnya kekal pending sehingga diluluskan, jadi ia jauh lebih selamat daripada UI tanpa log masuk. Walau bagaimanapun, letakkannya di belakang reverse proxy dengan TLS dan, jika boleh, gunakan single sign-on. Terbitkan port kontena 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 paling sedikit RAM pada VPS?
Alternatif berasaskan pelayar, iaitu Hollama dan OrionChat, kerana aplikasi berjalan pada klien. Pelayan hanya menghantar fail statik, dan OrionChat tidak memerlukan kontena aplikasi langsung. Open WebUI mengekalkan proses Python, pangkalan data dan, secara lalai, model embedding tempatan dalam memori, yang didokumentasikan sekitar 500 MB bagi setiap pekerja untuk model embedding sahaja. Sahkan angka tersebut pada pelayan anda sendiri dengan docker stats --no-stream, kerana ia berubah mengikut ciri yang anda aktifkan.
Bolehkah UI sembang ini menggunakan pelayan Ollama pada hos lain?
Open WebUI dan LibreChat boleh melakukannya, dan pelayan mereka yang membuat sambungan tersebut, jadi tiada peraturan pelayar yang terpakai. Tetapkan OLLAMA_BASE_URL untuk Open WebUI, atau baseURL dalam endpoint tersuai untuk LibreChat. Bagi vLLM atau pelayan lain yang serasi dengan OpenAI, gunakan OPENAI_API_BASE_URL dengan akhiran /v1 dan kunci API yang tidak kosong. Hollama dan OrionChat juga boleh menghala ke mana-mana, tetapi permintaan datang daripada pelayar anda, jadi endpoint tersebut mestilah boleh dicapai daripada pelayar anda juga.
Mengapa UI sembang pelayar saya tidak dapat mencapai Ollama?
Dua punca meliputi hampir setiap kes. Ollama mengikat 127.0.0.1:11434 secara lalai, jadi pelayar pada mesin lain tidak akan mencapainya sehingga OLLAMA_HOST ditukar. Selain itu, Ollama hanya menerima permintaan rentas asal (cross-origin) daripada localhost, jadi halaman yang dihidangkan daripada domain anda sendiri akan ditolak dengan No 'Access-Control-Allow-Origin' header is present on the requested resource sehingga asal tersebut disenaraikan dalam OLLAMA_ORIGINS. Jika halaman tersebut menggunakan HTTPS dan endpoint menggunakan HTTP, pelayar akan menyekat panggilan tersebut sebagai kandungan bercampur (mixed content) sebelum Ollama sempat melihatnya. Tetapkan kedua-dua pemboleh ubah dalam penggantian systemctl edit ollama.service, atau majukan port melalui SSH dan masalah tersebut akan selesai.