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

289 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Инструкция по развёртыванию 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 в документации.
### Шаги (если репозиторий ещё не инициализирован)
```bash
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. **Каталог и конфиг:**
```bash
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`:
```bash
openssl rand -hex 32
```
- Остальное по необходимости (Nextcloud для воркера, Vaultwarden, Ollama). Для GPU: `NVIDIA_VISIBLE_DEVICES=all`.
3. **Запуск:**
```bash
docker compose up -d
docker compose ps
```
4. **Модель Ollama (после старта контейнера ollama):**
```bash
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` должен быть запущен.
```bash
cd /home/its/iiEasyWeb
sudo ./scripts/rebrand_safe_final.sh
```
### После обновления образа Open WebUI
```bash
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. **Проверка после старта:**
```bash
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. **Диагностика:**
```bash
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`.
### Переменные окружения
```bash
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), не основной пароль учётной записи.
### Установка и запуск
```bash
pip install -r requirements.txt
python nextcloud_sync.py --once
```
Постоянный режим (daemon):
```bash
python nextcloud_sync.py --daemon
```
### Production (systemd)
Создайте файл `/etc/systemd/system/iieasy-sync.service`:
```ini
[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` и пути при необходимости. Затем:
```bash
sudo systemctl daemon-reload
sudo systemctl enable iieasy-sync
sudo systemctl start iieasy-sync
```
---
## Порядок выполнения
1. **Git** — инициализация репозитория, remote, первый push (без `.env` и секретов).
2. **Docker** — `cp .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`.