ตัวแปรสภาพแวดล้อม
หน้านี้แสดงตัวแปรสภาพแวดล้อมสำหรับผู้ปฏิบัติงานที่ backend, frontend และสคริปต์บำรุงรักษา Libre WebUI ปัจจุบันอ่าน โดยละเว้น canary ภายในที่ใช้เฉพาะการทดสอบ
เซิร์ฟเวอร์ backend
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
NODE_ENV | development | โหมด runtime |
PORT | 3001 ในการพัฒนา, 8080 ใน production | พอร์ต HTTP ของ backend |
TRUST_PROXY | ไม่ตั้ง (0 ใน Helm) | จำนวน hop ของ reverse proxy ที่เชื่อถือเพื่อหาที่อยู่ไคลเอนต์ |
CORS_ORIGIN | origin พัฒนาในเครื่อง | origin เบราว์เซอร์ที่อนุญาต คั่นด้วยจุลภาค |
SERVE_FRONTEND | ไม่ตั้ง | ให้ backend เสิร์ฟ frontend ที่ build เมื่อ true |
DOCKER_ENV | ไม่ตั้ง | เปิดลักษณะการทำงานสำหรับ Docker เมื่อ true |
DATA_DIR | backend/data; ~/.libre-webui ใน CLI แบบแพ็ก | ไดเรกทอรีข้อมูลถาวร |
PLATFORM_PREFLIGHT_TMP_DIR | backend/temp/preflight; cache ผู้ใช้ใน CLI แบบแพ็ก | พื้นที่ชั่วคราวสำหรับสำเนาตรวจ DB/WAL ตอนเริ่ม ให้พอสำหรับฐานข้อมูลและ WAL |
PLUGIN_UPLOAD_TEMP_DIR | libre-webui-plugin-uploads ใต้ไดเรกทอรีชั่วคราว OS | พื้นที่ชั่วคราวสำหรับ plugin ที่กำลังอัปโหลด |
PLUGINS_DIR | $DATA_DIR/plugins | ไดเรกทอรีเขียนได้สำหรับ plugin ที่ติดตั้ง/กำหนดเอง |
BASE_URL | http://localhost:3001 | URL ฐานสำหรับ callback OAuth เริ่มต้น |
LOG_LEVEL | info (warn ในการทดสอบ) | ระดับบันทึก backend |
LOG_FORMAT | text | json เปลี่ยนเป็นบันทึกมีโครงสร้างหนึ่งบรรทัดพร้อมเวลา ID สหสัมพันธ์ และปกปิดข้อมูล |
OTEL_EXPORTER_OTLP_ENDPOINT | ไม่ตั้ง | ส่งออก telemetry JSON OTLP/HTTP แบบเลือก ไม่ตั้งหมายถึงไม่มี telemetry ออกจากโปรเซส |
OTEL_EXPORTER_OTLP_HEADERS | ไม่ตั้ง | header key=value คั่นจุลภาคที่ส่งไปตัวเก็บ OTLP |
OTEL_SERVICE_NAME | libre-webui | แอตทริบิวต์ทรัพยากร service.name บน telemetry ที่ส่งออก |
WEBUI_HOST | loopback; 0.0.0.0 ใน Docker | ที่อยู่รับฟัง HTTP |
OPEN_BROWSER | true เมื่อเสิร์ฟ frontend | ตั้ง false เพื่อไม่เปิดเบราว์เซอร์อัตโนมัติ |
FULL_DOCUMENT_CONTEXT_MAX_TOKENS | 32000 | ตัวป้องกัน token สำหรับโหมดบริบทเอกสารเต็มต่อแชต (1000-2000000) |
GALLERY_RETENTION_DAYS | ไม่ตั้ง (เก็บตลอด) | ลบสื่อในคลังที่เก่ากว่าจำนวนวันนี้ผ่านการกวาดของตัวจัดกำหนดการ |
RECOVERY_DRILL_INTERVAL_HOURS | ไม่ตั้ง (ปิดการฝึก) | รันการฝึกกู้คืนที่ตรวจแล้วอัตโนมัติทุก N ชั่วโมง (โปรไฟล์ solo) |
RECOVERY_DRILL_HISTORY | 60 | จำนวนประวัติการฝึกกู้คืนที่เก็บ |
การรันจากต้นฉบับยึดค่า DATA_DIR, PLUGINS_DIR และ PLATFORM_PREFLIGHT_TMP_DIR แบบสัมพัทธ์ที่ไดเรกทอรี backend โดยไม่ขึ้นกับไดเรกทอรี shell เมื่อไม่ตั้ง DATA_DIR หรือใช้ตัวอย่างใหม่ DATA_DIR=./data คำสั่งพื้นที่ทำงาน root และ backend จะใช้ backend/data เพื่อความเข้ากันได้ ค่าที่มี DATA_DIR=./backend/data ยังเลือก backend/backend/data เปลี่ยนเฉพาะระหว่างการสำรองและย้ายที่หยุดระบบ โปรไฟล์ไม่ตั้งยังใช้ backend/backend/data หากเป็นคลังถาวรเดียว หากทั้งสองตำแหน่งมีสถานะและไม่เลือกเส้นทาง การเริ่มจะปฏิเสธแทนการเดา คัดลอก หรือรวม
ตัวเปิด npx, npm ส่วนกลาง และ Homebrew โต้ตอบจะเก็บข้อมูลใน ~/.libre-webui ค่า DATA_DIR สัมพัทธ์ที่ระบุจะคำนวณจากไดเรกทอรีผู้เรียกและแปลงเป็นเส้นทางสัมบูรณ์ก่อน backend เริ่ม PLUGINS_DIR สัมพัทธ์ใช้กฎเดียวกัน เมื่อไม่ตั้ง plugin เขียนได้อยู่ใน $DATA_DIR/plugins พื้นที่ตรวจเริ่มต้นเป็น cache ผู้ใช้เขียนได้ข้างนอกข้อมูล: ~/Library/Caches/libre-webui บน macOS, %LOCALAPPDATA%\libre-webui บน Windows หรือ ${XDG_CACHE_HOME:-~/.cache}/libre-webui บนระบบอื่น บริการ Homebrew ตรึงไดเรกทอรี home เดิมและใช้ var/libre-webui/preflight ตั้ง PLATFORM_PREFLIGHT_TMP_DIR เมื่อ cache ไม่พอฐานข้อมูลกับ WAL การติดตั้ง Docker และ Helm ใช้เส้นทางสัมบูรณ์ /app/backend/data และ /app/backend/temp/preflight บนเมานต์แยก
รากฐานแพลตฟอร์ม
โปรไฟล์ solo เริ่มต้นใช้ SQLite, blob ในเครื่องเข้ารหัส, vector ฝังเข้ารหัส, การประสานในเครื่อง และ worker ถาวรในตัว โปรไฟล์ team ใช้ PostgreSQL, blob ส่วนตัวที่เข้ากับ S3, PGVector, Redis และ worker ภายนอก การกำหนด team ปฏิเสธอย่างปลอดภัย โดยต้องเลือก dependency ร่วมทั้งหมดพร้อมกัน
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
LIBRE_PLATFORM_MODE | solo | เลือกโปรไฟล์ solo หรือ team ที่สอดคล้อง |
DATABASE_BACKEND | sqlite | เลือก sqlite หรือ postgres |
DATABASE_URL | ไม่ตั้ง | URL เชื่อม PostgreSQL ต้องมีเมื่อใช้ postgres |
DATABASE_SSL_MODE | verify-full | นโยบาย TLS PostgreSQL: disable, require หรือ verify-full ที่ตรวจชื่อโฮสต์ |
POSTGRES_MIGRATION_MODE | apply | รันการย้ายใต้ leader lock หรือใช้ validate เพื่อตรวจ schema แบบอ่านอย่างเดียว |
POSTGRES_POOL_MAX | 10 | การเชื่อม PostgreSQL สูงสุดต่อโปรเซสแอปหรือ worker (1-100) |
POSTGRES_CONNECT_TIMEOUT_MS | 5000 | timeout เชื่อม PostgreSQL (1-60000 ms) |
POSTGRES_IDLE_TIMEOUT_MS | 30000 | timeout การเชื่อม PostgreSQL ว่าง (1-600000 ms) |
POSTGRES_STATEMENT_TIMEOUT_MS | 30000 | timeout คำสั่ง PostgreSQL (1-600000 ms) |
POSTGRES_MIGRATION_LOCK_TIMEOUT_MS | 60000 | เวลารอ migration leader lock (1-600000 ms) |
BLOB_STORE_BACKEND | local | เลือกพื้นที่ local เข้ารหัสหรือ s3 ส่วนตัว |
VECTOR_STORE_BACKEND | embedded กับ SQLite | เลือก vector embedded เข้ารหัสหรือ pgvector |
COORDINATION_BACKEND | local ใน solo; redis ใน team | เลือกการประสานในโปรเซสหรือ Redis |
REDIS_URL | ไม่ตั้ง | URL redis: หรือ rediss: ต้องมีเมื่อประสานด้วย Redis |
REDIS_KEY_PREFIX | libre | namespace 1-64 อักขระสำหรับคีย์ประสาน Libre |
REDIS_CONNECT_TIMEOUT_MS | 5000 | timeout เชื่อม Redis ครั้งแรก สูงสุด 60 วินาที |
JOB_WORKER_MODE | embedded ใน solo; external ใน team | รันตัวจัดการในแอปหรือ worker ร่วมแยก |
RESOURCE_LEASE_TTL_MS | 30000 | TTL lease สำหรับเจ้าของทรัพยากรงานถาวร (5000-300000; นอกช่วงเริ่มไม่สำเร็จ) |
JOB_WORKER_CONCURRENCY | 4 | งานถาวรที่ worker หนึ่งรันพร้อมกัน (1-32) |
CHAT_STREAM_EVENT_RETENTION_HOURS | 24 | ชั่วโมงเก็บเหตุการณ์ส่วน stream แชตก่อนกวาดรายชั่วโมง |
PLATFORM_EVENT_RETENTION_DAYS | 30 | วันเก็บเหตุการณ์ถาวรก่อนกวาดรายชั่วโมง |
PLATFORM_JOB_RETENTION_DAYS | 30 | วันเก็บงานนอกวงจรชีวิตที่เสร็จก่อนกวาดรายชั่วโมง |
LIBRE_SKIP_STARTUP_INTEGRITY_SCAN | ไม่ตั้ง | 1 ข้ามสแกน ciphertext รุ่นเก่าเชิงลึกครั้งถัดไป (ปกติ cache ต่อรุ่น schema) |
STORAGE_ENCRYPTION_KEYS | ไม่ตั้ง | แผนที่คีย์ JSON ลับ ต้องมี legacy ตรงกับ ENCRYPTION_KEY |
STORAGE_ENCRYPTION_ACTIVE_KEY_ID | ไม่ตั้ง | ID คีย์สำหรับเขียน blob ในเครื่องและ vector ฝังใหม่ |
BLOB_QUOTA_BYTES_PER_USER | 10737418240 | ไบต์ blob ข้อความธรรมดาถาวรสูงสุดต่อเจ้าของ |
BLOB_QUOTA_RESERVATION_TTL_MS | 3600000 | อายุการจองโควตา streaming ที่ละทิ้ง (อย่างน้อย 60000 ms) |
S3_BUCKET | ไม่ตั้ง | bucket ส่วนตัวที่เข้ากับ S3 ต้องมีเมื่อใช้ s3 |
S3_REGION | ไม่ตั้ง | ภูมิภาค S3 ต้องมีเมื่อใช้ s3 |
S3_ENDPOINT | ค่าเริ่มต้นผู้ให้บริการ | endpoint HTTP(S) สัมบูรณ์ที่เลือกได้สำหรับ MinIO หรือบริการอื่น |
S3_ACCESS_KEY_ID | ห่วงโซ่ข้อมูล SDK | คีย์เข้าถึง S3 แบบระบุที่เลือกได้ |
S3_SECRET_ACCESS_KEY | ห่วงโซ่ข้อมูล SDK | ต้องมีเมื่อตั้งคีย์เข้าถึงชัดเจน |
S3_SESSION_TOKEN | ไม่ตั้ง | token ที่เลือกได้พร้อมข้อมูล S3 ชัดเจน |
S3_FORCE_PATH_STYLE | false | ตั้ง true สำหรับบริการที่ต้องใช้อ้างที่อยู่แบบเส้นทาง |
S3_BLOB_PREFIX | libre/blobs | คำนำหน้าคีย์ bucket แบบทึบที่ Libre เป็นเจ้าของ |
เมื่อไม่มีแผนที่คีย์แบบมีเวอร์ชัน adapter จะใช้ ENCRYPTION_KEY เดิมเป็น ID legacy; หากไม่มีด้วยจะอ่าน ${DATA_DIR}/.encryption_key เดิมโดยไม่สร้างหรือแก้ ค่าที่ระบุและไฟล์ถาวรต้องตรง หากเพิ่มแผนที่เมื่อมีคีย์เก่า ให้เก็บคีย์นั้นใต้ ID legacy จนเขียนหรือห่อออบเจ็กต์และ vector ใหม่ทั้งหมดพร้อมตรวจ ความขัดแย้ง สิทธิ์ไฟล์ไม่ปลอดภัย symlink และคีย์ที่ขาดจะถูกปฏิเสธ
Redis ใช้ประสาน ไม่ใช่พื้นที่ถาวรมาตรฐาน การเลือกเพียง Redis ไม่ทำให้ SQLite ไฟล์ในเครื่อง หรือสถานะของโปรเซสปลอดภัยข้าม replica ในโหมด team ขีดจำกัด HTTP การเชื่อมแชต/WebSocket งานผู้ให้บริการ STT/TTS/เสียง การนำเข้าคลัง และ terminal Work ใช้การรับร่วมผ่าน Redis ความจุใช้รวมทุก replica ข้อผิดพลาดการรับหรือการต่อสิทธิ์ส่ง 503 หรือยกเลิก Libre ไม่กลับไปตัวนับในเครื่องแยก
ดู รากฐานแพลตฟอร์ม
โปรไฟล์ Compose team และ chart Helm ส่งตัวเลือกกับค่าปรับทั้งหมดไปทั้งแอปและ worker ภายนอก ใน Helm ตัวเลือกไม่ลับอยู่ใต้ env; ตั้ง secrets.redisUrl, secrets.databaseUrl และ secrets.storageEncryptionKeys สำหรับการเชื่อมหรือคีย์ ขีดจำกัด pool PostgreSQL ต่อโปรเซส ให้จัดอย่างน้อย (replicaCount + worker.replicaCount) * POSTGRES_POOL_MAX บวกส่วนเผื่อ รักษา DATABASE_SSL_MODE=verify-full สำหรับ PostgreSQL จัดการ/ระยะไกล เฉพาะ Compose team ใช้ disable เพราะ listener แยกในเครือข่ายส่วนตัว Helm team ต้องมี secrets.jwtSecret เสถียรเดียวและเมานต์ Secret เดียวทุก Pod ไม่เช่นนั้นจะสร้างวัสดุลงนามเฉพาะโปรเซส S3 รับคีย์ทึบและ ciphertext โดยไม่เก็บ URL bucket/ผู้ให้บริการในเมทาดาทา
คลัง solo/team รวมเก็บค่าพูลและ timeout PostgreSQL, timeout Redis, โควตา blob ทั้งสอง ตัวเลือกแพลตฟอร์ม และที่อยู่ S3 ในการกำหนดค่าปกป้องที่ลงนามและเข้ารหัส การกู้สะอาดจึงเผยค่าปฏิบัติที่ต้องใช้สร้างการติดตั้งตรงโดยไม่ใส่ในเมทาดาทาข้อความธรรมดา
คู่แอป/worker Compose และ Helm ได้ค่า OLLAMA_BASE_URL, OLLAMA_TIMEOUT, OLLAMA_LONG_OPERATION_TIMEOUT และ OLLAMA_MAX_CONTEXT ที่แปลงตรงกัน คำขอ embedding เอกสาร แชตถาวร และ Work รันใน worker ค่าจึงห้ามต่าง จุดเข้าเซิร์ฟเวอร์แปลงค่าตัวเลขเป็นจำนวนเต็มบวกฐานสิบครบก่อนสร้าง/เชื่อมสถานะ ค่าเช่น 300000ms, เลขยกกำลัง/hex, นอกช่วง หรือ timeout ยาวต่ำกว่ามาตรฐานทำให้เริ่มล้มเหลว
Helm จำกัด TRUST_PROXY เป็นจำนวน hop เต็ม 0 ถึง 16 และส่งเฉพาะ Pod HTTP ใช้ 0 สำหรับทราฟฟิกตรง ตั้งจำนวนคงที่ตรงสำหรับโซ่ ingress/load balancer ห้ามใช้ true ไม่จำกัด จำนวนผิดจะรวมไคลเอนต์ใต้ที่อยู่ proxy สำหรับขีดจำกัดร่วมหรือเชื่อที่อยู่จากไคลเอนต์
ความเข้ากันได้ schema PostgreSQL ต้องตรงเวอร์ชัน แอปและ worker Helm ใช้ Recreate; ระบายและจบ Pod เก่าทั้งหมดก่อนอัปเกรด team แล้วให้โปรเซสใหม่หนึ่งย้ายใต้ leader lock ห้ามรัน binary หลายเวอร์ชันหรืออ้างว่าไม่มี downtime rollback คือกู้คลัง team ก่อนอัปเกรดไปยัง PostgreSQL/S3 สะอาดก่อนเริ่ม binary เก่าตรง
แอป team active ต้องมี worker.replicaCount >= 1; Helm ปฏิเสธแอปสดไม่มี worker แทนรอ readiness ล้มเหลว ตั้งทั้งแอปและ worker เป็นศูนย์เพื่อพักเต็ม แอปศูนย์แต่ worker บวกคือโหมดระบาย/กู้เฉพาะ worker และยังประมวลงานคิวโดยไม่เสิร์ฟเว็บ
ตัวช่วยสำรองข้อมูลส่วนตัว
ตัวแปรเหล่านี้กำหนด deploy/private/libre-webui-backup และสคริปต์บำรุงรักษาเป็นผู้อ่าน ไม่ใช่โปรเซสแอป:
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
LIBRE_WEBUI_STACK_DIR | /opt/libre-webui | ไดเรกทอรีที่มีไฟล์ Compose ส่วนตัว |
LIBRE_WEBUI_BACKUP_DIR | /var/backups/libre-webui | ไดเรกทอรีปกป้องสำหรับชุดสำรองและไฟล์ล็อก |
LIBRE_WEBUI_BACKUP_RETENTION_DAYS | 14 | อายุที่ชุดสำรองเสร็จจะถูกลบ |
LIBRE_WEBUI_CONTAINER_NAME | libre-webui | คอนเทนเนอร์แอปที่ติดตั้งซึ่งต้องตรวจ |
LIBRE_WEBUI_BACKUP_KEY_DIR | /etc/libre-webui/backup-keys | ไดเรกทอรีคีย์เข้ารหัสคลังและลงนามส่วนตัว |
LIBRE_WEBUI_RESTORE_IMAGE | ต้องระบุสำหรับกู้คืน | ID หรือ digest image Libre ที่ตรวจแล้วและเปลี่ยนไม่ได้ |
LIBRE_WEBUI_RESTORE_CONFIG_DIR | เส้นทางต่อ volume ใต้ /etc/libre-webui/restored | ไดเรกทอรีใหม่สำหรับการกำหนดค่าที่กู้ |
unit systemd โหลดค่าทับจากไฟล์ทางเลือกของ root /etc/libre-webui/backup.env ตั้งโหมด 0600 กำหนดไดเรกทอรี stack การเก็บ ชื่อคอนเทนเนอร์ และไดเรกทอรีคีย์ได้ตรง sandbox ระบบไฟล์อนุญาตเขียนใต้ไดเรกทอรีสำรองเริ่มต้นเท่านั้น LIBRE_WEBUI_BACKUP_DIR แบบกำหนดเองต้องมีไดเรกทอรีตรงที่สร้างไว้ใน drop-in ReadWritePaths= ดู
การติดตั้งระยะไกลส่วนตัว
การยืนยันตัวตนและความปลอดภัย
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
ENABLE_SIGNUP | false | อนุญาตลงทะเบียนหลังผู้ดูแลในเครื่องคนแรก |
JWT_SECRET | สร้าง/fallback ในการพัฒนา | ข้อมูลลับลงนาม JWT ให้ตั้งใน production |
JWT_EXPIRES_IN | 7d | อายุ token เซสชัน |
ENCRYPTION_KEY | สร้างอัตโนมัติ | คีย์ hex 64 อักขระสำหรับค่าที่เข้ารหัส |
DEBUG_ENCRYPTION | ไม่ตั้ง | บันทึก debug การเข้ารหัสเมื่อกำหนด |
TURNSTILE_SITE_KEY | ไม่ตั้ง | คีย์ไซต์ Cloudflare Turnstile สำหรับเข้าสู่ระบบ/สมัคร |
TURNSTILE_SECRET_KEY | ไม่ตั้ง | คีย์ลับ Turnstile สำหรับ backend ตรวจ |
TURNSTILE_EXPECTED_HOSTNAME | ชื่อโฮสต์จาก BASE_URL | ชื่อโฮสต์ที่ต้องมีในคำตอบตรวจ Cloudflare |
MFA_REQUIRED_MODE | ไม่ตั้ง (สวิตช์ admin, optional) | ตรึงนโยบายสองปัจจัยเป็น optional หรือ required |
WEBAUTHN_RP_ID | ชื่อโฮสต์คำขอ | ID relying party คงที่สำหรับ passkey หลังหลายชื่อโฮสต์ |
VAPID_PUBLIC_KEY | สร้างและเก็บเข้ารหัส | ตรึงคีย์สาธารณะ VAPID Web Push |
VAPID_PRIVATE_KEY | สร้างและเก็บเข้ารหัส | ตรึงคีย์ส่วนตัว VAPID Web Push |
VAPID_SUBJECT | mailto:admin@localhost | ข้อมูลติดต่อในสิทธิ์ Web Push ที่ลงนาม |
Turnstile เปิดเมื่อมีคีย์ทั้งสองเท่านั้น
ENABLE_SIGNUP=false ยังอนุญาตผู้ดูแลในเครื่องคนแรกในฐานข้อมูลว่าง แล้วบล็อกบัญชีเพิ่มเติม ปกป้องเส้นทางเริ่มต้นที่เข้าถึงระยะไกลด้วยขอบเขตตัวตนภายนอกก่อนเริ่มครั้งแรก
ทุก JWT ผูกกับเซสชันฝั่งเซิร์ฟเวอร์ (claim sid) การออกหรือถอนจาก การตั้งค่า → เซสชัน จึงทำให้ token ใช้ไม่ได้ทันทีทุก replica และปิด WebSocket สด กำหนดการเก็บบันทึกความปลอดภัยได้:
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
AUDIT_RETENTION_DAYS | 180 | จำนวนวันที่เก็บแถวในบันทึกเหตุการณ์ความปลอดภัย |
การลงชื่อเข้าใช้ครั้งเดียว OIDC ทั่วไป
ผู้ให้บริการ OpenID Connect ที่มีเอกสารค้นหาใช้เข้าสู่ระบบได้ ขั้นตอนใช้ PKCE (S256), สถานะ CSRF และ nonce ที่ตรวจใน token ID ซึ่งตรวจลายเซ็น ตัวตนผูกกับ claim sub ที่เสถียร
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
OIDC_ISSUER_URL | ไม่ตั้ง | URL ฐานผู้ออก ดึง discovery จาก <issuer>/.well-known/openid-configuration |
OIDC_CLIENT_ID | ไม่ตั้ง | ID ไคลเอนต์ OAuth ที่ลงทะเบียนกับผู้ให้บริการ |
OIDC_CLIENT_SECRET | ไม่ตั้ง | ข้อมูลลับไคลเอนต์ OAuth |
OIDC_DISPLAY_NAME | Single Sign-On | ป้ายบนปุ่มเข้าสู่ระบบ |
OIDC_SCOPES | openid profile email | ขอบเขตที่ร้องขอ |
OIDC_CALLBACK_URL | BASE_URL + เส้นทาง callback OIDC | URI เปลี่ยนทางที่ลงทะเบียน |
OIDC_ALLOWED_EMAIL_DOMAINS | ไม่ตั้ง | รายการจุลภาค เมื่อกำหนดต้องมีอีเมลยืนยันในโดเมนหนึ่ง |
OIDC_GROUP_CLAIM | groups | claim token ID ที่มีชื่อกลุ่ม |
OIDC_ADMIN_GROUPS | ไม่ตั้ง | รายการจุลภาค เมื่อกำหนดบทบาท admin ตามสมาชิก claim ทุกครั้ง |
OIDC_SYNC_GROUPS | false | true ทำสมาชิกกลุ่ม Libre ให้ตรง claim ทุกครั้ง |
OIDC เปิดเมื่อมี URL ผู้ออก ID และข้อมูลลับไคลเอนต์ครบ อีเมลที่บัญชีในเครื่องซึ่งไม่ผูกใช้อยู่จะถูกปฏิเสธแทนการรวมเงียบ ๆ และการสร้างบัญชียังเคารพ ENABLE_SIGNUP
ปรับการรับ WebSocket แชตได้โดยไม่ทำให้การยืนยันอ่อนลง:
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
CHAT_WS_MAX_PAYLOAD_BYTES | 10 MiB | ขนาดข้อความ WebSocket สูงสุดที่รับ |
CHAT_WS_MAX_MESSAGES_PER_MINUTE | 120 | เพดานข้อความ WebSocket ต่อการเชื่อม |
CHAT_WS_MAX_ACTIVE_GENERATIONS_PER_USER | 4 | การสร้างของผู้ให้บริการที่อนุญาตต่อบัญชี |
CHAT_WS_MAX_CONNECTIONS_PER_USER | 5 | socket ยืนยันพร้อมกันต่อบัญชี |
WEBSOCKET_TICKET_TTL_MS | 30000 | อายุบัตร Chat/Work ใช้ครั้งเดียว สูงสุด 60 วินาที |
เบราว์เซอร์แลก header Authorization เป็นบัตรทึบและใส่เพียงค่าอายุสั้นใน URL อัปเกรด WebSocket บัตรใช้ครั้งเดียว ผูกโพรโทคอล/เซสชัน และเก็บเป็น hash ทำให้ token ถาวรไม่เข้าบันทึก reverse proxy เมื่อกำหนด CORS_ORIGIN หรือ BASE_URL การอัปเกรดที่มี Origin ต้องตรง ตั้งอย่างน้อยหนึ่งในการติดตั้งระยะไกล หากไม่มีทั้งคู่ตัวกรองจะอนุญาตเพื่อพัฒนา การอัปเกรดไม่มี origin รองรับสำหรับ Electron และไคลเอนต์อื่นโดยตั้งใจ แต่ยังต้องมีบัตรใช้ครั้งเดียวและตรวจบัญชี สิทธิ์ Work และงานเหมือนกัน ให้ถือบัตรเป็นขอบเขตยืนยันและจำกัดไคลเอนต์อื่นด้วย TLS ไฟร์วอลล์ และ reverse proxy
OAuth
| ตัวแปร | วัตถุประสงค์ |
|---|---|
GITHUB_CLIENT_ID | ID ไคลเอนต์ GitHub OAuth |
GITHUB_CLIENT_SECRET | ข้อมูลลับไคลเอนต์ GitHub OAuth |
GITHUB_CALLBACK_URL | URL callback GitHub ที่แทน |
HUGGINGFACE_CLIENT_ID | ID ไคลเอนต์ Hugging Face OAuth |
HUGGINGFACE_CLIENT_SECRET | ข้อมูลลับ Hugging Face OAuth |
HUGGINGFACE_CALLBACK_URL | URL callback Hugging Face ที่แทน |
หากไม่ตั้ง URL callback Libre WebUI สร้างค่าเริ่มต้นจาก BASE_URL
Ollama
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
OLLAMA_BASE_URL | http://localhost:11434 | URL ฐาน API Ollama |
OLLAMA_TIMEOUT | 300000 | timeout คำขอ Ollama มาตรฐาน (1,000-3,600,000 ms) |
OLLAMA_LONG_OPERATION_TIMEOUT | 900000 | timeout งานยาวและไม่สั้นกว่า OLLAMA_TIMEOUT |
OLLAMA_MAX_CONTEXT | 32768 | บริบทโมเดลสูงสุดที่รับอัตโนมัติ (128-2,097,152 token) |
การค้นหาเว็บ
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
SEARXNG_URL | ไม่ตั้ง | endpoint SearXNG เริ่มต้นสำหรับค้นหาเว็บ ผู้ดูแลยังต้องเปิดใน การตั้งค่า > ค้นหา |
Libre Claw
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
LIBRE_CLAW_BASE_URL | http://127.0.0.1:8766 | URL daemon Libre Claw ที่เลือกได้ |
LIBRE_CLAW_TIMEOUT_MS | 30000 | timeout คำขอ HTTP Libre Claw |
runtime ของ Work
ตัวแปรเหล่านี้กำหนดการทำงาน Work บนเครื่องหรือ cluster Kubernetes ที่รัน backend Libre WebUI Docker เป็น runtime เริ่มต้น chart Helm เลือก Kubernetes เมื่อ work.enabled=true
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
WORK_RUNTIME_IMAGE | node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3 | image ที่ตรึงสำหรับ sandbox Work |
WORK_DOCKER_COMMAND | docker | โปรแกรม CLI backend Docker ที่โปรเซสใช้ได้ |
WORK_COMMAND_TIMEOUT_MS | 120000 | timeout เริ่มต้น เครื่องมือขอได้สูงสุด 600000 ms |
WORK_MAX_OUTPUT_CHARS | 50000 | ขีดจำกัด stdout/stderr ที่จับ ต่อ stream |
WORK_MAX_AGENT_ROUNDS | 48 | งบประมาณรอบโมเดล/เครื่องมือต่อการทำงาน |
WORK_STATUS_BLURB_MODEL | 1 | ตั้ง 0 เพื่อข้ามคำขอโมเดลเขียนสถานะเอเจนต์หลังงาน |
WORK_MEMORY_LIMIT | 2g | ขีดจำกัดหน่วยความจำต่อคอนเทนเนอร์ |
WORK_CPU_LIMIT | 2 | ขีดจำกัด CPU ต่อคอนเทนเนอร์ |
WORK_PIDS_LIMIT | 256 | ขีดจำกัดโปรเซสต่อคอนเทนเนอร์ |
WORK_PREVIEW_PORT | 4173 | พอร์ตเซิร์ฟเวอร์ตัวอย่างในคอนเทนเนอร์งาน |
WORK_PREVIEW_BIND | 127.0.0.1 | อินเทอร์เฟซโฮสต์ที่เผยแพร่พอร์ตตัวอย่าง การติดตั้ง Compose บน Docker Engine แบบเนทีฟต้องใช้อินเทอร์เฟซ bridge ที่ไม่เปิดสาธารณะแต่เข้าถึงได้ |
WORK_DOCKER_PUBLISHED_HOST | ค่าเริ่มต้นของแอป: เหมือน WORK_PREVIEW_BIND; ค่าเริ่มต้นของ Compose: host.docker.internal | host/IP ฝั่ง backend สำหรับพอร์ตตัวอย่าง หน้าจอ และเสียงจาก Docker |
WORK_COMPUTER_SCREEN_PORT | 6080 | พอร์ตสะพานหน้าจอ Work Computer ใน sandbox GUI |
WORK_COMPUTER_AUDIO_PORT | 6081 | พอร์ตสะพานเสียง Work Computer ใน sandbox GUI |
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL | 3 | งานที่ใช้ runtime พร้อมกันทั้งอินสแตนซ์ |
WORK_MAX_ACTIVE_RUNTIMES_PER_USER | 2 | งานที่ใช้ runtime พร้อมกันต่อผู้ใช้ |
WORK_MAX_TASKS_GLOBAL | 500 | งาน Work ถาวรสูงสุดทั้งอินสแตนซ์ |
WORK_MAX_TASKS_PER_USER | 100 | งาน Work ถาวรสูงสุดต่อผู้ดูแล |
WORK_NETWORK_NAME | libre-webui-work | เครือข่าย bridge sandbox สำหรับงานมีเครือข่าย |
WORK_RUN_LEASE_WAIT_MS | 60000 | เวลารอ lease runtime ร่วมก่อนรายงาน replica ขัดแย้ง |
WORK_RUNTIME_DNS | ไม่ตั้ง | IP resolver คั่นจุลภาคที่บังคับงานมีเครือข่าย |
WORK_DOCKER_SOCKET | DOCKER_HOST หาก unix:// หรือ tcp://, มิฉะนั้น /var/run/docker.sock | endpoint Docker Engine สำหรับ terminal และการวินิจฉัย |
WORK_TERMINAL_MAX_SESSIONS_PER_TASK | 2 | terminal เบราว์เซอร์พร้อมกันต่องาน |
WORK_TERMINAL_IDLE_TIMEOUT_MS | 900000 | timeout ว่างก่อนปิด terminal |
WORK_RUNTIME_IDLE_TIMEOUT_MS | 0 (ปิด) | หยุด sandbox หลังไม่มีกิจกรรม |
WORK_HOST_WORKSPACES_ENABLED | false | อนุญาตใช้โฟลเดอร์โฮสต์แทน volume |
WORK_HOST_WORKSPACE_ROOTS | ไดเรกทอรี home ของผู้ใช้เซิร์ฟเวอร์ | root คั่น : ที่พื้นที่โฮสต์ต้องอยู่ภายใน |
WORK_RUNTIME_BACKEND | docker | backend sandbox: docker หรือ kubernetes |
WORK_K8S_NAMESPACE | libre-webui-work | namespace ที่เก็บ Pod/PVC sandbox |
WORK_K8S_STORAGE_CLASS | ค่าเริ่มต้น cluster | StorageClass สำหรับ PVC พื้นที่ทำงาน |
WORK_K8S_WORKSPACE_SIZE | 5Gi | ขนาด PVC ต่องาน (โควตาดิสก์จริง) |
WORK_K8S_POD_READY_TIMEOUT_MS | 900000 | รอ Pod sandbox เป็น Running |
WORK_K8S_POD_GONE_TIMEOUT_MS | 60000 | รอ Pod ที่ลบหายไป |
AGENT_CLI_MODELS_ENABLED | ไม่ตั้ง (สวิตช์ admin, ปิด) | ตรึงฟีเจอร์เอเจนต์ หรือให้สวิตช์ผู้ดูแลกำหนด |
TOOLS_ACCESS_MODE | ไม่ตั้ง (เฉพาะ admin) | ตรึงเครื่องมือเป็น admins หรือ all-users |
STT_ACCESS_MODE | ไม่ตั้ง (ทุกคน) | ตรึงเสียงเป็นข้อความเป็น admins หรือ all-users |
TTS_ACCESS_MODE | ไม่ตั้ง (ทุกคน) | ตรึงข้อความเป็นเสียงเป็น admins หรือ all-users |
VOICE_MODE_ACCESS_MODE | ไม่ตั้ง (ทุกคน) | ตรึงโหมดเสียงราบรื่นเป็น admins หรือ all-users |
VOICE_CLONING_ACCESS_MODE | ไม่ตั้ง (ทุกคน) | ตรึงการโคลนเสียงเป็น admins หรือ all-users |
TOOLS_PRIVATE_NETWORK_ALLOWLIST | ไม่ตั้ง | ชื่อโฮสต์ตรงที่เครื่องมือ/webhook แปลงเป็นที่อยู่ส่วนตัวได้ |
AGENT_CLI_TIMEOUT_MS | 600000 | เวลาที่ CLI เอเจนต์รันก่อนถูกหยุด |
CODEX_OAUTH_MODELS_ENABLED | true | เสนอผู้ให้บริการ Codex (ChatGPT) แก่ admin |
CODEX_HOME | ~/.codex | ตำแหน่งอ่านการเข้าสู่ระบบ Codex (auth.json) |
binary CLI เอเจนต์และข้อมูล Codex OAuth อยู่เฉพาะ node รองรับเฉพาะโปรเซส solo ที่การค้นหาและดำเนินเห็นระบบไฟล์/สภาพแวดล้อมเดียว โหมด team ทำงานแชตถาวรใน worker ภายนอก จึงต้องมี AGENT_CLI_MODELS_ENABLED=false และ CODEX_OAUTH_MODELS_ENABLED=false; การเริ่มปฏิเสธค่าอื่นแทนการประกาศผู้ให้บริการที่อาจมีแค่ replica แอป ให้ใช้ Ollama หรือ plugin ที่ข้อมูลและเส้นทางเก็บใน PostgreSQL ร่วมหรือส่งเหมือนกันทุกแอป/worker
บน backend Docker พื้นที่โฮสต์ bind-mount ไดเรกทอรีจริงที่ /workspace งานจึงอ่านเขียนตรงแทน volume ของตน Kubernetes ปฏิเสธโฟลเดอร์โฮสต์ นี่ลด sandbox Docker โดยตั้งใจ ให้ปิด WORK_HOST_WORKSPACES_ENABLED และจำกัด WORK_HOST_WORKSPACE_ROOTS ให้แคบ เส้นทางจะแปลง symlink ก่อนตรวจ และโฟลเดอร์ .ssh, .gnupg, .aws, .config ถูกปฏิเสธ
โมเดล CLI เอเจนต์นำเอเจนต์เขียนโค้ดที่ติดตั้ง (claude, codex) เป็นโมเดลแชตที่เลือกได้ เอเจนต์สมาชิกจึงตอบได้โดยไม่มีคีย์ API เฉพาะผู้ดูแลเห็น CLI รันเป็นผู้ใช้เซิร์ฟเวอร์ Libre WebUI และสืบทอดข้อมูลเอเจนต์ ให้ถือเท่ากับให้สิทธิ์ shell
บน Docker งาน Work ที่มีเครือข่ายต่อ bridge WORK_NETWORK_NAME ที่จัดการ ซึ่งปิดการสื่อสารระหว่างคอนเทนเนอร์เพื่อไม่ให้ sandbox ถึงกันหรือคอนเทนเนอร์การติดตั้ง WORK_RUNTIME_DNS เป็นจุดนโยบาย egress Docker ให้ชี้ resolver กรองเพื่อใช้รายการอนุญาต/ปฏิเสธตามชื่อ ค่าที่ไม่ใช่ IPv4/IPv6 ถูกปฏิเสธและบันทึก การกรอง DNS ไม่จำกัด egress IP ตรง ให้เพิ่มไฟร์วอลล์โฮสต์เมื่อจำเป็น backend Kubernetes ใช้ NetworkPolicy ปฏิเสธเริ่มต้นและ work.networkPolicy.blockedEgressCidrs
บน Docker terminal และการวินิจฉัยสื่อสาร API Docker Engine ตรง ใช้ WORK_DOCKER_SOCKET หรือ DOCKER_HOST ซึ่งเป็น socket unix:// หรือ endpoint tcp:// HTTP ธรรมดาเช่น proxy socket (ดู docker-compose.socket-proxy.yml) มิฉะนั้น /var/run/docker.sock หากไคลเอนต์ใช้ DOCKER_HOST ไม่ได้ (ssh:// หรือ tcp:// กับ DOCKER_TLS_VERIFY) จะรายงาน terminal/วินิจฉัยไม่พร้อม ส่วน Work อื่นยังรันผ่าน CLI Docker บน Kubernetes terminal ใช้ทรัพยากรย่อย exec Pod ไม่ใช้ Docker
Work อ่านค่าเมื่อ backend เริ่ม พอร์ตตัวอย่างอยู่ภายในคอนเทนเนอร์ Libre WebUI เผยแพร่ไปพอร์ต loopback แบบไดนามิกแทนทุกอินเทอร์เฟซ
ตรึง image runtime ที่เวอร์ชัน/digest ตรวจแล้ว การเพิ่มพร้อมกันหรือทรัพยากรเพิ่มความจุที่งานอัตโนมัติใช้ WORK_MAX_AGENT_ROUNDS ใช้เท่ากับ Ollama และ plugin ไม่มีขีดต่ำเฉพาะ plugin งบความปลอดภัยคือ max(128, WORK_MAX_AGENT_ROUNDS × 8) เมื่อใช้หมด Work ขอส่งต่อสุดท้ายแบบไม่มีเครื่องมือและจบ needs_input แทนข้อผิดพลาดดิบ งานต่อไปอยู่ในพื้นที่ถาวรเดิม เอาต์พุตเครื่องมือที่เก็บจำกัดราว 20,000 อักขระพร้อมเครื่องหมายตัด
ตัวแปรต่อไปปรับ runtime Work ที่เข้าถึงได้ การติดตั้ง Compose อินสแตนซ์เดียวเปิดโดยค่าเริ่มต้น image มี CLI Docker และไฟล์ Compose เมานต์ socket โฮสต์ ตัวแปรระดับ Compose สองค่าควบคุม:
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
DOCKER_GID | 0 | ID กลุ่ม socket โฮสต์ที่เพิ่มให้ผู้ใช้คอนเทนเนอร์ |
DOCKER_SOCKET | /var/run/docker.sock | เส้นทางโฮสต์ socket ที่เมานต์ |
DOCKER_GID ต้องเป็นกลุ่ม socket ที่เห็นในคอนเทนเนอร์ โฮสต์ macOS รายงานต่าง Compose team ฐานไม่เมานต์ socket และ Work Docker ไม่พร้อมจนเพิ่ม docker-compose.team.work.yml overlay ให้แอปและ worker ใช้ endpoint proxy กรองภายในเดียวโดยไม่เมานต์ socket proxy อนุญาตเฉพาะส่วน API ที่ runtime ใช้ แต่การสร้างคอนเทนเนอร์ยังควบคุมโฮสต์ ให้ใช้ daemon Work เฉพาะ/rootless เพื่อขอบเขตแข็งกว่า Helm ไม่เมานต์ socket node เปิด backend Pod/PVC ด้วย work.enabled=true
โปรไฟล์ solo ต้องมีศูนย์หรือหนึ่ง replica เพราะใช้ SQLite ไฟล์ในเครื่อง และการประสานในโปรเซส Helm รับศูนย์เพื่อพักและปฏิเสธจำนวนมาก/auto scale โปรไฟล์ team เต็มใช้หลาย replica และ worker ภายนอกได้เพราะ PostgreSQL, S3, PGVector, Redis ถือสถานะร่วม Pod sandbox Work scale แยก และใน team worker ได้ image, StorageClass และขีด work.env เดียวกับแอป
ไฟล์ Compose รับ WEBUI_BIND_ADDRESS (ค่าเริ่มต้น 127.0.0.1) และ WEBUI_PORT (8080) รักษา loopback เว้นแต่ LAN ที่เชื่อหรือ reverse proxy ต้องเข้าพอร์ต
การค้นหาโมเดลของผู้ให้บริการ
แคตตาล็อกโมเดลผู้ให้บริการจะค้นหาใหม่เมื่อขาดหรือเก่า การโหลดใหม่จึงสะท้อนโมเดลปัจจุบัน ตัวแปรต่อไปปรับรอบ:
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
PLUGIN_MODEL_DISCOVERY_TTL_MS | 21600000 (6 ชม.) | อายุแคตตาล็อกก่อนรีเฟรชในการอ่านรายการ plugin ครั้งถัดไป |
PLUGIN_MODEL_DISCOVERY_RETRY_MS | 600000 (10 นาที) | ช่วงต่ำสุดระหว่างลองเพื่อไม่ตรวจผู้ให้บริการที่ล้มเหลวบ่อย |
PLUGIN_MODEL_DISCOVERY_REFRESH_DEADLINE_MS | 3000 | เวลาที่คำตอบรายการ plugin รอรีเฟรช |
การรีเฟรชเกินเวลาเสร็จได้และให้ในคำขอถัดไป รีเฟรชโมเดล แบบชัดเจนติดต่อผู้ให้บริการและไม่ใช้ช่วง
คีย์ plugin ผู้ให้บริการ
plugin ผู้ให้บริการใช้คีย์สภาพแวดล้อมเป็นค่าเริ่มต้นทั้งการติดตั้งได้:
| ตัวแปร | ผู้ให้บริการ |
|---|---|
OPENAI_API_KEY | OpenAI และ OpenAI TTS |
ANTHROPIC_API_KEY | Anthropic |
GROQ_API_KEY | Groq |
GEMINI_API_KEY | Google Gemini |
MISTRAL_API_KEY | Mistral |
OPENROUTER_API_KEY | OpenRouter |
KIMI_API_KEY | Kimi Code โดย Moonshot AI |
GITHUB_API_KEY | GitHub Models |
HUGGINGFACE_API_KEY | API Hugging Face ในจุดที่กำหนด |
ELEVENLABS_API_KEY | ElevenLabs TTS |
COMFYUI_API_KEY | การติดตั้ง ComfyUI ที่ต้องใช้คีย์ API |
ผู้ใช้เก็บข้อมูลผู้ให้บริการใน UI ได้เมื่อเลือกคีย์ต่อผู้ใช้ คีย์สภาพแวดล้อมใช้เฉพาะการกำหนดเส้นทาง/ยืนยันของนิยามที่รวมและไม่ถูกบัง นิยามนำเข้า เขียนได้ที่ใช้ ID รวมซ้ำ และเส้นทางผู้ดูแลบันทึกต้องมีข้อมูลของบัญชีนั้น Libre WebUI ไม่แนบคีย์สภาพแวดล้อมหรือเผยผ่านการค้นหา ความเชื่อมาจาก hash compile ของ manifest ที่ส่ง จึงรองรับเลย์เอาต์คอนเทนเนอร์ที่ไดเรกทอรีเก่ากับรวมใช้เส้นทางเดียวโดยไม่ถือ manifest แก้เป็นของรวม
คีย์ที่ผู้ใช้บันทึกผูกกับนิยาม แหล่ง สัญญายืนยัน และค่าเส้นทางที่มีผล ต้องบันทึกใหม่หลังผู้ดูแลเปลี่ยนปลายทาง คีย์เก่าที่ไม่ผูกจะรับและผูกครั้งแรกเฉพาะนิยามที่ส่งตรงบนเส้นทางรวม
การรันจากต้นฉบับแปลง PLUGINS_DIR สัมพัทธ์จากไดเรกทอรี backend ตัวเปิดแพ็กจะแปลงเป็นเส้นทางสัมบูรณ์ผู้เรียกก่อนเริ่ม เพื่อเข้ากัน Libre อ่าน backend/plugins และตำแหน่งเก่าด้วย ย้ายนิยามไป $DATA_DIR/plugins; การกู้รายงานเส้นทางเก่าเป็นสถานะภายนอกและบล็อก snapshot เฉพาะ volume ขณะยังมีนิยาม ไดเรกทอรี plugin และ JSON ต้องเป็นรายการกายภาพ Libre ไม่ตาม symlink
Frontend
| ตัวแปร | ค่าเริ่มต้น | วัตถุประสงค์ |
|---|---|---|
VITE_API_BASE_URL | พร็อกซี dev แบบ origin เดียวกัน หรือ API การใช้งานจริง | URL ฐาน API frontend |
VITE_WS_BASE_URL | อนุมานจาก URL API | ฐาน ws:/wss: สัมบูรณ์สำหรับ socket Chat/Work |
VITE_APP_VERSION | เวอร์ชันแพ็กเกจจาก Vite | เวอร์ชันแอปที่แสดง |
VITE_DEMO_MODE | false | เปิด mock โหมดสาธิตเมื่อ true |
VITE_API_TIMEOUT | 300000 | timeout API frontend เป็นมิลลิวินาที |
VITE_BACKEND_URL | http://localhost:3001 | ใช้โดยส่วนช่วยยืนยันบางส่วน |
VITE_DEBUG_VERBOSE | ไม่ตั้ง | เปิดบันทึก debug frontend ละเอียดในการพัฒนา |
VITE_LOG_LEVEL | ไม่ตั้ง | แทนระดับบันทึก frontend |
ELECTRON_BUILD | ไม่ตั้ง | เปิดลักษณะ Vite สำหรับ Electron เมื่อ true |
VITE_WS_BASE_URL แทน fallback WebSocket ทั้ง Chat และ terminal Work อาจมีคำนำหน้า reverse proxy แต่ต้องเป็น URL ws: หรือ wss: สัมบูรณ์ไม่มีข้อมูล คำค้น หรือ fragment เมื่อไม่ตั้ง ไคลเอนต์ Electron file: ใช้ ws://localhost:3001; เบราว์เซอร์หา base จาก VITE_API_BASE_URL แล้ว origin ของเบราว์เซอร์ Vite จะพร็อกซี origin ของ dev ไปยัง backend พอร์ต 3001
สคริปต์บำรุงรักษา
| ตัวแปร | วัตถุประสงค์ |
|---|---|
CHANGELOG_AI | ตั้ง 0 เพื่อปิดร่าง changelog ด้วย AI |
CHANGELOG_AI_MODEL | โมเดล Ollama สำหรับสร้างรุ่น/changelog |
CHANGELOG_AI_TIMEOUT_MS | timeout สร้าง changelog AI เป็นมิลลิวินาที |
ตัวอย่าง:
CHANGELOG_AI_MODEL=glm-5.2:cloud npm run changelog
CHANGELOG_AI=0 npm run release:minor
ตัวอย่าง production
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