Files

455 lines
11 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.

# 🐳 LCG с Ollama Server - Docker/Podman контейнер
Этот образ содержит Linux Command GPT (LCG) и Ollama сервер, работающие вместе в одном контейнере.
Поддерживается запуск через Docker и Podman.
## 📋 Описание
Контейнер автоматически запускает:
1 **Ollama сервер** (v0.9.5) на порту 11434
2 **LCG веб-сервер** на порту 8080
Ollama используется как провайдер LLM для генерации Linux команд.
## 🚀 Быстрый старт
### Предварительные требования
Перед сборкой Docker образа необходимо собрать бинарники:
```bash
# Из корня проекта
# Используйте goreleaser для сборки бинарников
goreleaser build --snapshot --clean
# Или используйте скрипт сборки
./deploy/4.build-binaries.sh v2.0.15
```
Убедитесь, что в папке `dist/` есть бинарники:
- `dist/lcg_linux_amd64_v1/lcg_*` для amd64
- `dist/lcg_linux_arm64_v8.0/lcg_*` для arm64
### Сборка образа
#### Docker
```bash
# Из корня проекта (важно: контекст должен быть корень проекта)
docker build -f Dockerfiles/OllamaServer/Dockerfile -t lcg-ollama:latest .
# Или с указанием архитектуры
docker buildx build \
--platform linux/amd64,linux/arm64 \
-f Dockerfiles/OllamaServer/Dockerfile \
-t lcg-ollama:latest .
```
#### Podman
```bash
# Из корня проекта
podman build -f Dockerfiles/OllamaServer/Dockerfile -t lcg-ollama:latest .
# Или с указанием архитектуры
podman build \
--platform linux/amd64,linux/arm64 \
-f Dockerfiles/OllamaServer/Dockerfile \
-t lcg-ollama:latest .
```
### Запуск контейнера
#### Docker run
```bash
docker run -d \
--name lcg-ollama \
-p 8080:8080 \
lcg-ollama:latest
ollama serve
```
#### Podman run
```bash
podman run -d \
--name lcg-ollama \
-p 8989:8080 \
--restart always \
lcg-ollama:latest \
ollama serve
```
когда контейнер запущен на удаленном хосте - можете воспользоваться консольными возможностями утилиты lcg следующим образом
``` bash
ssh user@[host_where_contaier_running] 'podman exec -it $(podman ps -q --filter \"ancestor=localhost/lcg-ollama:latest\") lcg [your query]
```
``` bash
ssh user@[host_where_contaier_running] 'podman exec -it $(podman ps -q --filter "ancestor=localhost/lcg-ollama:latest") /bin/sh -c "export LCG_MODEL=qwen3:0.6b && lcg config --full"'
### Использование docker-compose / podman-compose
#### Docker Compose
```bash
cd Dockerfiles/OllamaServer
docker-compose up -d
```
#### Podman Compose
```bash
cd Dockerfiles/OllamaServer
podman-compose -f podman-compose.yml up -d
```
Или используйте встроенную поддержку Podman:
```bash
cd Dockerfiles/OllamaServer
podman play kube podman-compose.yml
```
## 🌐 Доступ к сервисам
После запуска контейнера доступны:
- **LCG веб-интерфейс**: <http://localhost:8080>
- **Ollama API**: <http://localhost:11434>
## ⚙️ Переменные окружения
### Настройки LCG
| Переменная | Значение по умолчанию | Описание |
|------------|----------------------|----------|
| `LCG_PROVIDER` | `ollama` | Тип провайдера |
| `LCG_HOST` | `http://127.0.0.1:11434/` | URL Ollama API |
| `LCG_MODEL` | `codegeex4` | Модель для использования |
| `LCG_SERVER_HOST` | `0.0.0.0` | Хост LCG сервера |
| `LCG_SERVER_PORT` | `8080` | Порт LCG сервера |
| `LCG_SERVER_ALLOW_HTTP` | `true` | Разрешить HTTP |
| `LCG_RESULT_FOLDER` | `/app/data/results` | Папка для результатов |
| `LCG_PROMPT_FOLDER` | `/app/data/prompts` | Папка для промптов |
| `LCG_CONFIG_FOLDER` | `/app/data/config` | Папка для конфигурации |
### Настройки Ollama
| Переменная | Значение по умолчанию | Описание |
|------------|----------------------|----------|
| `OLLAMA_HOST` | `127.0.0.1` | Хост Ollama сервера |
| `OLLAMA_PORT` | `11434` | Порт Ollama сервера |
### Безопасность
| Переменная | Значение по умолчанию | Описание |
|------------|----------------------|----------|
| `LCG_SERVER_REQUIRE_AUTH` | `false` | Требовать аутентификацию |
| `LCG_SERVER_PASSWORD` | `admin#123456` | Пароль для аутентификации |
## 📦 Volumes
Рекомендуется монтировать volumes для персистентного хранения данных:
```bash
docker run -d \
--name lcg-ollama \
-p 8080:8080 \
-p 11434:11434 \
-v ollama-data:/home/ollama/.ollama \
-v lcg-results:/app/data/results \
-v lcg-prompts:/app/data/prompts \
-v lcg-config:/app/data/config \
lcg-ollama:latest
```
### Volumes описание
- `ollama-data`: Модели и данные Ollama
- `lcg-results`: Результаты генерации команд
- `lcg-prompts`: Системные промпты
- `lcg-config`: Конфигурация LCG
## 🔧 Примеры использования
### Запуск с кастомной моделью
```bash
docker run -d \
--name lcg-ollama \
-p 8080:8080 \
-p 11434:11434 \
-e LCG_MODEL=llama3:8b \
lcg-ollama:latest
```
### Запуск с аутентификацией
```bash
docker run -d \
--name lcg-ollama \
-p 8080:8080 \
-p 11434:11434 \
-e LCG_SERVER_REQUIRE_AUTH=true \
-e LCG_SERVER_PASSWORD=my_secure_password \
lcg-ollama:latest
```
### Запуск с кастомным портом
```bash
docker run -d \
--name lcg-ollama \
-p 9000:9000 \
-p 11434:11434 \
-e LCG_SERVER_PORT=9000 \
lcg-ollama:latest
```
## 📥 Загрузка моделей Ollama
После запуска контейнера можно загрузить модели:
```bash
# Подключиться к контейнеру
docker exec -it lcg-ollama sh
# Загрузить модель
ollama pull codegeex4
ollama pull llama3:8b
ollama pull qwen2.5:7b
```
Или извне контейнера:
```bash
# Убедитесь, что Ollama доступен извне (OLLAMA_HOST=0.0.0.0)
docker exec lcg-ollama ollama pull codegeex4
```
## 🔍 Проверка работоспособности
### Проверка Ollama
```bash
# Проверка health
curl http://localhost:11434/api/tags
# Список моделей
curl http://localhost:11434/api/tags | jq '.models'
```
### Проверка LCG
```bash
# Проверка веб-интерфейса
curl http://localhost:8080/
# Проверка через API
curl -X POST http://localhost:8080/api/execute \
-H "Content-Type: application/json" \
-d '{"prompt": "создать директорию test"}'
```
## 🐧 Podman специфичные инструкции
### Запуск с Podman
Podman работает аналогично Docker, но есть несколько отличий:
#### Создание сетей (если нужно)
```bash
podman network create lcg-network
```
#### Запуск с сетью
```bash
podman run -d \
--name lcg-ollama \
--network lcg-network \
-p 8080:8080 \
-p 11434:11434 \
lcg-ollama:latest
```
#### Запуск в rootless режиме
Podman по умолчанию работает в rootless режиме, что повышает безопасность:
```bash
# Не требует sudo
podman run -d \
--name lcg-ollama \
-p 8080:8080 \
-p 11434:11434 \
lcg-ollama:latest
```
#### Использование systemd для автозапуска
Создайте systemd unit файл:
```bash
# Генерируем unit файл
podman generate systemd --name lcg-ollama --files
# Копируем в systemd
sudo cp container-lcg-ollama.service /etc/systemd/system/
# Включаем автозапуск
sudo systemctl enable container-lcg-ollama.service
sudo systemctl start container-lcg-ollama.service
```
#### Проверка статуса
```bash
# Статус контейнера
podman ps
# Логи
podman logs lcg-ollama
# Логи в реальном времени
podman logs -f lcg-ollama
```
## 🐛 Отладка
### Просмотр логов
#### Docker log
```bash
# Логи контейнера
docker logs lcg-ollama
# Логи в реальном времени
docker logs -f lcg-ollama
```
#### Podman log
```bash
# Логи контейнера
podman logs lcg-ollama
# Логи в реальном времени
podman logs -f lcg-ollama
```
### Подключение к контейнеру
#### Docker exec
```bash
docker exec -it lcg-ollama sh
```
#### Podman exec
```bash
podman exec -it lcg-ollama sh
```
### Проверка процессов
#### Docker check ps
```bash
docker exec lcg-ollama ps aux
```
#### Podman check ps
```bash
podman exec lcg-ollama ps aux
```
## 🔒 Безопасность
### Рекомендации для продакшена
1. **Используйте аутентификацию**:
```bash
-e LCG_SERVER_REQUIRE_AUTH=true
-e LCG_SERVER_PASSWORD=strong_password
```
2. **Ограничьте доступ к портам**:
- Используйте firewall правила
- Не экспортируйте порты на публичный интерфейс
3. **Используйте HTTPS**:
- Настройте reverse proxy (nginx, traefik)
- Используйте SSL сертификаты
4. **Ограничьте ресурсы**:
```bash
docker run -d \
--name lcg-ollama \
--memory="4g" \
--cpus="2" \
lcg-ollama:latest
```
## 📊 Мониторинг
### Healthcheck
Контейнер включает healthcheck, который проверяет доступность LCG сервера:
```bash
docker inspect lcg-ollama | jq '.[0].State.Health'
```
### Метрики
LCG предоставляет Prometheus метрики на `/metrics` endpoint (если включено).
## 🚀 Production Deployment
### С docker-compose
```bash
cd Dockerfiles/OllamaServer
docker-compose up -d
```
### С Kubernetes
Используйте манифесты из папки `deploy/` или `kustomize/`.
## 📝 Примечания
- Ollama версия: 0.9.5
- LCG версия: см. VERSION.txt
- Минимальные требования: 2GB RAM, 2 CPU cores
- Рекомендуется: 4GB+ RAM для больших моделей
## 🔗 Полезные ссылки
- [Ollama документация](https://github.com/ollama/ollama)
- [LCG документация](../../docs/README.md)
- [LCG API Guide](../../docs/API_GUIDE.md)
## ❓ Поддержка
При возникновении проблем:
1. Проверьте логи: `docker logs lcg-ollama`
2. Проверьте переменные окружения
3. Убедитесь, что порты не заняты
4. Проверьте, что модели загружены в Ollama