289 lines
12 KiB
Markdown
289 lines
12 KiB
Markdown
# Инструкция по развёртыванию 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`.
|