https://github.com/hixwizard/dev_template
Шаблон инфраструктуры с базовыми приложениями
https://github.com/hixwizard/dev_template
django-rest-framework docker nginx postgresql react
Last synced: 2 months ago
JSON representation
Шаблон инфраструктуры с базовыми приложениями
- Host: GitHub
- URL: https://github.com/hixwizard/dev_template
- Owner: hixwizard
- Created: 2026-04-01T11:24:22.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2026-04-14T16:41:21.000Z (2 months ago)
- Last Synced: 2026-04-14T18:25:55.834Z (2 months ago)
- Topics: django-rest-framework, docker, nginx, postgresql, react
- Language: Python
- Homepage:
- Size: 8.79 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
###### Название проекта
Монорепозиторий с Frontend (React) и Backend (Django) частями.
---
###### Структура
- `frontend/` - клиентская часть приложения (React)
- `backend/` - серверная часть приложения (Django)
- `shared/` - общие файлы и типы данных
- `infra/` - инфраструктура и конфигурация Docker
---
###### Запуск
Все команды Docker выполняются из директории `infra/`.
Переменные окружения берутся из файла `.env`, который должен находиться **в директории `infra/`** для работы Docker Compose.
Для локальной разработки с Django (без Docker) файл `.env` должен также находиться **в корне проекта**, чтобы `load_dotenv()` в `settings.py` мог загрузить переменные.
Рекомендуемый workflow:
1. Создать `.env` в `infra/` (скопировать из `.env.example`).
2. Скопировать или создать симлинк `.env` в корень проекта для локальной разработки.
3. В зависимости от режима работы установить `DB_MODE=local` (для локальной БД) или `DB_MODE=network` (для полного стека).
Подробнее о переключении режимов БД см. раздел «Переключение между локальной и сетевой базой данных».
---
###### Подготовка окружения
1. Перейдите в директорию инфраструктуры:
```bash
cd infra
```
2. Скопируйте файл с примером переменных окружения и настройте его:
```bash
cp .env.example .env
```
3. Отредактируйте файл `.env` при необходимости:
```bash
nano .env # или используйте любой текстовый редактор
```
4. Скопируйте (или создайте симлинк) файл `.env` в корень проекта для локальной разработки с Django:
```bash
cp .env ../.env
```
*Примечание:* Если вы планируете работать только с полным Docker-стеком, этот шаг можно пропустить.
---
###### Запуск полного стека (Frontend, Backend, Nginx, PostgreSQL)
Из директории `infra/` выполните:
```bash
docker compose up --build
```
Для запуска в фоновом режиме:
```bash
docker compose up -d --build
```
---
###### Запуск только базы данных для разработки
Если вы хотите работать с локальным Django-приложением, но использовать контейнеризованную базу данных:
1. Убедитесь, что вы находитесь в директории `infra/`:
```bash
cd infra
```
2. Запустите только базу данных:
```bash
docker-compose -f docker-compose.db.yaml up -d
```
3. Проверьте статус контейнера:
```bash
docker-compose -f docker-compose.db.yaml ps
```
4. Настройте Django для подключения к базе данных:
- Убедитесь, что в `backend/config/settings.py` используются переменные окружения из `.env`
- Выполните миграции:
```bash
cd ../backend
python manage.py migrate
```
5. Остановка базы данных:
```bash
cd ../infra
docker-compose -f docker-compose.db.yaml down
```
> Примечание: Для работы с базой данных убедитесь, что порт 5432 свободен.
---
###### Переключение между локальной и сетевой базой данных
Проект поддерживает два режима подключения к базе данных через единые переменные окружения:
- **Локальная БД** (`DB_MODE=local`) – подключение к PostgreSQL, запущенной в контейнере на localhost (порт 5432). Используется для разработки с локальным Django‑приложением.
- **Сетевая БД** (`DB_MODE=network`) – подключение к контейнеру `db` внутри Docker‑сети. Используется при работе полного стека (frontend + backend + nginx).
**Как это работает**
В файле `backend/config/settings.py` автоматически выбирается хост БД в зависимости от переменной `DB_MODE`:
- Если `DB_MODE=local`, используется `DB_HOST_LOCAL` (по умолчанию `127.0.0.1`)
- Если `DB_MODE=network` (или переменная отсутствует), используется `DB_HOST` (по умолчанию `db`)
**Пошаговая инструкция**
1. **Локальная разработка с контейнеризованной БД**
- Убедитесь, что файл `.env` находится **в корне проекта** (это нужно для работы `load_dotenv()` в Django).
- Установите в `.env`:
```
DB_MODE=local
DB_HOST_LOCAL=127.0.0.1 # или localhost, если PostgreSQL слушает на сокете
```
- Запустите только базу данных (см. раздел «Запуск только базы данных для разработки»).
- Запустите Django‑приложение локально:
```bash
cd backend
python manage.py migrate
python manage.py runserver
```
2. **Запуск полного стека (Docker‑сеть)**
- Убедитесь, что файл `.env` также скопирован в директорию `infra/` (или создайте симлинк).
- Установите в `.env`:
```
DB_MODE=network
```
- Перейдите в `infra/` и запустите весь стек:
```bash
cd infra
docker compose up --build
```
**Важно**
- Для локальной разработки `.env` должен находиться в корне проекта, иначе Django не загрузит переменные.
- Для работы полного стека `.env` должен быть также в `infra/`, потому что Docker Compose читает переменные из файла относительно своей директории.
- Все остальные переменные (POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD, DB_PORT и т.д.) используются в обоих режимах без изменений.
---
###### Остановка всех сервисов
Из директории `infra/`:
```bash
docker-compose down
```
###### Просмотр логов
Для просмотра логов всех сервисов:
```bash
docker-compose logs -f
```
Для конкретного сервиса:
```bash
docker-compose logs -f frontend
docker-compose logs -f backend
docker-compose logs -f db
docker-compose logs -f nginx
```
---
###### Локальная разработка без Docker
###### Frontend
```bash
cd frontend
npm install
npm start
```
###### Backend
```bash
cd backend
# Установка зависимостей через uv
> Справка: https://habr.com/ru/articles/875840
```
```bash
pip install uv
uv pip install -r requirements.txt
# Или если uv уже установлен:
# uv pip install -r requirements.txt
python manage.py migrate
python manage.py runserver
```