diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9bbf57a..8d81fbc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,4 @@ -name: Bookinn-app workflow +name: Bookinn workflow on: [push] @@ -13,7 +13,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.11 - name: Install dependencies run: | diff --git a/README.md b/README.md index 399cc9c..7d408e5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,143 @@ -# bookinn + + +## BookInn + +API сервис для бронирования номеров [![BookInn workflow](https://github.com/dmsnback/bookinn/actions/workflows/main.yml/badge.svg)](https://github.com/dmsnback/bookinn/actions/workflows/main.yml) -Сервис бронирования номеров в отеле + +- [Описание](#Описание) +- [Технологии](#Технологии) +- [Основные ресурсы](#Ресурсы) +- [Шаблон заполнения .env-файла](#Шаблон) +- [Запуск проекта на локальной машине](#Запуск) +- [Автор](#Автор) + + + +### Описание + +Сервис — REST API для бронирования номеров в отеле. +Реализован на Django + Django REST Framework, используется Djoser для аутентификации (JWT), drf-spectacular для документации. + +```python +Проект адаптирован для использования PostgreSQL и развёртывания в контейнерах Docker. +``` + +> [Вернуться в начало](#Начало) + + +### Технологии + +[![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)](https://www.python.org) +![Django](https://img.shields.io/badge/django-%23092E20.svg?style=for-the-badge&logo=django&logoColor=white) +[![DjangoREST](https://img.shields.io/badge/DJANGO-REST-ff1709?style=for-the-badge&logo=django&logoColor=white&color=ff1709&labelColor=gray)](https://www.django-rest-framework.org) +[![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)](https://www.docker.com) +[![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org) +[![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/features/actions) +[![Nginx](https://img.shields.io/badge/nginx-%23009639.svg?style=for-the-badge&logo=nginx&logoColor=white)](https://nginx.org/ru/) +[![Gunicorn](https://img.shields.io/badge/gunicorn-%298729.svg?style=for-the-badge&logo=gunicorn&logoColor=white)](https://gunicorn.org) + +> [Вернуться в начало](#Начало) + + + +### Основные ресурсы + +- `/api/v1/rooms/` — CRUD и список номеров +- `/api/v1/room_type/` — типы номеров +- `/api/v1/bookings/` — бронирования (создание/обновление/просмотр) +- `/api/v1/room_images/` — загрузка фото номера +- `/api/v1/auth/` — djoser (регистрация, логин, токены) + +> [Вернуться в начало](#Начало) + + + +### Шаблон заполнения .env-файла, расположен по пути infra/.env + +> в settings.py указаны дефолтные значения для переменных из env-файла + +```python +SECRET_KEY = 'Ваш секретный ключ' + +DB_ENGINE=django.db.backends.postgresql # указываем, что работаем с postgresql +DB_NAME=postgres # имя базы данных +POSTGRES_USER=postgres # логин для подключения к базе данных +POSTGRES_PASSWORD=postgres # пароль для подключения к БД +DB_HOST=db # название сервиса (контейнера) +DB_PORT=5432 # порт для подключения к БД +``` + +> [Вернуться в начало](#Начало) + + + +### Запуск проекта на локальной машине + +- Склонируйте репозиторий + +```python +git clone git@github.com:dmsnback/bookinn.git +``` + +- Переходим в папку с файлом ```docker-compose.yaml``` + +```python +cd infra +``` + +- Запускаем Docker контейнеры + +```python +docker-compose up -d --build +``` + +- Выполняем миграции + +```python +docker-compose exec backend python manage.py migrate +``` + +- Создаём суперюзера + +```python +docker-compose exec backend python manage.py createsuperuser +``` + +- Собираем статику + +```python +docker-compose exec backend python manage.py collectstatic --no-input +``` + +- Наполняем базу данных содержимым из файла ```rooms_fixture.json```: + +> В базу добавится 10 номеров. + +```python +docker-compose exec backend python manage.py loaddata data/rooms_fixture.json +``` + +> __Проект станет доступен по адресу:__ + +[http://localhost/api/v1/](http://localhost/api/v1/) + +> __Админка станет доступна по адресу:__ + +[http://localhost/admin/](http://localhost/admin/) + +> __Документация к API будет доступна по адресу:__ + +[http://localhost/api/docs/](http://localhost/api/docs/) + +> [Вернуться в начало](#Начало) + + + +### Автор + +- [Титенков Дмитрий](https://github.com/dmsnback) + +> [Вернуться в начало](#Начало) diff --git a/backend/bookinn/settings.py b/backend/bookinn/settings.py index be6f1dd..429a55e 100644 --- a/backend/bookinn/settings.py +++ b/backend/bookinn/settings.py @@ -66,8 +66,8 @@ ALLOWED_HOSTS = ["*"] CSRF_TRUSTED_ORIGINS = [ - "http://localhost:8000", - "http://127.0.0.1:8000", + "http://localhost", + "http://127.0.0.1", ] INSTALLED_APPS = [ diff --git a/backend/wait-for-it.sh b/backend/wait-for-it.sh index d990e0d..237610a 100755 --- a/backend/wait-for-it.sh +++ b/backend/wait-for-it.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -# Use this script to test if a given TCP host/port are available +# Скрипт ждёт, пока база на станет доступна, а потом запускает Django. WAITFORIT_cmdname=${0##*/} diff --git a/infra/.env.example b/infra/.env.example new file mode 100644 index 0000000..f455fd1 --- /dev/null +++ b/infra/.env.example @@ -0,0 +1,8 @@ +SECRET_KEY = 'SuperSecrettKey' + +DB_ENGINE=django.db.backends.postgresql +DB_NAME=postgres +POSTGRES_USER=postgres +POSTGRES_PASSWORD=postgres +DB_HOST=db +DB_PORT=5432 \ No newline at end of file diff --git a/infra/docker-compose.yaml b/infra/docker-compose.yaml index 438c3a2..219f507 100644 --- a/infra/docker-compose.yaml +++ b/infra/docker-compose.yaml @@ -24,7 +24,7 @@ services: nginx: image: nginx:stable-alpine ports: - - "8000:80" + - "80:80" volumes: - static_value:/app/static/ - media_value:/app/media/