# 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 ```