Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« Open WebUI » : différence entre les versions

De Le Wiki de Lug
Aucun résumé des modifications
Balise : Révocation manuelle
 
(19 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
= Prérequis =
= Prérequis =
Pour une utilisation de base :
Pour une utilisation de base :
* si Alpine LXC : avec Nesting et keyctl activé (Docker).


* RAM :
* RAM :
Ligne 15 : Ligne 17 :
** 10 Go → utilisable
** 10 Go → utilisable
** 20 Go → confortable
** 20 Go → confortable
= Installation =
* On installe docker (Alpine) :
# apk update && apk upgrade
# apk add docker docker-cli-compose curl
# rc-update add docker default
# rc-service docker start
* On installe le service :
# mkdir -p /opt/openwebui
Le fichier docker-compose :
# vi /opt/openwebui/docker-compose.yml
services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    restart: unless-stopped
    ports:
      - "3000:8080"
      <font color = grey># Pour verrouiller l'écoute sur une seule interface :
      # - "<font color = blue>IP_SERVEUR</font>:3000:8080"</font>
    environment:
      - OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=30
    volumes:
      - openwebui_data:/app/backend/data
volumes:
  openwebui_data:
(Optionnel) Pour connecter automatiquement Hermes :
# vi /opt/openwebui/.env
OPENAI_API_BASE_URL=http://<font color = blue>IP_HERMES</font>:<font color = green>8642</font>/v1
OPENAI_API_KEY=<font color = blue>maclefsecrete</font>
On crée le conteneur :
# docker compose -f /opt/openwebui/docker-compose.yml --project-directory /opt/openwebui up -d
* Accéder à l'interface :
http://<font color = blue>IP_LXC</font>:3000
= vhost =
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = Voir [[Nginx_ReverseProxy_LXC_Alpine_Linux|Reverse Proxy Nginx]]
}}
server {
    listen 80;
    listen [::]:80;
    server_name    <font color = blue>openwebui.exemple.net</font>;
    return 301 <nowiki>https://</nowiki>$host$request_uri;
}
server {
    server_name    <font color = blue>openwebui.exemple.net</font>;
    # protection
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Permissions-Policy "geolocation=(self), microphone=(self), camera=(self)" always;
    add_header Strict-Transport-Security "max-age=31536000" always;
    location / {
            proxy_http_version 1.1;
            proxy_set_header Upgrade          $http_upgrade;
            proxy_set_header Connection        "upgrade";
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host  $host;
            proxy_set_header X-Forwarded-Port  $server_port;
            proxy_read_timeout 3600;
            proxy_send_timeout 3600;
            proxy_connect_timeout 60;
            client_max_body_size 100M;
            proxy_pass http://<font color = blue>IP_SERVEUR_WEB</font>:<font color = green>3000</font>;
            # proxy_pass http<font color = red>s</font>://<font color = blue>IP_SERVEUR_WEB:PORT</font>; #Alternatif pour redirection sur https
            proxy_buffering off; #activer pour désactiver le "buffering"
    }
    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/<font color = blue>openwebui.exemple.net</font>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<font color = blue>openwebui.exemple.net</font>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
}
= Mise à jour du conteneur =
# docker compose -f /opt/openwebui/docker-compose.yml pull
# docker compose -f /opt/openwebui/docker-compose.yml up -d --remove-orphans

Dernière version du 25 avril 2026 à 00:04

Prérequis

Pour une utilisation de base :

  • si Alpine LXC : avec Nesting et keyctl activé (Docker).
  • RAM :
    • 2 Go → minimum
    • 4 Go → recommandé
    • 8 Go → confortable
  • CPU / vCPU :
    • 1 vCPU → suffisant
    • 2 vCPU → recommandé
  • Espace disque :
    • 5 Go → minimum (test uniquement)
    • 10 Go → utilisable
    • 20 Go → confortable

Installation

  • On installe docker (Alpine) :
# apk update && apk upgrade
# apk add docker docker-cli-compose curl
# rc-update add docker default
# rc-service docker start
  • On installe le service :
# mkdir -p /opt/openwebui

Le fichier docker-compose :

# vi /opt/openwebui/docker-compose.yml
services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: openwebui
    restart: unless-stopped

    ports:
      - "3000:8080"
      # Pour verrouiller l'écoute sur une seule interface :
      # - "IP_SERVEUR:3000:8080"

    environment:
      - OPENAI_API_BASE_URL=${OPENAI_API_BASE_URL}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=30

    volumes:
      - openwebui_data:/app/backend/data

volumes:
  openwebui_data:

(Optionnel) Pour connecter automatiquement Hermes :

# vi /opt/openwebui/.env
OPENAI_API_BASE_URL=http://IP_HERMES:8642/v1
OPENAI_API_KEY=maclefsecrete

On crée le conteneur :

# docker compose -f /opt/openwebui/docker-compose.yml --project-directory /opt/openwebui up -d
  • Accéder à l'interface :
http://IP_LXC:3000

vhost

server {
    listen 80;
    listen [::]:80;
    server_name     openwebui.exemple.net;
    return 301 https://$host$request_uri;
}

server {
    server_name     openwebui.exemple.net;

    # protection
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Permissions-Policy "geolocation=(self), microphone=(self), camera=(self)" always;
    add_header Strict-Transport-Security "max-age=31536000" always;

    location / {
            proxy_http_version 1.1;

            proxy_set_header Upgrade           $http_upgrade;
            proxy_set_header Connection        "upgrade";
            proxy_set_header Host              $host;
            proxy_set_header X-Real-IP         $remote_addr;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Host  $host;
            proxy_set_header X-Forwarded-Port  $server_port;

            proxy_read_timeout 3600;
            proxy_send_timeout 3600;
            proxy_connect_timeout 60;

            client_max_body_size 100M;

            proxy_pass http://IP_SERVEUR_WEB:3000;
            # proxy_pass https://IP_SERVEUR_WEB:PORT; #Alternatif pour redirection sur https
            proxy_buffering off; #activer pour désactiver le "buffering"
    }

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot

    ssl_certificate /etc/letsencrypt/live/openwebui.exemple.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/openwebui.exemple.net/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;

}

Mise à jour du conteneur

# docker compose -f /opt/openwebui/docker-compose.yml pull
# docker compose -f /opt/openwebui/docker-compose.yml up -d --remove-orphans