Dieses Tutorial ist ein Community-Beitrag und wird vom Open WebUI-Team nicht unterstützt. Es dient lediglich als Demonstration, wie Open WebUI für Ihren spezifischen Anwendungsfall angepasst werden kann. Möchten Sie beitragen? Schauen Sie sich das Tutorial zum Beitragen an.
HAProxy-Konfiguration für Open WebUI
HAProxy (High Availability Proxy) ist eine spezialisierte Load-Balancing- und Reverse-Proxy-Lösung, die hochgradig konfigurierbar ist und darauf ausgelegt ist, große Mengen an Verbindungen mit einem relativ geringen Ressourcenverbrauch zu verarbeiten. Weitere Informationen finden Sie unter: https://www.haproxy.org/
HAProxy und Let's Encrypt installieren
Installieren Sie zuerst HAProxy und Let's Encrypts certbot
Red Hat-Derivate
sudo dnf install haproxy certbot openssl -y
Debian-Derivate
sudo apt install haproxy certbot openssl -y
HAProxy-Konfigurationsgrundlagen
Die HAProxy-Konfiguration wird standardmäßig in /etc/haproxy/haproxy.cfg gespeichert. Diese Datei enthält alle Konfigurationsdirektiven, die bestimmen, wie HAProxy funktioniert.
Die Basiskonfiguration für HAProxy zur Arbeit mit Open WebUI ist ziemlich einfach.
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
#adjust the dh-param if too low
tune.ssl.default-dh-param 2048
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor #except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 300s
timeout queue 2m
timeout connect 120s
timeout client 10m
timeout server 10m
timeout http-keep-alive 120s
timeout check 10s
maxconn 3000
#http
frontend web
#Non-SSL
bind 0.0.0.0:80
#SSL/TLS
bind 0.0.0.0:443 ssl crt /path/to/ssl/folder/
#Let's Encrypt SSL
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
#Subdomain method
acl chat-acl hdr(host) -i subdomain.domain.tld
#Path Method
acl chat-acl path_beg /owui/
use_backend owui_chat if chat-acl
#Pass SSL Requests to Lets Encrypt
backend letsencrypt-backend
server letsencrypt 127.0.0.1:8688
#OWUI Chat
backend owui_chat
# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]
http-request set-header X-Forwarded-Proto https if { ssl_fc }
server chat <ip>:3000
Sie werden sehen, dass wir ACL-Datensätze (Router) sowohl für Open WebUI als auch für Let's Encrypt haben. Um WebSocket mit OWUI zu verwenden, müssen Sie eine SSL-Konfiguration haben, und der einfachste Weg, dies zu tun, ist die Verwendung von Let's Encrypt.
Sie können entweder die Subdomain-Methode oder die Pfad-Methode zum Routen von Traffic zu Open WebUI verwenden. Die Subdomain-Methode erfordert eine dedizierte Subdomain (z. B. chat.ihredomain.com), während die Pfad-Methode es Ihnen ermöglicht, Open WebUI über einen bestimmten Pfad auf Ihrer Domain (z. B. ihredomain.com/owui/) aufzurufen. Wählen Sie die Methode, die am besten zu Ihren Anforderungen passt, und aktualisieren Sie die Konfiguration entsprechend.
Sie müssen Port 80 und 443 für Ihren HAProxy-Server freigeben. Diese Ports sind erforderlich, damit Let's Encrypt Ihre Domain validieren kann und für HTTPS-Traffic. Sie müssen auch sicherstellen, dass Ihre DNS-Einträge korrekt konfiguriert sind, um auf Ihren HAProxy-Server zu verweisen. Wenn Sie HAProxy zu Hause betreiben, müssen Sie Port-Weiterleitung in Ihrem Router verwenden, um die Ports 80 und 443 an Ihren HAProxy-Server weiterzuleiten.
SSL-Zertifikate mit Let's Encrypt ausstellen
Bevor Sie HAProxy starten, sollten Sie ein selbstsigniertes Zertifikat generieren, das als Platzhalter dient, bis Let's Encrypt ein ordnungsgemäßes ausstellt. So generieren Sie ein selbstsigniertes Zertifikat
openssl req -x509 -newkey rsa:2048 -keyout /tmp/haproxy.key -out /tmp/haproxy.crt -days 3650 -nodes -subj "/CN=localhost"
Kombinieren Sie dann den Schlüssel und das Zertifikat zu einer PEM-Datei, die HAProxy verwenden kann
cat /tmp/haproxy.crt /tmp/haproxy.key > /etc/haproxy/certs/haproxy.pem
Stellen Sie sicher, dass Sie die HAProxy-Konfiguration entsprechend Ihren Bedürfnissen und Ihrer Konfiguration aktualisieren.
Sobald Ihre HAProxy-Konfiguration eingerichtet ist, können Sie certbot verwenden, um Ihre SSL-Zertifikate zu erhalten und zu verwalten. Certbot kümmert sich um den Validierungsprozess mit Let's Encrypt und aktualisiert Ihre Zertifikate automatisch, wenn sie kurz vor dem Ablauf stehen (vorausgesetzt, Sie verwenden den certbot-automatischen Erneuerungsservice).
Sie können die HAProxy-Konfiguration validieren, indem Sie haproxy -c -f /etc/haproxy/haproxy.cfg ausführen. Wenn keine Fehler auftreten, können Sie HAProxy mit systemctl start haproxy starten und mit systemctl status haproxy überprüfen, ob es läuft.
Um sicherzustellen, dass HAProxy mit dem System startet, führen Sie systemctl enable haproxy aus.
Wenn Sie HAProxy konfiguriert haben, können Sie Let's Encrypt verwenden, um Ihr gültiges SSL-Zertifikat auszustellen. Zuerst müssen Sie sich bei Let's Encrypt registrieren. Dies müssen Sie nur einmal tun
certbot register --agree-tos --email Ihre@email.com --non-interactive
Dann können Sie Ihr Zertifikat anfordern
certbot certonly -n --standalone --preferred-challenges http --http-01-port-8688 -d yourdomain.com
Sobald das Zertifikat ausgestellt ist, müssen Sie die Zertifikats- und privaten Schlüsseldateien zu einer einzigen PEM-Datei zusammenführen, die HAProxy verwenden kann.
cat /etc/letsencrypt/live/{domain}/fullchain.pem /etc/letsencrypt/live/{domain}/privkey.pem > /etc/haproxy/certs/{domain}.pem
chmod 600 /etc/haproxy/certs/{domain}.pem
chown haproxy:haproxy /etc/haproxy/certs/{domain}.pem
Sie können dann HAProxy neu starten, um das neue Zertifikat anzuwenden: systemctl restart haproxy
HAProxy Manager (einfache Bereitstellungsoption)
Wenn Sie etwas haben möchten, das Ihre HAProxy-Konfiguration und Let's Encrypt-SSLs automatisch verwaltet, habe ich ein einfaches Python-Skript geschrieben und einen Docker-Container erstellt, den Sie verwenden können, um Ihre HAProxy-Konfiguration zu erstellen und zu verwalten und den Lebenszyklus von Let's Encrypt-Zertifikaten zu verwalten.
https://github.com/shadowdao/haproxy-manager
Bitte geben Sie Port 8000 nicht öffentlich preis, wenn Sie das Skript oder den Container verwenden!