{"id":15576353,"url":"https://github.com/alvassin/backendschool2019","last_synced_at":"2025-07-20T20:32:44.214Z","repository":{"id":37535356,"uuid":"259852433","full_name":"alvassin/backendschool2019","owner":"alvassin","description":"Приложение для практического руководства по разработке бекенд-сервисов на Python (на основе вступительного испытания в Школу бэкенд‑разработки Яндекса)","archived":false,"fork":false,"pushed_at":"2022-08-02T21:33:12.000Z","size":121,"stargazers_count":268,"open_issues_count":0,"forks_count":59,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-20T07:04:44.918Z","etag":null,"topics":["aiohttp","alembic","asyncio","asyncpg","python","python3","sqlalchemy","yandex"],"latest_commit_sha":null,"homepage":"https://yandex.ru/promo/academy/backend-school/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alvassin.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-29T07:14:04.000Z","updated_at":"2025-05-06T21:33:49.000Z","dependencies_parsed_at":"2022-08-08T20:31:01.112Z","dependency_job_id":null,"html_url":"https://github.com/alvassin/backendschool2019","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alvassin/backendschool2019","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvassin%2Fbackendschool2019","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvassin%2Fbackendschool2019/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvassin%2Fbackendschool2019/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvassin%2Fbackendschool2019/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alvassin","download_url":"https://codeload.github.com/alvassin/backendschool2019/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alvassin%2Fbackendschool2019/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266193996,"owners_count":23890905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiohttp","alembic","asyncio","asyncpg","python","python3","sqlalchemy","yandex"],"created_at":"2024-10-02T18:47:22.644Z","updated_at":"2025-07-20T20:32:44.198Z","avatar_url":"https://github.com/alvassin.png","language":"Python","readme":".. role:: shell(code)\n   :language: shell\n\nПриложение для `практического руководства`_ по разработке бэкенд-сервисов на Python (на основе `вступительного испытания`_ в `Школу бэкенд-разработки Яндекса`_ в 2019 году).\n\n.. _практического руководства: https://habr.com/ru/company/yandex/blog/499534/\n.. _вступительного испытания: https://disk.yandex.ru/i/dA9umaGbQdMNLw\n.. _Школу бэкенд-разработки Яндекса: https://yandex.ru/promo/academy/backend-school/\n\n.. image:: https://github.com/alvassin/backendschool2019/workflows/CI/badge.svg?branch=master\u0026event=push\n    :target: https://github.com/alvassin/backendschool2019/actions?query=workflow%3ACI\n\nЧто внутри?\n===========\nПриложение упаковано в Docker-контейнер и разворачивается с помощью Ansible.\n\nВнутри Docker-контейнера доступны две команды: :shell:`analyzer-db` — утилита\nдля управления состоянием базы данных и :shell:`analyzer-api` — утилита для \nзапуска REST API сервиса.\n\nКак использовать?\n=================\nКак применить миграции:\n\n.. code-block:: shell\n\n    docker run -it \\\n        -e ANALYZER_PG_URL=postgresql://user:hackme@localhost/analyzer \\\n        alvassin/backendschool2019 analyzer-db upgrade head\n\nКак запустить REST API сервис локально на порту 8081:\n\n.. code-block:: shell\n\n    docker run -it -p 8081:8081 \\\n        -e ANALYZER_PG_URL=postgresql://user:hackme@localhost/analyzer \\\n        alvassin/backendschool2019\n\nВсе доступные опции запуска любой команды можно получить с помощью\nаргумента :shell:`--help`:\n\n.. code-block:: shell\n\n    docker run alvassin/backendschool2019 analyzer-db --help\n    docker run alvassin/backendschool2019 analyzer-api --help\n\nОпции для запуска можно указывать как аргументами командной строки, так и\nпеременными окружения с префиксом :shell:`ANALYZER` (например: вместо аргумента\n:shell:`--pg-url` можно воспользоваться :shell:`ANALYZER_PG_URL`).\n\nКак развернуть?\n---------------\nЧтобы развернуть и запустить сервис на серверах, добавьте список серверов в файл\ndeploy/hosts.ini (с установленной Ubuntu) и выполните команды:\n\n.. code-block:: shell\n\n    cd deploy\n    ansible-playbook -i hosts.ini --user=root deploy.yml\n\nРазработка\n==========\n\nБыстрые команды\n---------------\n* :shell:`make` Отобразить список доступных команд\n* :shell:`make devenv` Создать и настроить виртуальное окружение для разработки\n* :shell:`make postgres` Поднять Docker-контейнер с PostgreSQL\n* :shell:`make lint` Проверить синтаксис и стиль кода с помощью `pylama`_\n* :shell:`make clean` Удалить файлы, созданные модулем `distutils`_\n* :shell:`make test` Запустить тесты\n* :shell:`make sdist` Создать `source distribution`_\n* :shell:`make docker` Собрать Docker-образ\n* :shell:`make upload` Загрузить Docker-образ на hub.docker.com\n\n.. _pylama: https://github.com/klen/pylama\n.. _distutils: https://docs.python.org/3/library/distutils.html\n.. _source distribution: https://packaging.python.org/glossary/\n\nКак подготовить окружение для разработки?\n-----------------------------------------\n.. code-block:: shell\n\n    make devenv\n    make postgres\n    source env/bin/activate\n    analyzer-db upgrade head\n    analyzer-api\n\nПосле запуска команд приложение начнет слушать запросы на 0.0.0.0:8081.\nДля отладки в PyCharm необходимо запустить :shell:`env/bin/analyzer-api`.\n\nКак запустить тесты локально?\n-----------------------------\n.. code-block:: shell\n\n    make devenv\n    make postgres\n    source env/bin/activate\n    pytest\n\nДля отладки в PyCharm необходимо запустить :shell:`env/bin/pytest`.\n\nКак запустить нагрузочное тестирование?\n---------------------------------------\nДля запуска `locust`_ необходимо выполнить следующие команды:\n\n.. code-block:: shell\n\n    make devenv\n    source env/bin/activate\n    locust\n\nПосле этого станет доступен веб-интерфейс по адресу http://localhost:8089\n\n.. _locust: https://locust.io\n\nСсылки\n======\n* `Трансляция с ответами`_ на наиболее частые вопросы по тестовым заданиям и Школе.\n\n.. _Трансляция с ответами: https://www.youtube.com/watch?v=Bf0liGAahao\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falvassin%2Fbackendschool2019","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falvassin%2Fbackendschool2019","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falvassin%2Fbackendschool2019/lists"}