# Подготовка проекта к контейнеризации ## Описание Этот документ описывает процесс подготовки проекта 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 - [ ] Настроить автоматическое резервное копирование БД ## Контакты и вопросы Если возникнут вопросы или проблемы, проверь логи контейнера.