8000 GitHub - skushnerchuk/kip
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

skushnerchuk/kip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status codecov

API сервиса курсов (Django Rest Framework)

Для запуска проекта на машине должен быть установлен docker

Для разработки требуется python версии не ниже 3.6

Быстрый запуск

Запуск основной части проекта

Основная часть проекта состоит из шести контейнеров:

  • kip_api - контейнер API
  • kip_db - контейнер СУБД MariaDB
  • kip_nginx - контейнер nginx
  • kip_fluentd - контейнер FluentD для сбора логов
  • kip_es - контейнер elasticsearch
  • kip_kibana - контейнер Kibana

Nginx был добавлен в проект в связи с тем, что сервис API запускается под GUnicorn, который неспособен отдавать статические файлы, что приводит к порче ссылок на компоненты административной панели Django (например, css-стили), из-за чего она выглядит непрезентабельно.

Для упрощения я не стал делать отдельный Dockerfile для сборки своего nginx с копированием конфигурации непосредственно в контейнер, а просто сделал соответствующий маппинг в docker-compose.yml

Для запуска проекта выполните в его папке команды:

sudo sysctl -w vm.max_map_count=262144
docker-compose up -d --build

Первая команда нужна для корретного старта контейнера ElasticSearch.

Посмотрите, какой адрес назначен сервису kip_nginx:

docker ps -q | xargs docker inspect --format "{{ .Id }} - {{ .Name }} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}"

Перейдите по адресу

http://nginx_ip/admin

Данные для авторизации по умолчанию:

email: admin@admin.com
пароль: admin

Сервис может ответить не сразу, так как он ожидает полной инициализации контейнера СУБД.

Контейнеры kip_fluentd, kip_kibana, kip_es были добавлены для того, чтобы можно было централизованно просматривать и анализировать логи работы приложений.

Для просмотра логов перейдите по адресу:

http://kibana_ip:5601/

Запуск общей шины данных и вспомогательных обработчиков

В качестве обшей шины данных используется кластер брокера сообщений RabbitMQ. В целях реализации задачи асинхронной отправки почты был написан отдельный процесс, который занимается исключительно отправкой сообщений электронной почты. Все клиенты, которым необходимо отправить письмо, помещают в шину данных сообщение в определенном формате и в определенную очередь.

Подробности запуска кластера описаны в документации на шину данных

Разработка

Для выполнения разработки можно поднять отдельно сервер MySQL командой:

docker run -d -p 3306:3306 --name mysqlserver --restart always -e MYSQL_ROOT_PASSWORD=12345 \
       -v ~/kip/mysql_data:/var/lib/mysql mariadb --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysqlserver

Полученный адрес указать в файле .env в переменной DB_HOST

По адресу http://nginx_ip/swagger/ доступно краткое описание API, которое будет детализироваться в процессе разработки

Для остановки и удаления всех контейнеров проекта выполните в его папке команду:

docker-compose down

Все данные сохранятся, если вы не удалите папку, которая монтируется в сервисе database в файле docker-compose.yml

Для управления тестовыми данными можно использовать команду:

$ python3 manage.py prepare_data

Для получения параметров команды выполните:

$ python3 manage.py prepare_data --help

Пример для добавления новых данных:

$ python3 manage.py prepare_data --fill --users 1 --categories 5 --courses 5 --groups 1 --lessons 10

Выполнение этой команды приведет к созданию 1 пользователя, 5 категорий, 5 курсов в каждой категории, 1 группе в каждом курсе и 10 уроков в каждой группе

Пример для удаления всех данных:

$ python3 manage.py prepare_data --clear

В настроящее время на приватном GitLab настроена и выполняется сборка образа и его отправка в Docker Hub. Демо проекта доступно по адресу:

Админка:

https://kip.sk-developer.ru/admin/

API:

https://kip.sk-developer.ru/api/v1/
Тестирование

Тестирование отдельных модулей

Тестирование выполняется в несколько этапов

Этап 1. Тестирование моделей

Тестирование моделей упрощено и сводится к проверке:

  • заполненности у моделей свойств verbose_name и verbose_name_plural
  • проверка соответствия имени модели заданному
  • проверке наличия необходимых полей
  • проверке установки свойства unique у полей (если необходимо)
  • проверке корректности работы функций в модели (чаще всего это str())

Этап 1. Тестирование API

Тестирование API в общем заключается в доступности endpoints, а также в проверке корректности ответов API. Также тестируются пользовательские функции в моделях.

Уровень покрытия тестами показывается в специальной метке вверху документа

Для определения уровня покрытия, а также обновление статистики сервиса codecov.io необходимо выполнить команды:

pytest --cov --cov-append
codecov --token=<codecov.io token>

Для оперативной реакции на возникающие ошибки добавлена интеграция с сервисом sentry.io

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0