Lewati ke konten utama

Variabel Lingkungan

Halaman ini mencantumkan variabel lingkungan untuk operator yang didukung dan dibaca oleh backend, frontend, serta skrip pemeliharaan Libre WebUI saat ini. Canary internal khusus pengujian sengaja tidak disertakan.

Server Backend

VariabelBawaanTujuan
NODE_ENVdevelopmentMode runtime
PORT3001 dalam pengembangan, 8080 dalam produksiPort HTTP backend
TRUST_PROXYtidak ditetapkan (0 di Helm)Jumlah hop reverse proxy tepercaya yang persis untuk menentukan alamat klien
CORS_ORIGINorigin pengembangan lokalOrigin peramban yang diizinkan, dipisahkan koma
SERVE_FRONTENDtidak ditetapkanMenyajikan frontend hasil build dari backend jika true
DOCKER_ENVtidak ditetapkanMengaktifkan perilaku berorientasi Docker jika true
DATA_DIRbackend/data; ~/.libre-webui dalam CLI terpaketDirektori data persisten
PLATFORM_PREFLIGHT_TMP_DIRbackend/temp/preflight; cache pengguna dalam CLI terpaketRuang sementara untuk salinan pemeriksaan awal DB/WAL privat; sediakan ukuran database plus WAL
PLUGIN_UPLOAD_TEMP_DIRlibre-webui-plugin-uploads di bawah direktori sementara OSRuang sementara untuk unggahan plugin yang sedang berlangsung
PLUGINS_DIR$DATA_DIR/pluginsDirektori dapat-tulis untuk plugin terinstal/khusus
BASE_URLhttp://localhost:3001URL dasar untuk nilai bawaan callback OAuth
LOG_LEVELinfo (warn dalam pengujian)Tingkat log backend
LOG_FORMATtextjson beralih ke log satu baris terstruktur dengan stempel waktu, ID korelasi, dan penyuntingan
OTEL_EXPORTER_OTLP_ENDPOINTtidak ditetapkanEkspor telemetri JSON OTLP/HTTP opsional; tanpa nilai berarti telemetri tidak keluar dari proses
OTEL_EXPORTER_OTLP_HEADERStidak ditetapkanHeader key=value dipisahkan koma yang dikirim ke kolektor OTLP (misalnya autentikasi)
OTEL_SERVICE_NAMElibre-webuiAtribut sumber daya service.name pada telemetri yang diekspor
WEBUI_HOSTloopback; 0.0.0.0 di DockerAlamat dengar HTTP
OPEN_BROWSERtrue saat menyajikan frontendTetapkan false untuk mencegah peluncuran peramban otomatis
FULL_DOCUMENT_CONTEXT_MAX_TOKENS32000Pelindung token untuk mode konteks dokumen lengkap per chat (1000-2000000)
GALLERY_RETENTION_DAYStidak ditetapkan (simpan selamanya)Menghapus media galeri yang lebih tua dari jumlah hari ini melalui sapuan penjadwal
RECOVERY_DRILL_INTERVAL_HOURStidak ditetapkan (latihan nonaktif)Menjalankan latihan pemulihan terverifikasi otomatis setiap N jam (profil solo)
RECOVERY_DRILL_HISTORY60Entri riwayat latihan pemulihan yang dipertahankan

Peluncuran dari sumber menambatkan nilai relatif DATA_DIR, PLUGINS_DIR, dan PLATFORM_PREFLIGHT_TMP_DIR pada direktori backend, terlepas dari direktori kerja shell. Karena itu, jika DATA_DIR tidak ditetapkan—atau menggunakan contoh sumber baru DATA_DIR=./data—perintah ruang kerja root dan backend memakai backend/data. Demi kompatibilitas, konfigurasi sumber yang sudah ada dan memuat DATA_DIR=./backend/data tetap memilih backend/backend/data; ubah hanya sebagai bagian dari pencadangan dan migrasi disengaja saat layanan dihentikan. Profil sumber tanpa nilai juga tetap menggunakan backend/backend/data jika itu satu-satunya penyimpanan tahan lama yang ada. Jika kedua lokasi berisi keadaan dan tidak ada jalur dipilih, proses mulai menolak secara aman alih-alih menebak, menyalin, atau menggabungkan.

Peluncur npx, npm global, dan Homebrew interaktif menyimpan data di ~/.libre-webui. DATA_DIR relatif eksplisit yang diberikan kepada peluncur diselesaikan dari direktori kerja pemanggil dan diubah menjadi jalur absolut sebelum backend dimulai. PLUGINS_DIR relatif yang dikonfigurasi eksplisit mengikuti aturan relatif-pemanggil yang sama; jika tidak ditetapkan, plugin dapat-tulis tetap di $DATA_DIR/plugins. Ruang sementara inspeksi secara bawaan memakai cache dapat-tulis milik pengguna di luar direktori data: ~/Library/Caches/libre-webui pada macOS, %LOCALAPPDATA%\libre-webui pada Windows, atau ${XDG_CACHE_HOME:-~/.cache}/libre-webui pada sistem lain. Layanan Homebrew mengunci direktori data home yang sama dan menggunakan var/libre-webui/preflight milik Homebrew sebagai ruang sementara. Tetapkan PLATFORM_PREFLIGHT_TMP_DIR secara eksplisit jika cache tidak dapat menampung database beserta WAL-nya. Deployment Docker dan Helm yang disediakan memakai jalur absolut /app/backend/data dan /app/backend/temp/preflight dengan mount terpisah.

Fondasi Platform

Profil solo bawaan menggunakan SQLite, blob lokal terenkripsi, vektor tertanam terenkripsi, koordinasi lokal, dan worker tahan lama tertanam. Profil team menggunakan PostgreSQL, blob privat kompatibel S3, PGVector, Redis, dan worker eksternal. Konfigurasi team menolak secara aman: semua dependensi bersama harus dipilih sekaligus.

VariabelBawaanTujuan
LIBRE_PLATFORM_MODEsoloMemilih profil solo atau team yang koheren
DATABASE_BACKENDsqliteMemilih sqlite atau postgres
DATABASE_URLtidak ditetapkanURL koneksi PostgreSQL, wajib dengan postgres
DATABASE_SSL_MODEverify-fullKebijakan TLS PostgreSQL: disable, require, atau verify-full yang memverifikasi nama host
POSTGRES_MIGRATION_MODEapplyMenjalankan migrasi kompatibel di bawah kunci pemimpin, atau memakai validate untuk pemeriksaan skema hanya baca
POSTGRES_POOL_MAX10Koneksi PostgreSQL maksimum per proses aplikasi atau worker (1-100)
POSTGRES_CONNECT_TIMEOUT_MS5000Batas waktu koneksi PostgreSQL (1-60000 ms)
POSTGRES_IDLE_TIMEOUT_MS30000Batas waktu koneksi diam PostgreSQL (1-600000 ms)
POSTGRES_STATEMENT_TIMEOUT_MS30000Batas waktu pernyataan PostgreSQL (1-600000 ms)
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS60000Waktu menunggu kunci pemimpin migrasi (1-600000 ms)
BLOB_STORE_BACKENDlocalMemilih penyimpanan local terenkripsi atau s3 privat
VECTOR_STORE_BACKENDembedded dengan SQLiteMemilih vektor embedded terenkripsi atau pgvector
COORDINATION_BACKENDlocal dalam solo; redis dalam teamMemilih koordinasi lokal-proses atau Redis
REDIS_URLtidak ditetapkanURL redis: atau rediss:, wajib dengan koordinasi Redis
REDIS_KEY_PREFIXlibreNamespace 1-64 karakter untuk kunci koordinasi Libre
REDIS_CONNECT_TIMEOUT_MS5000Batas waktu koneksi awal Redis, maksimum 60 detik
JOB_WORKER_MODEembedded dalam solo; external dalam teamMenjalankan handler dalam aplikasi atau worker bersama mandiri
RESOURCE_LEASE_TTL_MS30000TTL sewa koordinasi bagi kepemilikan sumber daya pekerjaan tahan lama (5000-300000; proses mulai gagal di luar rentang)
JOB_WORKER_CONCURRENCY4Pekerjaan tahan lama yang dapat dijalankan bersamaan oleh satu worker (1-32)
CHAT_STREAM_EVENT_RETENTION_HOURS24Jam penyimpanan peristiwa potongan aliran chat sebelum sapuan per jam menghapusnya
PLATFORM_EVENT_RETENTION_DAYS30Hari penyimpanan setiap peristiwa tahan lama sebelum sapuan per jam menghapusnya
PLATFORM_JOB_RETENTION_DAYS30Hari penyimpanan pekerjaan non-siklus-hidup selesai sebelum sapuan per jam menghapusnya
LIBRE_SKIP_STARTUP_INTEGRITY_SCANtidak ditetapkan1 melewati pemindaian ciphertext lama mendalam pada proses mulai berikutnya (jalan keluar; hasil biasanya di-cache per generasi skema)
STORAGE_ENCRYPTION_KEYStidak ditetapkanPeta kunci JSON rahasia; saat ini harus memuat legacy yang cocok dengan ENCRYPTION_KEY
STORAGE_ENCRYPTION_ACTIVE_KEY_IDtidak ditetapkanID kunci untuk penulisan blob lokal dan vektor tertanam baru
BLOB_QUOTA_BYTES_PER_USER10737418240Byte blob teks biasa maksimum yang tahan lama per pemilik (bilangan bulat aman positif)
BLOB_QUOTA_RESERVATION_TTL_MS3600000Masa berlaku reservasi kuota streaming yang ditinggalkan (sedikitnya 60000 ms)
S3_BUCKETtidak ditetapkanBucket privat kompatibel S3, wajib dengan s3
S3_REGIONtidak ditetapkanRegion S3, wajib dengan s3
S3_ENDPOINTbawaan penyediaEndpoint HTTP(S) absolut opsional untuk MinIO atau layanan kompatibel lain
S3_ACCESS_KEY_IDrantai kredensial SDKKunci akses S3 eksplisit opsional
S3_SECRET_ACCESS_KEYrantai kredensial SDKWajib jika kunci akses eksplisit ditetapkan
S3_SESSION_TOKENtidak ditetapkanToken opsional yang menyertai kredensial S3 eksplisit
S3_FORCE_PATH_STYLEfalseTetapkan true untuk layanan yang memerlukan pengalamatan bergaya jalur
S3_BLOB_PREFIXlibre/blobsPrefiks kunci bucket buram milik Libre

Jika peta kunci penyimpanan berversi tidak tersedia, adapter penyimpanan menggunakan ENCRYPTION_KEY yang ada sebagai ID kunci legacy; jika nilai itu juga tidak tersedia, adapter membaca ${DATA_DIR}/.encryption_key yang ada tanpa membuat atau mengubahnya. Konfigurasi eksplisit dan berkas persisten harus cocok. Jika peta berversi diperkenalkan saat kunci lama tersedia, pertahankan kunci itu di bawah ID persis legacy sampai semua objek dan vektor telah ditulis ulang atau dibungkus ulang serta diverifikasi. Konflik, izin berkas tidak aman, symlink, dan kunci terkonfigurasi yang hilang ditolak secara aman.

Redis adalah koordinasi, bukan persistensi kanonis. Memilihnya saja tidak membuat SQLite, berkas lokal, atau keadaan lain milik proses aman di seluruh replika. Dalam mode team, batas laju HTTP, koneksi chat/WebSocket, pekerjaan penyedia STT/TTS/audio, impor arsip, dan sesi terminal Work menggunakan penerimaan bersama berbasis Redis. Kapasitas berlaku di seluruh replika, bukan sekali per proses. Kegagalan penerimaan dan izin yang dapat diperbarui mengembalikan 503 atau membatalkan operasi yang sedang berjalan; Libre tidak pernah kembali ke penghitung lokal independen. Lihat Fondasi Platform.

Profil Compose team dan chart Helm terpaket meneruskan setiap pemilih platform serta nilai penyetelan team di atas kepada aplikasi dan worker eksternal. Dalam chart Helm, pemilih nonrahasia berada di bawah env; tetapkan secrets.redisUrl, secrets.databaseUrl, dan secrets.storageEncryptionKeys untuk koneksi atau materi kunci. Batas pool PostgreSQL berlaku per proses: sediakan database untuk sedikitnya (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX koneksi, ditambah ruang operator dan migrasi. Pertahankan DATABASE_SSL_MODE=verify-full untuk PostgreSQL terkelola atau jarak jauh. Hanya profil Compose team terpaket yang memilih disable karena listener databasenya diisolasi pada jaringan proyek privat. Helm team juga memerlukan satu secrets.jwtSecret stabil dan memasang kunci Secret yang sama ke setiap pod aplikasi serta worker; jika rahasia JWT tidak ada, materi penandatanganan lokal-proses akan dibuat. S3 menerima kunci buram dan ciphertext; URL bucket serta penyedia tidak disimpan dalam metadata aplikasi.

Arsip solo dan team terintegrasi mempertahankan pengaturan pool dan batas waktu PostgreSQL, batas waktu koneksi Redis, kedua pengaturan kuota blob, pemilih platform, serta pengaturan pengalamatan S3 dalam konfigurasi terlindungi yang ditandatangani dan dienkripsi. Karena itu, pemulihan bersih dapat menerbitkan nilai operasional yang diperlukan untuk membuat ulang deployment yang cocok tanpa menempatkannya dalam metadata arsip teks biasa.

Pasangan aplikasi/worker eksternal Compose dan Helm team terpaket menerima OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT, dan OLLAMA_MAX_CONTEXT hasil resolusi yang sama. Panggilan penyedia untuk embedding dokumen, chat tahan lama, dan proses Work dijalankan dalam worker, sehingga nilai tersebut tidak boleh berbeda antarp proses. Kedua titik masuk server mengurai tiga nilai numerik sebagai bilangan bulat positif basis-10 lengkap sebelum membuat keadaan lokal atau terhubung ke keadaan bersama. Nilai parsial seperti 300000ms, notasi eksponen/heksadesimal, nilai di luar rentang, dan batas waktu operasi panjang di bawah batas waktu standar membuat proses mulai gagal.

Helm membatasi TRUST_PROXY ke jumlah hop bilangan bulat persis dari 0 hingga 16 dan hanya meneruskannya ke pod aplikasi HTTP. Pertahankan nilai bawaan 0 untuk lalu lintas langsung. Tetapkan jumlah tetap yang persis untuk rantai ingress/load balancer; jangan pernah gunakan bentuk true runtime yang tidak terbatas. Jumlah yang salah akan mengelompokkan klien di bawah alamat proksi untuk batas laju bersama atau memercayai alamat yang dapat diberikan klien.

Kompatibilitas skema PostgreSQL menggunakan versi persis. Aplikasi dan worker Helm menggunakan Recreate; kuras dan hentikan setiap pod lama sebelum peningkatan team, lalu biarkan satu proses baru bermigrasi di bawah kunci pemimpin advisory. Jangan jalankan versi biner campuran atau mengklaim peluncuran skema tanpa waktu henti. Rollback berarti memulihkan arsip team terverifikasi sebelum peningkatan ke tujuan PostgreSQL/S3 yang bersih sebelum memulai biner lama yang cocok.

Aplikasi team aktif memerlukan worker.replicaCount >= 1; Helm menolak aplikasi aktif tanpa worker tahan lama, bukan menunggu kesiapan gagal. Tetapkan jumlah aplikasi dan worker ke nol untuk penangguhan penuh. Aplikasi nol dengan jumlah worker positif merupakan mode pengurasan atau pemulihan khusus-worker yang disengaja dan terus mengonsumsi pekerjaan antrean tanpa melayani lalu lintas web.

Pembantu Cadangan Privat

Variabel ini mengonfigurasi deploy/private/libre-webui-backup dan dibaca oleh skrip pemeliharaan, bukan proses aplikasi:

VariabelBawaanTujuan
LIBRE_WEBUI_STACK_DIR/opt/libre-webuiDirektori yang memuat berkas Compose privat
LIBRE_WEBUI_BACKUP_DIR/var/backups/libre-webuiDirektori terlindungi untuk set cadangan dan berkas kunci
LIBRE_WEBUI_BACKUP_RETENTION_DAYS14Usia saat set cadangan selesai dihapus
LIBRE_WEBUI_CONTAINER_NAMElibre-webuiKontainer aplikasi ter-deploy yang akan diperiksa
LIBRE_WEBUI_BACKUP_KEY_DIR/etc/libre-webui/backup-keysDirektori kunci enkripsi dan penandatanganan arsip privat
LIBRE_WEBUI_RESTORE_IMAGEwajib untuk pemulihanID atau digest image Libre yang tidak dapat diubah dan telah ditinjau
LIBRE_WEBUI_RESTORE_CONFIG_DIRjalur per volume di bawah /etc/libre-webui/restoredDirektori baru untuk konfigurasi hasil pemulihan

Unit systemd memuat override cadangan dari berkas opsional milik root /etc/libre-webui/backup.env. Tetapkan modenya ke 0600. Direktori stack, retensi, nama kontainer, dan direktori kunci cadangan dapat ditetapkan langsung di sana. Sandbox sistem berkas unit hanya mengizinkan penulisan di bawah direktori cadangan bawaan. LIBRE_WEBUI_BACKUP_DIR khusus juga memerlukan direktori persis yang telah dibuat sebelumnya dalam drop-in layanan ReadWritePaths=; lihat Deployment Jarak Jauh Privat.

Autentikasi dan Keamanan

VariabelBawaanTujuan
ENABLE_SIGNUPfalseMengizinkan pendaftaran setelah administrator lokal pertama
JWT_SECRETdibuat/fallback dalam pengembanganRahasia penandatanganan JWT; tetapkan eksplisit dalam produksi
JWT_EXPIRES_IN7dMasa berlaku token sesi
ENCRYPTION_KEYdibuat otomatisKunci heksadesimal 64 karakter untuk nilai terenkripsi
DEBUG_ENCRYPTIONtidak ditetapkanMencatat keluaran debug enkripsi jika ditetapkan
TURNSTILE_SITE_KEYtidak ditetapkanKunci situs Cloudflare Turnstile untuk login dan pendaftaran
TURNSTILE_SECRET_KEYtidak ditetapkanKunci rahasia Cloudflare Turnstile untuk verifikasi backend
TURNSTILE_EXPECTED_HOSTNAMEnama host dari BASE_URLNama host wajib dalam respons verifikasi Cloudflare
MFA_REQUIRED_MODEtidak ditetapkan (sakelar admin, optional)Mengunci kebijakan dua faktor ke optional atau required
WEBAUTHN_RP_IDnama host permintaanID relying party tetap untuk passkey di balik banyak nama host
VAPID_PUBLIC_KEYdibuat dan disimpan terenkripsiMengunci kunci publik VAPID Web Push (titik P-256 base64url)
VAPID_PRIVATE_KEYdibuat dan disimpan terenkripsiMengunci kunci privat VAPID Web Push (skalar base64url)
VAPID_SUBJECTmailto:admin@localhostKlaim kontak dalam otorisasi Web Push bertanda tangan

Turnstile hanya diaktifkan ketika kedua kunci Turnstile tersedia.

ENABLE_SIGNUP=false tetap mengizinkan administrator lokal pertama pada database kosong, lalu memblokir akun lokal dan OAuth tambahan. Lindungi rute awal yang dapat dijangkau dari jauh dengan batas identitas luar sebelum proses mulai pertama.

Setiap JWT yang diterbitkan diikat pada sesi sisi server (klaim sid), sehingga keluar atau mencabut sesi dari Pengaturan → Sesi langsung membatalkan token pada setiap replika dan menutup koneksi WebSocket aktif. Retensi audit keamanan dapat dikonfigurasi:

VariabelBawaanTujuan
AUDIT_RETENTION_DAYS180Hari penyimpanan baris dalam log peristiwa audit keamanan

Single Sign-On OIDC Generik

Setiap penyedia OpenID Connect dengan dokumen penemuan dapat digunakan untuk login. Alur menggunakan PKCE (S256), keadaan CSRF, dan nonce yang diverifikasi di dalam token ID dengan tanda tangan terperiksa. Identitas ditautkan pada klaim sub yang stabil.

VariabelBawaanTujuan
OIDC_ISSUER_URLtidak ditetapkanURL dasar penerbit; penemuan diambil dari <issuer>/.well-known/openid-configuration
OIDC_CLIENT_IDtidak ditetapkanID klien OAuth yang terdaftar pada penyedia
OIDC_CLIENT_SECRETtidak ditetapkanRahasia klien OAuth
OIDC_DISPLAY_NAMESingle Sign-OnLabel yang tampil pada tombol login
OIDC_SCOPESopenid profile emailCakupan yang diminta
OIDC_CALLBACK_URLBASE_URL + rute callback OIDCURI pengalihan yang terdaftar pada penyedia
OIDC_ALLOWED_EMAIL_DOMAINStidak ditetapkanDaftar dipisahkan koma; jika ditetapkan, email terverifikasi di salah satu domain wajib
OIDC_GROUP_CLAIMgroupsKlaim token ID yang memuat nama grup
OIDC_ADMIN_GROUPStidak ditetapkanDaftar dipisahkan koma; jika ditetapkan, peran admin mengikuti keanggotaan klaim tiap login
OIDC_SYNC_GROUPSfalsetrue menyelaraskan keanggotaan grup Libre dengan klaim grup pada setiap login

OIDC hanya diaktifkan jika URL penerbit, ID klien, dan rahasia klien semuanya tersedia. Email yang sudah digunakan akun lokal tidak tertaut ditolak, bukan digabungkan diam-diam, dan pembuatan akun tetap mematuhi ENABLE_SIGNUP.

Penerimaan WebSocket Chat dapat disetel tanpa melemahkan autentikasi:

VariabelBawaanTujuan
CHAT_WS_MAX_PAYLOAD_BYTES10 MiBUkuran pesan WebSocket maksimum yang diterima
CHAT_WS_MAX_MESSAGES_PER_MINUTE120Batas pesan WebSocket per koneksi
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER4Pembuatan penyedia yang diizinkan per akun
CHAT_WS_MAX_CONNECTIONS_PER_USER5Soket terautentikasi bersamaan per akun
WEBSOCKET_TICKET_TTL_MS30000Masa berlaku tiket Chat/Work sekali pakai; maksimum 60 detik

Peramban menukar header Authorization normalnya dengan tiket buram dan hanya menempatkan nilai berumur singkat tersebut dalam URL peningkatan WebSocket. Tiket hanya dapat digunakan sekali, terikat protokol dan sesi, serta hanya disimpan sebagai hash. Dengan demikian, token sesi tahan lama tidak masuk ke log target-permintaan reverse proxy. Jika CORS_ORIGIN atau BASE_URL dikonfigurasi, peningkatan peramban dengan header Origin harus cocok dengan salah satu origin yang dikonfigurasi. Tetapkan sedikitnya satu pada deployment yang dapat dijangkau dari jauh; jika keduanya tidak dikonfigurasi, filter Origin bersifat permisif demi kompatibilitas pengembangan lokal. Peningkatan tanpa origin sengaja tetap didukung untuk Electron dan klien nonperamban, tempat kontrol Origin peramban tidak tersedia; klien tetap memerlukan tiket sekali pakai yang valid dan menerima pemeriksaan akun saat ini, akses Work, serta tugas yang sama. Perlakukan tiket sebagai batas autentikasi dan batasi akses nonperamban dengan kontrol TLS, firewall, dan reverse proxy normal deployment.

OAuth

VariabelTujuan
GITHUB_CLIENT_IDID klien GitHub OAuth
GITHUB_CLIENT_SECRETRahasia klien GitHub OAuth
GITHUB_CALLBACK_URLOverride URL callback GitHub
HUGGINGFACE_CLIENT_IDID klien Hugging Face OAuth
HUGGINGFACE_CLIENT_SECRETRahasia klien Hugging Face OAuth
HUGGINGFACE_CALLBACK_URLOverride URL callback Hugging Face

Jika URL callback tidak ditetapkan, Libre WebUI membuat nilai bawaan dari BASE_URL.

Ollama

VariabelBawaanTujuan
OLLAMA_BASE_URLhttp://localhost:11434URL dasar API Ollama
OLLAMA_TIMEOUT300000Batas waktu permintaan Ollama standar (1.000-3.600.000 ms)
OLLAMA_LONG_OPERATION_TIMEOUT900000Batas waktu operasi panjang (1.000-3.600.000 ms dan tidak lebih pendek dari OLLAMA_TIMEOUT)
OLLAMA_MAX_CONTEXT32768Konteks model maksimum yang diadopsi otomatis (128-2.097.152 token)

Pencarian Web

VariabelBawaanTujuan
SEARXNG_URLtidak ditetapkanEndpoint SearXNG bawaan untuk pengaturan pencarian web; admin tetap mengaktifkannya di Pengaturan > Pencarian

Libre Claw

VariabelBawaanTujuan
LIBRE_CLAW_BASE_URLhttp://127.0.0.1:8766URL daemon Libre Claw opsional
LIBRE_CLAW_TIMEOUT_MS30000Batas waktu permintaan HTTP Libre Claw

Runtime Work

Variabel berikut mengonfigurasi eksekusi Work pada mesin atau klaster Kubernetes yang menjalankan backend Libre WebUI. Docker adalah runtime bawaan; chart Helm memilih Kubernetes ketika work.enabled=true.

VariabelBawaanTujuan
WORK_RUNTIME_IMAGEnode:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3Image terkunci yang digunakan untuk sandbox Work
WORK_DOCKER_COMMANDdockerProgram CLI backend Docker yang tersedia bagi proses
WORK_COMMAND_TIMEOUT_MS120000Batas waktu bawaan; alat dapat meminta hingga 600000 ms
WORK_MAX_OUTPUT_CHARS50000Batas stdout/stderr yang ditangkap, diterapkan pada setiap aliran
WORK_MAX_AGENT_ROUNDS48Anggaran putaran model/alat yang tidak bergantung penyedia untuk satu proses
WORK_STATUS_BLURB_MODEL1Tetapkan 0 untuk melewati satu permintaan model yang menulis baris status agen di bilah samping setelah proses
WORK_MEMORY_LIMIT2gBatas memori yang diberikan kepada setiap kontainer Work
WORK_CPU_LIMIT2Batas CPU yang diberikan kepada setiap kontainer Work
WORK_PIDS_LIMIT256Batas proses yang diberikan kepada setiap kontainer Work
WORK_PREVIEW_PORT4173Port yang harus digunakan server pratinjau di dalam kontainer tugas
WORK_PREVIEW_BIND127.0.0.1Antarmuka host tempat port pratinjau tugas diterbitkan; deployment Compose pada Docker Engine native harus memakai antarmuka bridge non-publik yang dapat dijangkau
WORK_DOCKER_PUBLISHED_HOSTbawaan aplikasi: sama dengan WORK_PREVIEW_BIND; bawaan Compose: host.docker.internalHost/IP yang dilihat backend untuk port pratinjau, layar, dan audio terbitan Docker
WORK_COMPUTER_SCREEN_PORT6080Port kontainer jembatan layar Work Computer (websockify) dalam sandbox ber-GUI
WORK_COMPUTER_AUDIO_PORT6081Port kontainer jembatan audio Work Computer (websockify → monitor PulseAudio) dalam sandbox ber-GUI
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL3Tugas berbasis runtime bersamaan untuk seluruh instans
WORK_MAX_ACTIVE_RUNTIMES_PER_USER2Tugas berbasis runtime bersamaan untuk satu pengguna
WORK_MAX_TASKS_GLOBAL500Tugas Work persisten maksimum untuk seluruh instans
WORK_MAX_TASKS_PER_USER100Tugas Work persisten maksimum untuk satu administrator
WORK_NETWORK_NAMElibre-webui-workJaringan bridge sandbox terkelola untuk tugas berjejaring
WORK_RUN_LEASE_WAIT_MS60000Lama proses menunggu sewa runtime bersama tugas sebelum melaporkan konflik replika (mode team)
WORK_RUNTIME_DNStidak ditetapkanIP resolver dipisahkan koma yang dipaksakan pada tugas berjejaring
WORK_DOCKER_SOCKETDOCKER_HOST jika unix:// atau tcp://, selain itu /var/run/docker.sockEndpoint Docker Engine untuk terminal dan diagnostik
WORK_TERMINAL_MAX_SESSIONS_PER_TASK2Terminal peramban bersamaan yang terhubung ke satu tugas
WORK_TERMINAL_IDLE_TIMEOUT_MS900000Batas waktu diam sebelum sesi terminal ditutup
WORK_RUNTIME_IDLE_TIMEOUT_MS0 (dinonaktifkan)Menghentikan sandbox setelah durasi tanpa aktivitas ini (termasuk pratinjau)
WORK_HOST_WORKSPACES_ENABLEDfalseMengizinkan tugas memakai folder host alih-alih volume
WORK_HOST_WORKSPACE_ROOTSdirektori home pengguna serverRoot dipisahkan : yang harus menaungi ruang kerja host
WORK_RUNTIME_BACKENDdockerBackend sandbox: docker atau kubernetes
WORK_K8S_NAMESPACElibre-webui-workNamespace yang memuat Pod dan PVC sandbox Kubernetes
WORK_K8S_STORAGE_CLASSbawaan klasterStorageClass untuk PVC ruang kerja
WORK_K8S_WORKSPACE_SIZE5GiUkuran PVC ruang kerja per tugas (kuota disk nyata)
WORK_K8S_POD_READY_TIMEOUT_MS900000Waktu menunggu Pod sandbox mencapai Running (mencakup pengunduhan)
WORK_K8S_POD_GONE_TIMEOUT_MS60000Waktu menunggu Pod sandbox yang dihapus menghilang
AGENT_CLI_MODELS_ENABLEDtidak ditetapkan (sakelar admin, nonaktif)Mengunci fitur Agen aktif/nonaktif; tanpa nilai mengikuti sakelar admin di Pengelolaan Pengguna (bawaan nonaktif)
TOOLS_ACCESS_MODEtidak ditetapkan (sakelar admin, khusus admin)Mengunci alat chat ke admins atau all-users dan mengunci sakelar admin di Pengelolaan Pengguna
STT_ACCESS_MODEtidak ditetapkan (sakelar admin, semua pengguna)Mengunci ucapan-ke-teks ke admins atau all-users dan mengunci sakelar admin di Pengelolaan Pengguna
TTS_ACCESS_MODEtidak ditetapkan (sakelar admin, semua pengguna)Mengunci teks-ke-ucapan ke admins atau all-users dan mengunci sakelar admin di Pengelolaan Pengguna
VOICE_MODE_ACCESS_MODEtidak ditetapkan (sakelar admin, semua pengguna)Mengunci mode suara bebas genggam ke admins atau all-users dan mengunci sakelar admin di Pengelolaan Pengguna
VOICE_CLONING_ACCESS_MODEtidak ditetapkan (sakelar admin, semua pengguna)Mengunci kloning suara ke admins atau all-users dan mengunci sakelar admin di Pengelolaan Pengguna
TOOLS_PRIVATE_NETWORK_ALLOWLISTtidak ditetapkanNama host persis yang boleh diresolusi server alat dan target webhook ke alamat privat (dipisahkan koma); dikunci
AGENT_CLI_TIMEOUT_MS600000Waktu CLI agen boleh berjalan sebelum dihentikan
CODEX_OAUTH_MODELS_ENABLEDtrueMenawarkan penyedia Codex (ChatGPT) kepada admin
CODEX_HOME~/.codexLokasi pembacaan login CLI Codex (auth.json)

Biner CLI agen dan kredensial Codex OAuth bersifat lokal-node. Keduanya hanya didukung dalam proses solo, tempat penemuan dan eksekusi melihat sistem berkas serta lingkungan yang sama. Mode team mengeksekusi pekerjaan chat tahan lama dalam worker eksternal, sehingga mengharuskan AGENT_CLI_MODELS_ENABLED=false dan CODEX_OAUTH_MODELS_ENABLED=false; proses mulai menolak nilai lain, bukan mengiklankan penyedia yang mungkin hanya tersedia pada satu replika aplikasi. Gunakan Ollama atau plugin penyedia yang kredensial dan peruteannya disimpan dalam PostgreSQL bersama atau diteruskan secara identik ke setiap aplikasi dan worker.

Pada backend Docker, ruang kerja host melakukan bind-mount direktori nyata di /workspace, sehingga tugas dapat membaca dan menulis berkas tersebut secara langsung alih-alih bekerja dalam volume Docker tersendiri. Kubernetes menolak ruang kerja folder host. Ini sengaja mengurangi perlindungan sandbox Docker: biarkan WORK_HOST_WORKSPACES_ENABLED nonaktif kecuali memang diinginkan, dan jaga WORK_HOST_WORKSPACE_ROOTS sesempit mungkin. Jalur yang diminta diselesaikan melalui symlink sebelum diperiksa terhadap root, dan folder seperti .ssh, .gnupg, .aws, serta .config ditolak sepenuhnya.

Model CLI agen mengekspos agen pemrograman yang sudah terinstal pada server (claude, codex) sebagai model chat yang dapat dipilih, sehingga agen berlangganan dapat menjawab tanpa kunci API. Hanya administrator yang melihatnya, CLI berjalan sebagai pengguna server Libre WebUI, dan mewarisi kredensial agen milik pengguna tersebut—perlakukan sebagai setara dengan memberikan akses shell kepada agen itu.

Di Docker, tugas Work berjejaring terhubung ke bridge WORK_NETWORK_NAME terkelola, yang dibuat dengan komunikasi antarkontainer dinonaktifkan agar satu sandbox tidak dapat menjangkau sandbox lain atau kontainer milik deployment. WORK_RUNTIME_DNS adalah kait kebijakan egress Docker yang didukung: arahkan ke resolver pemfilter untuk menerapkan daftar izin/tolak berbasis nama. Entri yang bukan alamat IPv4/IPv6 ditolak dan dicatat. Pemfilteran DNS tidak membatasi egress IP langsung; tambahkan aturan firewall host jika deployment memerlukannya. Backend Kubernetes menggunakan NetworkPolicy tolak-bawaan milik chart dan nilai work.networkPolicy.blockedEgressCidrs.

Di Docker, terminal interaktif dan diagnostik sistem berkomunikasi langsung dengan API Docker Engine. Keduanya mengikuti WORK_DOCKER_SOCKET jika ditetapkan, lalu DOCKER_HOST—baik soket unix:// maupun endpoint tcp:// HTTP biasa seperti proksi soket (lihat docker-compose.socket-proxy.yml)—atau /var/run/docker.sock. DOCKER_HOST yang tidak dapat digunakan klien ini (ssh://, atau tcp:// dengan DOCKER_TLS_VERIFY ditetapkan) membuat terminal dan diagnostik Docker dilaporkan tidak tersedia; bagian Work lainnya tetap berjalan melalui CLI Docker, yang memahami endpoint tersebut sendiri. Pada Kubernetes, terminal menggunakan subsumber daya exec Pod dan tidak memakai endpoint Docker.

Work membaca nilai ini saat backend dimulai. Port pratinjau bersifat internal bagi kontainer tugas; Libre WebUI menerbitkannya ke port loopback yang ditetapkan dinamis, bukan mengekspos nilai ini secara langsung pada setiap antarmuka host.

Kunci image runtime pada versi atau digest yang telah ditinjau. Menaikkan konkurensi atau batas sumber daya meningkatkan kapasitas runtime yang dapat digunakan satu atau beberapa proses otonom. WORK_MAX_AGENT_ROUNDS berlaku sama pada proses berbasis Ollama dan plugin; tidak ada batas bawah khusus plugin. Anggaran keamanan panggilan alat adalah max(128, WORK_MAX_AGENT_ROUNDS × 8). Ketika proses menghabiskan anggaran putarannya, Work meminta penyerahan akhir tanpa alat dari model dan berakhir dalam keadaan terminal needs_input, bukan mengembalikan kesalahan batas putaran mentah atau mengklaim selesai. Proses lanjutan meneruskan dalam ruang kerja tahan lama yang sama. Keluaran alat persisten memiliki batas terpisah sekitar 20.000 karakter sumber ditambah penanda pemotongan.

Variabel berikut menyetel runtime Work yang sudah dapat dijangkau. Deployment Compose satu instans dari repositori mengaktifkannya secara bawaan: image menyertakan CLI Docker dan berkas Compose tersebut memasang soket Docker host. Dua variabel tingkat Compose mengontrol sambungan ini:

VariabelBawaanTujuan
DOCKER_GID0ID grup soket Docker host, ditambahkan ke pengguna kontainer
DOCKER_SOCKET/var/run/docker.sockJalur host soket Docker yang akan dipasang

DOCKER_GID harus berupa grup soket sebagaimana terlihat dari dalam kontainer; host macOS melaporkan nilai berbeda. Dasar Compose team tidak memasang soket dan membuat Work berbasis Docker tidak tersedia sampai docker-compose.team.work.yml ditambahkan. Overlay produksi tersebut memberi aplikasi dan worker endpoint proksi terfilter internal yang sama, tidak pernah mount atau grup soket. Proksi hanya mengizinkan bagian API Docker yang digunakan runtime, tetapi pembuatan kontainer tetap merupakan kredensial kontrol host Docker; gunakan daemon Work khusus atau tanpa root untuk batas yang lebih kuat. Chart Helm tidak pernah memasang soket runtime node. Aktifkan backend Work Pod/PVC native dengan work.enabled=true.

Profil solo harus tetap memiliki nol atau satu replika aplikasi karena menggunakan SQLite, berkas lokal, dan koordinasi lokal-proses. Chart Helm menerima nol untuk penangguhan disengaja dan menolak jumlah replika solo yang lebih besar atau penskalaan otomatis solo. Profil team lengkap dapat memakai beberapa replika aplikasi dan worker eksternal karena PostgreSQL, S3, PGVector, serta Redis memiliki keadaan bersama. Pod sandbox Work diskalakan secara independen dalam kedua profil; dalam mode team, worker eksternal menerima image runtime Kubernetes, StorageClass, dan batas work.env yang sama dengan pod aplikasi.

Berkas Compose repositori juga menerima WEBUI_BIND_ADDRESS (bawaan 127.0.0.1) dan WEBUI_PORT (bawaan 8080). Pertahankan loopback bawaan kecuali LAN tepercaya atau reverse proxy host harus menjangkau port tersebut.

Penemuan Model Penyedia

Katalog model penyedia ditemukan ulang secara otomatis jika hilang atau usang, sehingga pemuatan ulang mencerminkan model yang saat ini dilayani penyedia. Variabel berikut menyetel siklus tersebut:

VariabelBawaanTujuan
PLUGIN_MODEL_DISCOVERY_TTL_MS21600000 (6 jam)Usia saat katalog tersimpan disegarkan pada pembacaan daftar plugin berikutnya
PLUGIN_MODEL_DISCOVERY_RETRY_MS600000 (10 menit)Jeda minimum antarupaya agar penyedia gagal tidak sering diperiksa
PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS3000Lama respons daftar plugin menunggu penyegaran sebelum menjawab

Penyegaran yang melampaui tenggat tetap selesai dan disajikan pada permintaan berikutnya. Segarkan model yang eksplisit selalu menghubungi penyedia dan mengabaikan interval.

Kunci Plugin Penyedia

Plugin penyedia dapat menggunakan kunci lingkungan sebagai nilai bawaan seluruh deployment:

VariabelPenyedia
OPENAI_API_KEYOpenAI dan OpenAI TTS
ANTHROPIC_API_KEYAnthropic
GROQ_API_KEYGroq
GEMINI_API_KEYGoogle Gemini
MISTRAL_API_KEYMistral
OPENROUTER_API_KEYOpenRouter
KIMI_API_KEYKimi Code dari Moonshot AI
GITHUB_API_KEYGitHub Models
HUGGINGFACE_API_KEYAPI Hugging Face jika dikonfigurasi
ELEVENLABS_API_KEYElevenLabs TTS
COMFYUI_API_KEYDeployment ComfyUI yang memerlukan kunci API

Pengguna juga dapat menyimpan kredensial penyedia dalam UI jika kunci per pengguna lebih diutamakan. Kunci lingkungan hanya digunakan dengan proyeksi perutean dan autentikasi dari definisi terpaket yang tidak dibayangi. Definisi impor, definisi dapat-tulis yang memakai ulang ID terpaket, dan rute khusus tersimpan administrator memerlukan kredensial yang disimpan akun tersebut. Libre WebUI tidak akan memasang kunci lingkungan pada rute tersebut atau mengeksposnya melalui pemeriksaan penemuan dan ketersediaan. Kepercayaan berasal dari hash terkompilasi setiap manifes yang dikirim, sehingga tata letak kontainer tempat direktori plugin lama dan terpaket berbagi jalur tetap didukung tanpa menganggap manifes yang diubah sebagai terpaket.

Kunci tersimpan pengguna diikat pada definisi penyedia efektif, sumber, kontrak autentikasi, dan nilai perutean. Pengguna harus menyimpan kembali kunci setelah administrator mengubah tujuan tersebut. Kunci tanpa ikatan sebelum peningkatan hanya diterima dan diikat pada penggunaan pertama untuk definisi kiriman yang persis menggunakan rute terpaketnya.

Untuk peluncuran dari sumber, nilai relatif PLUGINS_DIR diselesaikan dari direktori backend. Peluncur terpaket mengubah nilai relatif yang dikonfigurasi eksplisit menjadi jalur absolut-pemanggil sebelum memulai backend. Demi kompatibilitas, Libre juga membaca direktori deterministik backend/plugins dan lokasi historis yang dipilih konfigurasi sebelumnya. Pindahkan definisi tersebut ke $DATA_DIR/plugins; pemulihan melaporkan jalur lama sebagai keadaan eksternal dan memblokir snapshot khusus-volume selama definisi khusus tetap di sana. Direktori plugin dan definisi JSON harus berupa entri fisik biasa—Libre tidak mengikuti symlink plugin.

Frontend

VariabelBawaanTujuan
VITE_API_BASE_URLproksi pengembangan origin-sama atau API produksiURL dasar API frontend
VITE_WS_BASE_URLdisimpulkan dari URL APIDasar ws:/wss: absolut untuk soket Chat dan Work
VITE_APP_VERSIONversi paket yang disuntikkan konfigurasi ViteVersi aplikasi yang ditampilkan
VITE_DEMO_MODEfalseMengaktifkan tiruan mode demo jika true
VITE_API_TIMEOUT300000Batas waktu API frontend dalam milidetik
VITE_BACKEND_URLhttp://localhost:3001Digunakan sebagian komponen pembantu autentikasi
VITE_DEBUG_VERBOSEtidak ditetapkanMengaktifkan log debug frontend terperinci dalam pengembangan
VITE_LOG_LEVELtidak ditetapkanMengganti tingkat log frontend
ELECTRON_BUILDtidak ditetapkanMengaktifkan perilaku Vite khusus Electron jika true

VITE_WS_BASE_URL mengganti setiap fallback WebSocket bagi Chat dan terminal Work. Nilai ini boleh memuat prefiks jalur reverse proxy, tetapi harus berupa URL ws: atau wss: absolut tanpa kredensial, kueri, atau fragmen. Jika tidak ditetapkan, klien Electron file: menggunakan ws://localhost:3001; klien peramban menurunkan dasarnya dari VITE_API_BASE_URL, lalu origin peramban. Vite mem-proksi origin pengembangan ke backend pada port 3001.

Skrip Pemeliharaan

VariabelTujuan
CHANGELOG_AITetapkan 0 untuk menonaktifkan draf changelog berbantuan AI
CHANGELOG_AI_MODELModel Ollama untuk pembuatan rilis/changelog
CHANGELOG_AI_TIMEOUT_MSBatas waktu pembuatan changelog AI dalam milidetik

Contoh:

CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor

Contoh Produksi

NODE_ENV=production
PORT=3001
SERVE_FRONTEND=true
DATA_DIR=/data/libre-webui
CORS_ORIGIN=https://librewebui.example
BASE_URL=https://librewebui.example

JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
ENABLE_SIGNUP=false

OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_TIMEOUT=300000
OLLAMA_LONG_OPERATION_TIMEOUT=900000
OLLAMA_MAX_CONTEXT=32768

TURNSTILE_SITE_KEY=...
TURNSTILE_SECRET_KEY=...
TURNSTILE_EXPECTED_HOSTNAME=librewebui.example

Dokumentasi Terkait