Этот учебник создан сообществом и не поддерживается командой Open WebUI. Он служит только демонстрацией того, как настроить Open WebUI для конкретного использования. Хотите внести свой вклад? Ознакомьтесь с учебником по внесению изменений.
HTTPS через Nginx
Обеспечение безопасной связи между вашими пользователями и Open WebUI имеет первостепенное значение. HTTPS (HyperText Transfer Protocol Secure) шифрует передаваемые данные, защищая их от перехвата и подделки. Настраивая Nginx как обратный прокси-сервер, вы можете легко добавить HTTPS к вашему развертыванию Open WebUI, повышая безопасность и надежность.
Это руководство предлагает три метода настройки HTTPS:
- Самоподписанные сертификаты: подходит для разработки и внутреннего использования, с использованием Docker.
- Lets Encrypt: идеально для производственных сред, где требуются доверенные SSL-сертификаты, с использованием Docker.
- Windows+Самоподписанные: упрощённые инструкции для разработки и внутреннего использования на Windows, Docker не требуется.
Выберите метод, который лучше всего соответствует вашим требованиям к развертыванию.
- Nginx Proxy Manager
- Lets Encrypt
- Самоподписанные
- Windows
Nginx Proxy Manager
Nginx Proxy Manager (NPM) позволяет легко управлять обратными прокси и защищать ваши локальные приложения, такие как Open WebUI, с помощью действительных SSL-сертификатов от Lets Encrypt. Эта настройка обеспечивает доступ по HTTPS, который необходим для использования функций голосового ввода на многих мобильных браузерах из-за требований безопасности, без прямого доступа к конкретному порту приложения в интернете.
Требования
- Домашний сервер с установленным Docker и запущенным контейнером open-webui.
- Имя домена (наприм ер, бесплатные варианты, такие как DuckDNS, или платные, такие как Namecheap/GoDaddy).
- Базовые знания о Docker и настройке DNS.
Шаги
-
Создание директорий для файлов Nginx:
mkdir ~/nginx_config
cd ~/nginx_config -
Настройка Nginx Proxy Manager с помощью Docker:
nano docker-compose.yml
services:
app:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- 80:80
- 81:81
- 443:443
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Запустите контейнер:
docker-compose up -d
-
Настройка DNS и домена:
- Войдите в систему вашего провайдера домена (например, DuckDNS) и создайте домен.
- Направьте домен на локальный IP вашего прокси (например, 192.168.0.6).
- Если вы используете DuckDNS, получите API-токен на их панели управления.
Вот простой пример, как это делается на https://www.duckdns.org/domains :
- Настройка SSL-сертификатов:
- Перейдите на Nginx Proxy Manager по адресу http://server_ip:81. Например:
192.168.0.6:81
- Войдите с учетными данными по умолчанию ([email protected] / changeme). Изменит е их, как будет предложено.
- Перейдите в SSL-сертификаты → Добавить SSL-сертификат → Lets Encrypt.
- Введите ваш email и доменное имя, которое вы получили от DuckDNS. Один домен содержит звездочку, другой - нет. Пример:
*.hello.duckdns.org
иhello.duckdns.org
. - Выберите Использовать DNS challenge, выберите DuckDNS и вставьте ваш API-токен. пример:
dns_duckdns_token=f4e2a1b9-c78d-e593-b0d7-67f2e1c9a5b8
- Согласитесь с условиями Lets Encrypt и сохраните. Измените время распространения если нужно (120 секунд).
- Создание прокси-хостов:
- Для каждого сервиса (например, openwebui, nextcloud), перейдите в Hosts → Proxy Hosts → Add Proxy Host.
- Заполните имя домена (например, openwebui.hello.duckdns.org).
- Установите схему в HTTP (по умолчанию), включите
Websockets support
и укажите IP вашего Docker (если Docker с open-webui запущен на том же компьютере, что и NGINX manager, это будет тот же IP, что и раньше (пример:192.168.0.6
) - Выберите SSL-сертификат, который был создан ранее, включите SSL, и активируйте HTTP/2.
- Добавьте ваш URL в open-webui (иначе будет ошибка HTTPS):
- Перейдите в ваш open-webui → Admin Panel → Settings → General
- В текстовом поле Webhook URL введите URL, через который вы будете подключаться к вашему open-webui через обратный прокси Nginx. Пример:
hello.duckdns.org
(не обязательно для этого) илиopenwebui.hello.duckdns.org
(обязательно для этого).
Доступ к WebUI:
Получите доступ к Open WebUI через HTTPS по адресу hello.duckdns.org
или openwebui.hello.duckdns.org
(в зависимости от вашей настройки).
Заметка о файерволе: Учтите, что локальное программное обеспечение файервола (например, Portmaster) может блокировать внутренний сетевой трафик Docker или необходимые порты. Если у вас есть проблемы, проверьте правила файервола, чтобы обеспечить необходимую связь для этой настройки.
Lets Encrypt
Lets Encrypt предоставляет бесплатные SSL-сертификаты, которые доверяют большинство браузеров, идеально подходят для рабочих сред.
Предварительные условия
- Certbot установлен на вашей системе.
- DNS-записи правильно настроены для указания на ваш сервер.
Шаги
-
Создайте каталоги для файлов Nginx:
mkdir -p conf.d ssl
-
Создайте файл конфигурации Nginx:
conf.d/open-webui.conf
:server {
listen 80;
server_name your_domain_or_IP;
location / {
proxy_pass http://host.docker.internal:3000;
# Добавьте поддержку WebSocket (необходимо для версии 0.5.0 и выше)
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_buffering off;
# (Необязательно) Увеличьте максимальный размер запроса для больших вложений и длинных аудиосообщений
client_max_body_size 20M;
proxy_read_timeout 10m;
}
} -
Упрощенный скрипт Lets Encrypt:
enable_letsencrypt.sh
:#!/bin/bash
# Описание: Упрощенный скрипт для получения и установки SSL-сертификатов Lets Encrypt с использованием Certbot.
DOMAIN="your_domain_or_IP"
EMAIL="[email protected]"
# Установите Certbot, если он не установлен
if ! command -v certbot &> /dev/null; then
echo "Certbot не найден. Установка..."
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
fi
# Получите SSL-сертификат
sudo certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos -m "$EMAIL"
# Перезагрузите Nginx для применения изменений
sudo systemctl reload nginx
echo "SSL-сертификат Lets Encrypt установлен и Nginx перезагружен."Сделайте скрипт исполнимым:
chmod +x enable_letsencrypt.sh
-
Обновите конфигурацию Docker Compose:
Добавьте сервис Nginx в файл
docker-compose.yml
:services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl
depends_on:
- open-webui -
Запустите сервис Nginx:
docker compose up -d nginx
-
Запустите скрипт Lets Encrypt:
Выполните скрипт для получения и установки SSL-сертификата:
./enable_letsencrypt.sh
Доступ к WebUI
Получите доступ к Open WebUI через HTTPS по адресу:
Самоподписанный сертификат
Использование самоподписанных сертификатов подходит для разработки или внутреннего использования, где доверие не является критическим фактором.
Шаги
-
Создайте директории для файлов Nginx:
mkdir -p conf.d ssl
-
Создайте конфигурационный файл Nginx:
conf.d/open-webui.conf
:server {
listen 443 ssl;
server_name your_domain_or_IP;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://host.docker.internal:3000;
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_buffering off;
# (Опционально) Увеличение максимального размера запроса для больших вложений и длинных аудиосообщений
client_max_body_size 20M;
proxy_read_timeout 10m;
}
} -
Сгенерируйте самоподписанные SSL сертификаты:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ssl/nginx.key \
-out ssl/nginx.crt \
-subj "/CN=your_domain_or_IP" -
Обновите конфигурацию Docker Compose:
Добавьте сервис Nginx в ваш
docker-compose.yml
:services:
nginx:
image: nginx:alpine
ports:
- "443:443"
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./ssl:/etc/nginx/ssl
depends_on:
- open-webui