fixes
All checks were successful
SonarQube / Build and analyze (push) Successful in 2m57s

This commit is contained in:
Leonid Pershin
2025-10-22 03:28:48 +03:00
parent 1996fec14f
commit 0e5c418a0e
8 changed files with 492 additions and 64 deletions

189
DOCKER_README.md Normal file
View File

@@ -0,0 +1,189 @@
# 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
```