190 lines
5.3 KiB
Markdown
190 lines
5.3 KiB
Markdown
# 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
|
||
```
|