Проект создан с целью помощи людям в нахождении потерянных питомцев. Хозяин потерянной зверюшки может создать объявление на сайте, предоставив всю необходимую информацию о случившейся ситуации. Человек, который нашел на улице чужого питомца, может также сообщить об этом.
- Удобство: пользователю достаточно заполнить простую форму на сайте, чтобы сообщить о найденной или потерянной зверюшке.
- Функциональность: благодаря интеграции в проект
Яндекс карт
, пользователь может выбрать место, где был найден или потерян питомец. - Простота: пользователю не нужно заранее регистрироваться на сайте, он будет зарегистрирован в момент создания своего первого объявления.
- Возможности для коммуникации: в проекте создана система диалогов, которая позволяет пользователям переписываться в рамках объявлений.
- Приватность: пользователи могут настраивать видимость своих контактных данных (email, мобильный телефон), если они не хотят делиться телефоном или почтой - то останется возможность коммуникации прямо на сайте, через диалоги.
- Python 3.11+;
- Docker (19.03.0+) c docker compose;
- Poetry.
Директория | Описание |
---|---|
infra |
Docker-compose файл, конфиги Nginx |
.github/workflows |
CI/CD скрипты github actions |
src/pet_alert |
Django приложение |
src/pet_alert/ads |
Основное приложение Django |
src/pet_alert/api |
Django REST Framework API |
src/pet_alert/users |
Приложение для работы с пользователями |
src/pet_alert/core |
Контекст процессоры, фильтры шаблонов, общие сущности |
Нажмите, чтобы развернуть
- MVP проекта
- Возможность создавать объявления
- Просмотр объявлений списком и по карте
- Фильтрация объявлений по видам питомцев
- Система регистрации с подтверждением через почту
- Система скрытой регистрации при создании объявления для гостя
- Смена пароля, сброс пароля, авторизация, выход с аккаунта
- Система управления своими объявлениями для пользователя
- Настройка Docker, Docker-compose
- Настройка CI/CD через github actions
- Интеграция Yandex карт
- Интегрировать на сайт ReCaptcha
- Настройки пользователя через профиль (имя, приватность)
- Система диалогов
- Оптимизация проекта
- Оптимизация SQL-запросов
- Индексы БД
- Оптимизация Nginx
- Внедрить Celery с Redis
- Отправка почтовых писем в фоне
- Оптимизация PostgreSQL
- Оптимизация взаимодействия с Yandex картами
- Внедрение кэширования, Redis
- Внедрение Poetry
- Внедрение различных средств форматирования
- Black
- isort, flake8
- Pre-commit
- Система оповещения администраторов о новом объявлении через телеграм
- Скачивание объявления для распечатывания с QR-кодом
- API со всем функционалом из обычного сайта
- Создание объявлений
- Открытие/закрытие объявлений
- 100% покрытие тестами
- Приложение с шаблонами
- API
Локальная установка, запуск, тестирование (без Docker)
- Устанавливаем инструмент для работы с виртуальным окружением и сборки пакетов
poetry
, инструкция в официальной документации. - Клонируем репозиторий с проектом и переходим в его директорию:
git clone https://github.com/melax08/pet_alert.git && cd pet_alert
- Устанавливаем зависимости:
poetry install
- Копируем файл
.env.example
с новыми названием.env
и заполняем его необходимыми данными:
cp .env.example .env && nano .env
- Подготавливаем бэкенд к работе:
poetry run python3 src/pet_alert/manage.py migrate
Опционально. Создаем суперпользователя:
poetry run python3 src/pet_alert/manage.py createsuperuser
Переходим в каталог с проектом:
cd src/pet_alert
Запускаем проект:
poetry run python3 manage.py runserver
Локальный проект будет доступен по http://127.0.0.1:8000
Чтобы запустить unittest
тестирование работы функционала Django-приложений, выполним команду:
poetry run python3 manage.py test -v 2
Установка и запуск в Docker-контейнерах
Для автоматической установки проекта в контейнерах, на вашем сервере или локальном компьютере должны быть установлен Docker
(версии 19.03.0+) и Docker Compose
.
Установка проекта через Docker подразумевает под собой разворачивание полноценного проекта на боевой сервер, с существующим у сайта доменом и выпуском для него SSL-сертификата.
Перед началом установки, подготовьте сервер:
- Установите на него
Docker
иDocker Compose
по инструкции. - Подготовьте домен, направьте его на ваш сервер.
Когда предварительные меры будут приняты, можно будет приступить к установке проекта на сервер.
Предварительная настройка
- Клонируем репозиторий с проектом и переходим в его директорию:
git clone https://github.com/melax08/pet_alert.git && cd pet_alert
- Копируем файл
.env.example
с новыми названием.env
и заполняем его необходимыми данными:
cp .env.example .env && nano .env
- Переходим в каталог с инфраструктурой.
cd infra
Первая установка через Docker
При первом запуске проекта используем шаблон для Nginx
без ssl
секции (так как SSL-сертификат еще не выпущен и с полноценным конфигом Nginx не запустится).
Для этого используем команду:
docker compose --env-file first_run.env --env-file ../.env up -d
Как только проект будет запущен и SSL-сертификат будет выпущен с помощью certbot
, выключаем контейнер nginx:
docker compose stop
docker compose rm -sf nginx
И запускаем его повторно, выполняя пересборку контейнера:
docker compose --env-file ../.env up -d --build nginx
Nginx будет запущен заново, но уже с нормальным конфигом Nginx, включающим в себя ssl секцию и использующим SSL-сертификат, выпущенный ранее.
Настройка CRON-задания на перевыпуск SSL-сертификата
❗️ Данная инструкция подходит только для unix-подобных операционных систем.
Certbot выпускает Let's encrypt
SSL сертификаты, которые действуют 3 месяца. Каждые 3 месяца их необходимо перевыпускать.
Для этого, добавим на хост-машине (сервере, где вы разворачиваете проект) CRON-задание на автоматический перевыпуск SSL-сертификата:
crontab -e
Вставим в конец открывшегося редактора:
5 1 1 * * docker compose --env-file /home/petalert/pet_alert/.env --file /home/petalert/pet_alert/infra/docker-compose.yml up certbot && docker compose --file /home/petalert/pet_alert/infra/docker-compose.yml exec nginx nginx -s reload
Вместо /home/petalert
нужно в трех местах указать путь до каталога, где хранится клонированный проект.
Данная задача будет выполняться каждое первое число месяца в 1:05 и перевыпускать SSL-сертификат для сайта.
Создание суперпользователя
Если вы хотите создать суперпользователя Django
в запущенном проекте, используйте команду:
docker compose exec web python manage.py createsuperuser
Команду необходимо использовать в каталоге infra
.