- Добавлена конфигурация через poetry (pyproject.toml + poetry.lock) - Переделана система конфигурации Django с .env переменными - Добавлен файл .env для локальной разработки (SQLite БД) - Обновлен settings.py для работы с переменными окружения - Создана документация по локальной разработке (DEVELOPMENT.md) - Подготовлена инфраструктура для Docker (Dockerfile, docker-compose.yml) - Обновлен .gitignore для Python/Django проекта Проект работает локально с миграциями и админ пользователем (admin/1234).
236 lines
6.8 KiB
Markdown
236 lines
6.8 KiB
Markdown
# Подготовка проекта к контейнеризации
|
||
|
||
## Описание
|
||
|
||
Этот документ описывает процесс подготовки проекта 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
|
||
- [ ] Настроить автоматическое резервное копирование БД
|
||
|
||
## Контакты и вопросы
|
||
|
||
Если возникнут вопросы или проблемы, проверь логи контейнера.
|
||
|