Docker
Το Docker είναι ο ευκολότερος τρόπος παραγωγικής εγκατάστασης σε έναν server. Για server προσβάσιμο από Internet ξεκινήστε με Ιδιωτική απομακρυσμένη ανάπτυξη, που δεν δημοσιεύει ports και προσθέτει Cloudflare Access, προστασία host, backup και όρια containers.
Διαθεσιμότητα Work
Το Work είναι ενεργό στα Compose files του repository. Το image έχει Docker CLI και το Compose συνδέει /var/run/docker.sock, οπότε τα containers Work είναι siblings του Libre WebUI και φαίνονται στο docker ps του host.
Η πρόσβαση socket δίνει έλεγχο host ισοδύναμο με root. Κάθε διαχειριστής Libre WebUI είναι πρακτικά διαχειριστής host. Χρησιμοποιήστε έμπιστο host, μην εκθέτετε port σε μη έμπιστο δίκτυο και αφαιρέστε το mount αν δεν χρειάζεται Work· τότε εμφανίζεται Runtime unavailable.
Σε Linux ο χρήστης εφαρμογής χρειάζεται το group id του socket:
Το προεπιλεγμένο image είναι το main. Αποθηκεύστε το DOCKER_GID στο .env και θυμηθείτε ότι η ομάδα του Linux ονομάζεται docker.
echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
alpine stat -c '%g' /var/run/docker.sock)" >> .env
Διαβάστε την τιμή μέσα από container· ο host macOS βλέπει διαφορετική λόγω VM Docker Desktop. Λάθος group αναφέρεται από Work. Δείτε Work: απομονωμένοι χώροι.
Οι προεπισκοπήσεις Work και το Work Computer δημοσιεύουν τυχαία ports μόνο σε ιδιωτικό interface του host. Το Docker Desktop λειτουργεί με τις προεπιλογές Compose: loopback του host για το bind και host.docker.internal για τη σύνδεση του backend. Ο native Docker Engine δεν φτάνει σε listener στο loopback του host από sibling container· ορίστε το bind στο μη δημόσιο gateway της γέφυρας Docker:
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· θα δημοσίευε μη πιστοποιημένα εφήμερα ports εργασιών σε κάθε interface του host αντί να μένουν πίσω από το υπογεγραμμένο proxy του Libre WebUI.
Ενσωματωμένο Ollama
docker compose up -d
Ανοίξτε http://localhost:8080. Το WebUI port δένει loopback. Ορίστε WEBUI_BIND_ADDRESS=0.0.0.0 μόνο για έμπιστο LAN ή reverse proxy και περιορίστε με firewall.
Το Ollama μένει ιδιωτικό στο Compose network. Για loopback πρόσβαση από εφαρμογές host:
docker compose -f docker-compose.yml -f docker-compose.ollama-host.yml up -d
Ορίστε OLLAMA_BIND_ADDRESS μόνο όταν άλλο μηχάνημα πρέπει να φτάσει Ollama και προστατέψτε το port.
NVIDIA GPU
docker compose -f docker-compose.gpu.yml up -d
Ελέγξτε GPU από το container Ollama αν μοντέλα τρέχουν σε CPU.
Εξωτερικό 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 με απομονωμένο socket
Για Work χωρίς raw socket στην web εφαρμογή:
docker compose -f docker-compose.socket-proxy.yml up -d
Εσωτερική proxy κρατά /var/run/docker.sock και προωθεί μόνο containers, images, volumes, networks, exec και info. Αρνείται swarm, secrets, configs, build, system. Το Libre WebUI τη χρησιμοποιεί μέσω DOCKER_HOST=tcp://docker-socket-proxy:2375 χωρίς socket ή DOCKER_GID. Terminal και diagnostics λειτουργούν το ίδιο. Η proxy στενεύει API αλλά δεν είναι πλήρης tenant isolation, αφού η δημιουργία containers μπορεί να bind-mountάρει host paths.
Μόνιμα δεδομένα
Τα backend δεδομένα βρίσκονται στο /app/backend/data και το Compose το συνδέει ως named volume. Άμεσο docker run χρησιμοποιεί την ίδια θέση, με προσωρινό preflight στο /app/backend/temp. Συνδέετε πάντα /app/backend/data όταν container μπορεί να αναδημιουργηθεί.
Σε παραγωγή ορίστε σταθερά secrets:
JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
Κρατήστε backup volume και κλειδιού μαζί. Πριν διαγράψετε παλιό container, ελέγξτε /app/backend/data/.encryption_key ή κρατήστε το ENCRYPTION_KEY· παλιά images ίσως αποθήκευσαν το μοναδικό κλειδί στο layer container. Αρχεία Work σε ξεχωριστά volumes δεν περιλαμβάνονται στο κανονικό backup.
Δημόσια πρόσβαση
Τα Compose files δένουν WebUI σε loopback και ορίζουν CORS_ORIGIN απευθείας. Επεξεργαστείτε libre-webui.environment ή δημιουργήστε compose.origin.yml:
services:
libre-webui:
environment:
CORS_ORIGIN: https://your-domain.example
BASE_URL: https://your-domain.example
docker compose -f docker-compose.yml -f compose.origin.yml up -d
Μετά τοποθετήστε Libre WebUI πίσω από HTTPS reverse proxy και ορίστε WEBUI_BIND_ADDRESS στο ακριβές interface.
Ο server σερβίρει ήδη αποδοτικά το build: τα hashed bundles σε /js/ και /assets/ στέλνονται με brotli ή gzip και ετήσια immutable cache, ενώ το index.html και ο service worker είναι no-cache, ώστε κάθε νέα έκδοση να φορτώνεται αμέσως. Το proxy δεν χρειάζεται να τα ξανασυμπιέσει ή να τα κρατά σε cache· περάστε το Accept-Encoding.
Χρήσιμες εντολές
docker compose ps
docker compose logs -f libre-webui
docker compose logs -f ollama
docker compose pull
docker compose up -d