Files
iiEsaywebUI/docs/DEPLOYMENT.md

289 lines
12 KiB
Markdown
Raw Normal View 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 в документации.
### Шаги (если репозиторий ещё не инициализирован)
```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`.