# Подготовка проекта к контейнеризации

## Описание

Этот документ описывает процесс подготовки проекта Django `rosmorport_tsts` к развертыванию в Docker контейнерах.

## Подготовка окружения

### Предварительные требования

- **Python** 3.12 или выше
- **Poetry** 1.7 или выше (для управления зависимостями)
- **Docker** и **Docker Compose** (для контейнеризации)

### Установка Poetry

Если Poetry еще не установлена:

```bash
curl -sSL https://install.python-poetry.org | python3 -
export PATH="$HOME/.local/bin:$PATH"
poetry --version
```

### Установка зависимостей локально

```bash
# Перейди в директорию проекта
cd /Users/e-serg/PRJ/2024-test-rosmorport

# Установи зависимости через poetry
poetry install

# Активируй виртуальное окружение
poetry shell
```

## Локальная разработка

### С использованием poetry (рекомендуется для разработки)

```bash
# Установи зависимости
poetry install

# Активируй окружение
poetry shell

# Выполни миграции
cd rosmorport_tsts
python manage.py migrate

# Собери статические файлы
python manage.py collectstatic

# Запусти development сервер
python manage.py runserver 0.0.0.0:8000

# Откройся в браузере: http://localhost:8000
```

### С использованием Docker Compose (для тестирования контейнера)

```bash
# Убедись, что Docker и Docker Compose установлены
docker --version
docker-compose --version

# Запусти контейнер в режиме разработки
docker-compose up -d

# Проверь логи
docker-compose logs -f web

#停止контейнер
docker-compose down
```

**Docker Compose автоматически:**
- Установит зависимости
- Выполнит миграции БД
- Соберет статические файлы
- Запустит Django dev сервер на порту 8000

## Развертывание на Production

### Подготовка переменных окружения

1. Скопируй `.env.example` в `.env.prod`:
   ```bash
   cp .env.example .env.prod
   ```

2. Отредактируй `.env.prod` с production значениями:
   ```env
   DEBUG=False
   ALLOWED_HOSTS=your-domain.com
   SECRET_KEY=your-super-secret-key
   DB_HOST=db
   DB_NAME=rosmorport_db
   DB_USER=postgres
   DB_PASSWORD=your-secure-password
   ```

### Запуск на production

```bash
# Запусти Docker Compose с production конфигурацией
docker-compose -f docker-compose.prod.yml up -d

# Проверь статус
docker-compose -f docker-compose.prod.yml ps

# Просмотри логи
docker-compose -f docker-compose.prod.yml logs -f web
```

## Структура файлов

```
.
├── Dockerfile                 # Конфигурация Docker образа
├── docker-compose.yml         # Конфигурация для разработки
├── docker-compose.prod.yml    # Конфигурация для production
├── .dockerignore             # Файлы, игнорируемые при сборке образа
├── pyproject.toml            # Конфигурация Poetry
├── poetry.lock               # Заблокированные версии зависимостей
├── .env.example              # Шаблон переменных окружения
└── rosmorport_tsts/          # Django проект
    ├── manage.py
    ├── rosmorport_tsts/
    │   ├── settings.py
    │   ├── wsgi.py
    │   └── ...
    └── ...
```

## Команды для управления контейнерами

### Development (docker-compose.yml)

```bash
# Запуск
docker-compose up -d

# Остановка
docker-compose down

# Просмотр логов
docker-compose logs -f web

# Выполнение команд в контейнере
docker-compose exec web python manage.py createsuperuser
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py shell

# Пересборка образа
docker-compose up --build
```

### Production (docker-compose.prod.yml)

```bash
# Запуск
docker-compose -f docker-compose.prod.yml up -d

# Остановка
docker-compose -f docker-compose.prod.yml down

# Просмотр логов
docker-compose -f docker-compose.prod.yml logs -f web

# Создание superuser в production
docker-compose -f docker-compose.prod.yml exec web python manage.py createsuperuser

# Выполнение миграций
docker-compose -f docker-compose.prod.yml exec web python manage.py migrate
```

## Проверка после развертывания

1. **Проверь доступность приложения:**
   ```bash
   curl http://localhost:8000
   ```

2. **Проверь статус admin панели:**
   - Development: http://localhost:8000/admin
   - Логин: admin / Пароль: 1234 (если пользователь существует)

3. **Проверь статические файлы:**
   - http://localhost:8000/static/css/rosmorport.css

4. **Проверь логи на ошибки:**
   ```bash
   docker-compose logs web | grep -i error
   ```

## Troubleshooting

### Проблема: Порт 8000 уже занят

**Решение:** Измени порт в docker-compose.yml:
```yaml
ports:
  - "8080:8000"  # Используй 8080 вместо 8000
```

### Проблема: Ошибка при выполнении миграций

**Решение:** Проверь БД и выполни миграции вручную:
```bash
docker-compose exec web python manage.py migrate
```

### Проблема: Статические файлы не загружаются

**Решение:** Пересобери статические файлы:
```bash
docker-compose exec web python manage.py collectstatic --noinput
```

## Дальнейшие улучшения

- [ ] Добавить Nginx для reverse proxy в production
- [ ] Настроить HTTPS/SSL
- [ ] Добавить PostgreSQL вместо SQLite для production
- [ ] Настроить логирование (ELK, Sentry)
- [ ] Добавить health checks
- [ ] Настроить автоматическое резервное копирование БД

## Контакты и вопросы

Если возникнут вопросы или проблемы, проверь логи контейнера.

