Files
ChatBot/DOCKER_README.md
Leonid Pershin 0e5c418a0e
All checks were successful
SonarQube / Build and analyze (push) Successful in 2m57s
fixes
2025-10-22 03:28:48 +03:00

190 lines
5.3 KiB
Markdown
Raw 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.
# Docker Deployment Guide
## Структура файлов
```
ChatBot/
├── ChatBot/
│ ├── Dockerfile # Dockerfile для сборки приложения
│ └── .dockerignore # Исключения для Docker build
├── docker-compose.yml # Композиция для локального запуска
├── .env.example # Пример переменных окружения
└── .gitea/workflows/
└── deploy.yml # CI/CD pipeline для автоматического развертывания
```
## Локальный запуск с Docker Compose
### 1. Подготовка
Скопируйте `.env.example` в `.env` и заполните необходимые значения:
```bash
cp .env.example .env
```
Отредактируйте `.env`:
```env
TELEGRAM_BOT_TOKEN=your_actual_bot_token
OLLAMA_URL=https://your-ollama-instance/
OLLAMA_DEFAULT_MODEL=gemma3:4b
```
### 2. Запуск
```bash
# Запуск всех сервисов (PostgreSQL + ChatBot)
docker-compose up -d
# Просмотр логов
docker-compose logs -f chatbot
# Остановка
docker-compose down
# Остановка с удалением volumes
docker-compose down -v
```
### 3. Проверка статуса
```bash
# Статус контейнеров
docker-compose ps
# Логи приложения
docker-compose logs chatbot
# Логи базы данных
docker-compose logs postgres
```
## Ручная сборка и запуск
### Сборка образа
```bash
cd ChatBot
docker build -t chatbot:latest .
```
### Запуск контейнера
```bash
docker run -d \
--name chatbot-app \
-e DB_HOST=your_db_host \
-e DB_PORT=5432 \
-e DB_NAME=chatbot \
-e DB_USER=postgres \
-e DB_PASSWORD=your_password \
-e TELEGRAM_BOT_TOKEN=your_token \
-e OLLAMA_URL=https://your-ollama/ \
-e OLLAMA_DEFAULT_MODEL=gemma3:4b \
chatbot:latest
```
## CI/CD Pipeline
### Настройка секретов в Gitea
Для работы CI/CD pipeline необходимо настроить следующие секреты в Gitea (Settings → Secrets):
| Секрет | Описание | Пример |
|--------|----------|--------|
| `CHATBOT_DB_HOST` | Хост базы данных | `postgres` или `your-db-host` |
| `CHATBOT_DB_PORT` | Порт базы данных | `5432` |
| `CHATBOT_DB_NAME` | Имя базы данных | `chatbot` |
| `CHATBOT_DB_USER` | Пользователь БД | `postgres` |
| `CHATBOT_DB_PASSWORD` | Пароль БД | `your_secure_password` |
| `CHATBOT_TELEGRAM_BOT_TOKEN` | Токен Telegram бота | `123456:ABC-DEF...` |
| `CHATBOT_OLLAMA_URL` | URL Ollama API | `https://ai.api.home/` |
| `CHATBOT_OLLAMA_DEFAULT_MODEL` | Модель по умолчанию | `gemma3:4b` |
### Workflow триггеры
Pipeline запускается автоматически при:
- Push в ветки `master` или `develop`
- Создании Pull Request в ветку `master`
### Этапы pipeline
1. **Build Docker Image** - сборка Docker образа
2. **Stop existing container** - остановка существующего тестового контейнера
3. **Run test container** - запуск нового контейнера с секретами
4. **Health check** - проверка работоспособности приложения
5. **Cleanup** - очистка старых образов
### Мониторинг deployment
```bash
# Просмотр логов контейнера
docker logs chatbot-test -f
# Проверка статуса
docker ps | grep chatbot-test
# Health check
docker exec chatbot-test dotnet ChatBot.dll --health-check
```
## Troubleshooting
### Контейнер не запускается
```bash
# Проверьте логи
docker logs chatbot-app
# Проверьте переменные окружения
docker inspect chatbot-app | grep -A 20 Env
```
### Проблемы с подключением к БД
```bash
# Проверьте доступность PostgreSQL
docker exec chatbot-postgres pg_isready
# Проверьте сетевое подключение
docker network inspect chatbot-network
```
### Очистка
```bash
# Удалить все остановленные контейнеры
docker container prune
# Удалить неиспользуемые образы
docker image prune -a
# Удалить неиспользуемые volumes
docker volume prune
```
## Production Deployment
Для production рекомендуется:
1. Использовать Docker registry (например, GitHub Container Registry)
2. Настроить мониторинг (Prometheus + Grafana)
3. Использовать orchestration (Docker Swarm или Kubernetes)
4. Настроить backup базы данных
5. Использовать secrets management (Docker Secrets, Vault)
6. Настроить reverse proxy (Nginx, Traefik)
### Пример с Docker Swarm
```bash
# Инициализация swarm
docker swarm init
# Создание секретов
echo "your_token" | docker secret create telegram_token -
echo "your_password" | docker secret create db_password -
# Deploy stack
docker stack deploy -c docker-compose.yml chatbot
```