Skip to main content

ADOLF CORE — Часть 1.1: Open WebUI — Обзор и установка

Проект: Ядро корпоративной AI-системы
Модуль: User Interface
Версия: 4.1
Дата: Январь 2026

1. Обзор

1.1. Назначение

Open WebUI — единый интерфейс взаимодействия пользователей с системой Adolf:
  • Чат с AI-ассистентом
  • Загрузка и модерация документов
  • Работа с отзывами и вопросами
  • Мониторинг цен конкурентов
  • Аналитика и отчёты
  • Системные настройки

1.2. Почему Open WebUI

КритерийOpen WebUIСамописный React
Time-to-Market1-2 недели2-3 месяца
ПоддержкаАктивное сообществоСвоя команда
Функциональность80% из коробки100% кастом
PWAВстроеноТребует разработки
Чат-интерфейсГотовыйС нуля
Pipelines/ToolsВстроенная системаСвоя архитектура

1.3. Ключевые возможности

  • Pipelines — агенты для каждого модуля системы
  • Tools — инструменты с Function Calling
  • PWA — установка на мобильные устройства
  • WebSocket — real-time уведомления
  • Markdown/LaTeX — форматирование в чате
  • Голосовой ввод — STT/TTS интеграция

2. Архитектура

2.1. Общая схема

2.2. Компоненты Open WebUI

2.3. Потоки данных

2.4. Компоненты системы

КомпонентТехнологияНазначение
Open WebUIDockerОсновной интерфейс
Nginxnginx:alpineSSL, Reverse Proxy, WebSocket
PipelinesPythonАгенты модулей
ToolsPython/JSFunction Calling инструменты
MiddlewareFastAPIBackend API

3. Установка и конфигурация

3.1. Требования

РесурсМинимумРекомендуется
CPU2 vCPU4 vCPU
RAM2 GB4 GB
Disk10 GB20 GB
Docker24.0+Latest
Docker Compose2.20+Latest

3.2. Docker Compose

# docker-compose.yml
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/ssl:/etc/nginx/ssl:ro
      - ./nginx/html:/usr/share/nginx/html:ro
    depends_on:
      - open-webui
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    volumes:
      - open-webui-data:/app/backend/data
      - ./pipelines:/app/backend/pipelines:ro
      - ./tools:/app/backend/tools:ro
    environment:
      # Базовые настройки
      - WEBUI_NAME=Adolf
      - WEBUI_URL=https://adolf.su
      - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
      
      # Отключение регистрации
      - ENABLE_SIGNUP=false
      - ENABLE_LOGIN_FORM=true
      
      # OpenAI-compatible endpoint (Middleware)
      - OPENAI_API_BASE_URL=http://middleware:8000/v1
      - OPENAI_API_KEY=${MIDDLEWARE_API_KEY}
      
      # Модели
      - DEFAULT_MODELS=gpt-4o-mini
      
      # RAG (отключаем встроенный, используем Middleware)
      - ENABLE_RAG_WEB_SEARCH=false
      - ENABLE_RAG_LOCAL=false
      
      # WebSocket
      - ENABLE_WEBSOCKET_SUPPORT=true
      
      # Файлы
      - MAX_UPLOAD_SIZE=52428800  # 50 MB
      
      # Логирование
      - LOG_LEVEL=INFO
    depends_on:
      - middleware
    restart: unless-stopped

  middleware:
    build: ./middleware
    environment:
      - DATABASE_URL=${DATABASE_URL}
      - REDIS_URL=${REDIS_URL}
      - TIMEWEB_AI_API_KEY=${TIMEWEB_AI_API_KEY}
      - TIMEWEB_KB_ID=${TIMEWEB_KB_ID}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
    restart: unless-stopped

volumes:
  open-webui-data:

3.3. Nginx конфигурация

# nginx/conf.d/adolf.conf

upstream open-webui {
    server open-webui:8080;
}

upstream middleware {
    server middleware:8000;
}

server {
    listen 80;
    server_name adolf.su;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name adolf.su;

    # SSL
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;

    # Security headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Gzip
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;

    # Open WebUI
    location / {
        proxy_pass http://open-webui;
        proxy_http_version 1.1;
        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;
        
        # WebSocket
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }

    # Middleware API
    location /api/v1/ {
        proxy_pass http://middleware/api/v1/;
        proxy_http_version 1.1;
        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;
    }

    # PWA manifest
    location /manifest.json {
        alias /usr/share/nginx/html/manifest.json;
        add_header Cache-Control "public, max-age=86400";
    }

    # Service Worker
    location /sw.js {
        proxy_pass http://open-webui/sw.js;
        add_header Cache-Control "no-cache";
    }

    # File uploads
    client_max_body_size 50M;
}

3.4. Переменные окружения

# .env

# Open WebUI
WEBUI_SECRET_KEY=your-secret-key-here
MIDDLEWARE_API_KEY=your-middleware-api-key

# Database
DATABASE_URL=postgresql://adolf:password@postgres:5432/adolf

# Redis
REDIS_URL=redis://redis:6379/0

# Timeweb
TIMEWEB_AI_API_KEY=your-timeweb-api-key
TIMEWEB_KB_ID=your-kb-id

# OpenAI
OPENAI_API_KEY=your-openai-api-key

# Domain
DOMAIN=adolf.su

3.5. Команды запуска

# Первый запуск
docker compose up -d

# Просмотр логов
docker compose logs -f open-webui

# Перезапуск после изменений
docker compose restart open-webui

# Обновление образа
docker compose pull open-webui
docker compose up -d open-webui

Конец части 1.1 Следующая часть: 1.2 — Интерфейс и Pipelines