An open API service indexing awesome lists of open source software.

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

Шаблон инфраструктуры с базовыми приложениями

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
```