Docker
Docker एक सर्वर के उत्पादन-जैसे परिनियोजन का सबसे सरल तरीका है।
इंटरनेट से पहुँच वाले एक-सर्वर इंस्टॉल के लिए निजी दूरस्थ परिनियोजन से शुरू करें। Compose नमूना ऐप पोर्ट प्रकाशित नहीं करता, डिफ़ॉल्ट main इमेज उपयोग करता और बाहरी Cloudflare Access सीमा, होस्ट नियंत्रण, बैकअप तथा कंटेनर सीमा जोड़ता है।
Work उपलब्धता
Work रिपॉज़िटरी Compose फ़ाइलों में डिफ़ॉल्ट रूप से सक्षम है। इमेज में Docker CLI है और Compose /var/run/docker.sock माउंट करता है, इसलिए Work कंटेनर Libre WebUI कंटेनर के समान स्तर पर होते हैं। वे होस्ट के docker ps में दिखते हैं।
सॉकेट तक पहुँच रखने वाली प्रक्रिया को Docker होस्ट पर root के बराबर नियंत्रण मिलता है। Work को डिफ़ॉल्ट चालू रखना जानबूझकर है: यह मूल सुविधा है और सेवा पहुँच के बिना काम नहीं कर सकती। परिणाम: हर Libre WebUI व्यवस्थापक वास्तव में होस्ट व्यवस्थापक है। इसलिए:
- स्टैक केवल ऐसे होस्ट पर रखें जिसके व्यवस्थापकों पर भरोसा हो।
- प्रकाशित पोर्ट अविश्वसनीय नेटवर्क पर न खोलें।
- Work न चाहिए तो
/var/run/docker.sockमाउंट हटाएँ। Work Runtime unavailable बताएगा।
Linux में सॉकेट root के बजाय docker समूह का है; root-रहित ऐप उपयोगकर्ता को समूह ID चाहिए। एक बार सेट करें:
echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
alpine stat -c '%g' /var/run/docker.sock)" >> .env
मान को दिखाए अनुसार कंटेनर से पढ़ें। Docker Desktop सॉकेट को VM से भेजता है, इसलिए macOS होस्ट और कंटेनर अलग मान देखते हैं। समूह गलत हो तो Work चुपचाप विफल होने के बजाय समस्या बताता है। Work: अलग-थलग कार्यक्षेत्र देखें।
Work preview और Work Computer यादृच्छिक पोर्ट केवल निजी होस्ट इंटरफ़ेस पर प्रकाशित करते हैं। Docker Desktop Compose डिफ़ॉल्ट के साथ चलता है: बाइंड के लिए होस्ट लूपबैक और बैकएंड कनेक्शन के लिए host.docker.internal। नेटिव Docker Engine सहोदर कंटेनर से होस्ट-लूपबैक लिसनर तक नहीं पहुँच सकता। इसके बजाय बाइंड को उसके गैर-सार्वजनिक Docker bridge gateway पर सेट करें:
echo "WORK_PREVIEW_BIND=$(docker network inspect bridge \
--format '{{(index .IPAM.Config 0).Gateway}}')" >> .env
echo "WORK_DOCKER_PUBLISHED_HOST=host.docker.internal" >> .env
docker compose up -d --force-recreate libre-webui
Compose फ़ाइलें host.docker.internal को host-gateway से मैप करती हैं। WORK_PREVIEW_BIND=0.0.0.0 कभी उपयोग न करें; इससे अप्रमाणित अस्थायी टास्क पोर्ट Libre WebUI के हस्ताक्षरित प्रॉक्सी के पीछे रहने के बजाय हर होस्ट इंटरफ़ेस पर प्रकाशित हो जाएँगे।
पैकेज किया Ollama
Libre WebUI और Ollama को एक Compose स्टैक में चलाता है:
docker compose up -d
http://localhost:8080 खोलें।
WebUI पोर्ट डिफ़ॉल्ट रूप से होस्ट लूपबैक से जुड़ता है। केवल विश्वसनीय LAN या रिवर्स प्रॉक्सी को पहुँच चाहिए तो WEBUI_BIND_ADDRESS=0.0.0.0 सेट करें और फ़ायरवॉल से पोर्ट सीमित करें।
Ollama Compose नेटवर्क में निजी रहता है। होस्ट ऐप को लूपबैक से देने के लिए ओवरराइड जोड़ें:
docker compose -f docker-compose.yml -f docker-compose.ollama-host.yml up -d
OLLAMA_BIND_ADDRESS केवल दूसरे कंप्यूटर की आवश्यकता पर सेट करें और फ़ायरवॉल/प्रमाणीकृत प्रॉक्सी से बचाएँ।
NVIDIA GPU
Docker को NVIDIA रनटाइम मिले तो GPU Compose फ़ाइल उपयोग करें:
docker compose -f docker-compose.gpu.yml up -d
मॉडल CPU पर हों तो Ollama कंटेनर से GPU पहुँच जाँचें।
बाहरी Ollama
Ollama होस्ट या दूसरे सर्वर पर चल रहा हो तो:
docker compose -f docker-compose.external-ollama.yml up -d
आवश्यकता पर URL बदलें:
OLLAMA_BASE_URL=http://192.168.1.10:11434 docker compose -f docker-compose.external-ollama.yml up -d
सॉकेट-अलग Work
मानक Compose फ़ाइलें Work कंटेनर चलाने के लिए सॉकेट ऐप में माउंट करती हैं; यह root के बराबर नियंत्रण है। ऐप को सॉकेट दिए बिना Work रखने के लिए सॉकेट प्रॉक्सी उपयोग करें:
docker compose -f docker-compose.socket-proxy.yml up -d
आंतरिक नेटवर्क का प्रॉक्सी /var/run/docker.sock रखता और केवल Work API भाग भेजता है (containers, images, volumes, networks, exec, info)। Swarm, secrets, configs, build और system एंडपॉइंट बंद हैं। Libre WebUI DOCKER_HOST=tcp://docker-socket-proxy:2375 से पहुँचता है; सॉकेट और DOCKER_GID नहीं चाहिए, टर्मिनल/निदान समान रहते हैं। कार्यक्षेत्र दस्तावेज़ सीमा समझाते हैं।
डेटा स्थायित्व
Libre WebUI बैकएंड डेटा कंटेनर के /app/backend/data में रखता है। Compose इसे नामित वॉल्यूम बनाता है।
सीधे docker run पर भी इमेज यही पथ उपयोग करती है; अस्थायी जाँच /app/backend/temp में रहती है। कंटेनर पुनः बने तो /app/backend/data माउंट करें।
उत्पादन के लिए स्थिर गुप्त मान सेट करें:
JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
डेटा वॉल्यूम और कुंजी साथ बैकअप करें।
पुरानी इमेज का सीधे चला कंटेनर हटाने से पहले /app/backend/data/.encryption_key की पुष्टि या ENCRYPTION_KEY लिख लें। पुरानी इमेज ने स्वतः कुंजी केवल कंटेनर परत में लिखी हो सकती है; कंटेनर हटाना एकमात्र डिक्रिप्शन कुंजी मिटा देगा।
विशेष Work रनटाइम में कार्य फ़ाइलें अलग नामित Docker वॉल्यूम में हैं और /app/backend/data बैकअप में नहीं आतीं।
सार्वजनिक पहुँच
Compose फ़ाइलें WebUI को लूपबैक से जोड़कर CORS_ORIGIN सीधे सेट करती हैं। शेल या .env मान उसे नहीं बदलता। libre-webui.environment संपादित करें या compose.origin.yml बनाएँ:
services:
libre-webui:
environment:
CORS_ORIGIN: https://your-domain.example
BASE_URL: https://your-domain.example
चुनी Compose फ़ाइल के साथ लागू करें:
docker compose -f docker-compose.yml -f compose.origin.yml up -d
फिर Libre WebUI को HTTPS रिवर्स प्रॉक्सी या लोड बैलेंसर के पीछे रखें। WEBUI_BIND_ADDRESS को आवश्यक इंटरफ़ेस पर सेट करें; फ़ायरवॉल न माँगे तो सभी पर पोर्ट न खोलें।
सर्वर बने हुए फ़्रंटएंड को पहले से ही कुशलता से भेजता है: /js/ और /assets/ के हैश किए बंडल brotli या gzip संपीड़न के साथ और एक वर्ष की immutable कैश अवधि के साथ जाते हैं, जबकि index.html और सर्विस वर्कर no-cache चिह्नित हैं ताकि नया रिलीज़ अगली लोड पर मिल जाए। प्रॉक्सी को इन पथों को फिर से संपीड़ित या कैश करने की ज़रूरत नहीं; Accept-Encoding को ज्यों का त्यों आगे भेजें।
उपयोगी कमांड
docker compose ps
docker compose logs -f libre-webui
docker compose logs -f ollama
docker compose pull
docker compose up -d