Files
iiEsaywebUI/docs/DEPLOYMENT.md
2026-02-19 18:12:09 +00:00

12 KiB
Raw Blame History

Инструкция по развёртыванию iiEasyWeb

Пошаговое развёртывание: Git, Docker, ребрендинг, поиск (SearXNG), воркер Nextcloud (Python).


Требования

  • Docker и Docker Compose
  • (Опционально) NVIDIA GPU и драйверы — для Ollama
  • Доступ к Gitea (например 192.168.88.165:3000)
  • Nextcloud и Authentik — при использовании воркера и OAuth

Архитектура

┌─────────────────────────────────────────────────────────────┐
│                    Reverse Proxy (Nginx)                     │
│              *.iieasy.ru (odo.iieasy.ru)                     │
└─────────────────────────────────────────────────────────────┘
                            │
        ┌───────────────────┼───────────────────┐
        │                   │                   │
┌───────▼────────┐  ┌───────▼────────┐  ┌───────▼────────┐
│  Open WebUI    │  │   Authentik     │  │   Nextcloud    │
│  odo.iieasy.ru │  │ auth.iieasy.ru  │  │next.iieasy.ru  │
└───────┬────────┘  └─────────────────┘  └───────┬────────┘
        │                                         │
        │  ┌──────────────────────────────────────┘
        │  │
        ▼  ▼
┌─────────────────────────────────────────────────────────────┐
│              Docker Network (iieasy-ai)                     │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐                  │
│  │  Ollama  │  │  Qdrant  │  │ SearXNG  │                  │
│  │ (GPU)    │  │ (Vector) │  │ (Search) │                  │
│  └──────────┘  └──────────┘  └──────────┘                  │
└─────────────────────────────────────────────────────────────┘
                            │
                            ▼
                    ┌───────────────┐
                    │ Python Worker │
                    │ (Nextcloud →  │
                    │  Qdrant Sync) │
                    └───────────────┘

1. Git — отправка кода в репозиторий

Сервер Gitea: 192.168.88.165, веб-интерфейс на порту 3000.
Репозиторий: ars/iiEsaywebUI.

Что не должно попадать в Git

  • .env, worker/.env
  • worker/.venv, секретные ключи, токены
  • Убедитесь, что в .gitignore есть эти пути (в проекте уже настроено).

Вариант A — SSH

  1. Настройте ~/.ssh/config (при необходимости укажите порт SSH сервера, если не 22):

    Host 192.168.88.165
      HostName 192.168.88.165
      User git
      Port 22
    
  2. URL репозитория: git@192.168.88.165:ars/iiEsaywebUI.git

Вариант B — HTTPS с токеном

  • URL: https://192.168.88.165:3000/ars/iiEsaywebUI.git
  • При push: логин ars, пароль — подставьте свой токен из Gitea (или пароль учётной записи, в зависимости от настроек Gitea). Не храните токен в URL в документации.

Шаги (если репозиторий ещё не инициализирован)

cd /home/its/iiEasyWeb
git init
git remote add origin git@192.168.88.165:ars/iiEsaywebUI.git
# или HTTPS: git remote add origin https://192.168.88.165:3000/ars/iiEsaywebUI.git
git add .
git status   # проверьте, что нет .env и секретов
git commit -m "Initial deployment setup"
git branch -M main
git push -u origin main

Если ветка по умолчанию на Gitea — master, используйте git push -u origin master.


2. Docker — поднятие стека

Файлы: корень проекта — docker-compose.yml, .env.example.

Шаги

  1. Каталог и конфиг:

    cd /home/its/iiEasyWeb
    cp .env.example .env
    
  2. Редактирование .env:

    • Домены: DOMAIN_OPENWEBUI, DOMAIN_NEXTCLOUD, DOMAIN_AUTHENTIK, при необходимости DOMAIN_VAULTWARDEN.

    • Authentik: OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OPENID_CONNECT_ISSUER.

    • Qdrant — сгенерировать ключ и прописать в QDRANT_API_KEY:

      openssl rand -hex 32
      
    • Остальное по необходимости (Nextcloud для воркера, Vaultwarden, Ollama). Для GPU: NVIDIA_VISIBLE_DEVICES=all.

  3. Запуск:

    docker compose up -d
    docker compose ps
    
  4. Модель Ollama (после старта контейнера ollama):

    docker exec ollama ollama pull gemma3n:e4b-it-fp16
    docker exec ollama ollama list
    
  5. Проверка: Open WebUI доступен на порту 3001 (маппинг 3001:8080 в docker-compose.yml), т.е. http://localhost:3001 или ваш DOMAIN_OPENWEBUI.


3. Ребрендинг

Используйте только скрипт: scripts/rebrand_safe_final.sh. Старый rebrand.sh может ломать OAuth.

Медиафайлы

Поместите в каталог media/:

  • Обязательно: media/logo.png
  • По желанию: favicon.png, logo-dark.svg, logo-light.svg

Запуск ребрендинга

Контейнер open-webui должен быть запущен.

cd /home/its/iiEasyWeb
sudo ./scripts/rebrand_safe_final.sh

После обновления образа Open WebUI

docker compose pull
docker compose up -d
sudo ./scripts/rebrand_safe_final.sh

Проверка

Очистите кеш браузера и откройте http://localhost:3001 или DOMAIN_OPENWEBUI.

Подробнее: QUICK_START.md, REBRAND_SOLUTION.md.


4. Поиск (SearX / SearXNG)

Поиск уже включён в docker-compose.yml: сервис searxng, Open WebUI настроен на него (RAG_WEB_SEARCH_ENGINE=searxng, SEARXNG_QUERY_URL=...&format=json, ENABLE_WEB_SEARCH=true).

Настройка при развёртывании

  1. Секретный ключ SearXNG
    В searxng/settings.yml замените CHANGE_ME_SECRET_KEY на свою строку (любая случайная строка). Иначе в логах возможны предупреждения.

  2. Проверка после старта:

    docker exec open-webui curl -s "http://searxng:8080/search?q=test&format=json" | head -c 200
    
  3. Если появляется ошибка User-Agent (Invalid leading whitespace):
    Используйте проверенный скрипт fix_user_agent_final.sh. В docker-compose.yml для сервиса open-webui добавьте:

    • volume: ./scripts/fix_user_agent_final.sh:/fix_user_agent_final.sh:ro
    • entrypoint: ["/bin/sh", "-c", "sh /fix_user_agent_final.sh && exec /bin/bash /app/start.sh"]
      Затем перезапустите: docker compose restart open-webui.
  4. Диагностика:

    sudo ./scripts/diagnose_search.sh
    

    При проблемах: sudo ./scripts/fix_search_complete.sh.

Подробнее: SEARXNG_SETUP.md.


5. Nextcloud Python (воркер)

Воркер синхронизации Nextcloud → Open WebUI/Qdrant запускается на хосте (не в Docker).

Каталог: worker/. Файлы: nextcloud_sync.py, .env.example, requirements.txt.

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

cd /home/its/iiEasyWeb/worker
cp .env.example .env

Заполните в .env:

  • Nextcloud: DOMAIN_NEXTCLOUD, NC_USER, NC_APP_PASSWORD, при необходимости NC_SCAN_PATHS.
  • Open WebUI: DOMAIN_OPENWEBUI, OPENWEBUI_API_KEY (ключ создаётся в Open WebUI: Settings → Account → API Keys).
  • По желанию: SYNC_INTERVAL, MAX_FILE_SIZE, LOG_LEVEL.

Важно: для Nextcloud используйте пароль приложения (App Password), не основной пароль учётной записи.

Установка и запуск

pip install -r requirements.txt
python nextcloud_sync.py --once

Постоянный режим (daemon):

python nextcloud_sync.py --daemon

Production (systemd)

Создайте файл /etc/systemd/system/iieasy-sync.service:

[Unit]
Description=iiEasy Nextcloud Sync Worker
After=network.target

[Service]
Type=simple
User=its
WorkingDirectory=/home/its/iiEasyWeb/worker
ExecStart=/usr/bin/python3 /home/its/iiEasyWeb/worker/nextcloud_sync.py --daemon
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Замените User=its и пути при необходимости. Затем:

sudo systemctl daemon-reload
sudo systemctl enable iieasy-sync
sudo systemctl start iieasy-sync

Порядок выполнения

  1. Git — инициализация репозитория, remote, первый push (без .env и секретов).
  2. Dockercp .env.example .env, правка .env, генерация QDRANT_API_KEY, docker compose up -d, загрузка модели Ollama.
  3. Первый вход в Open WebUI (при необходимости настройка Authentik OIDC), создание API ключа в Settings → Account → API Keys.
  4. Ребрендинг — файлы в media/, sudo ./scripts/rebrand_safe_final.sh.
  5. Поиск — правка searxng/settings.yml (secret_key), при ошибке User-Agent — entrypoint с fix_user_agent_final.sh; при проблемах — diagnose_search.sh, fix_search_complete.sh.
  6. Nextcloud Python — настройка worker/.env, pip install -r requirements.txt, проверка --once, затем --daemon или systemd.

Замечания

  • Токен/пароль Gitea: в документации не указывайте токен в открытом виде; используйте «подставить свой токен из Gitea» или SSH.
  • Имя репозитория: на сервере используется iiEsaywebUI (с одной «a») — в URL remote указывайте так же.
  • Порт SSH: если Gitea слушает SSH на порту не 22 (например 3000), укажите в ~/.ssh/config для хоста Port 3000; URL остаётся git@192.168.88.165:ars/iiEsaywebUI.git.