На этой странице представлю начальные шаги для создания нового python проекта.

h1. Что требуется от вас?

Прежде всего согласовать с Михаил Семеновичем проект, что он будет делать и способы взаимодействия (какие страницы или какие команды, по какому адресу будут доступны, что надо открыть/запустить) с проектом.

Требуется установка следующих программ:
* Python
* IDE для Python
* Docker
* Git
* Space
* основы HTTP

h2. Python

Python подойдет любой версии, которую поддерживают библиотеки и фреймворки проекта.
[Здесь|https://www.python.org/] можно посмотреть все доступные версии.

h2. IDE

IDE для Python - я советую [VS Code|https://code.visualstudio.com/] или [PyCharm|https://www.jetbrains.com/pycharm/] (последний может быть доступен по студенческой лицензии).
Подойдет любая другая удобная вам IDE на которой можно запускать Python код.

h2. Docker

[Docker|https://www.docker.com/]  необходим для запуска проекта на серверах.

При подготовке проекта к развертыванию на серверах требуется написать Dockerfile для своего проекта, проверить этот файл (корректное создание контейнера) и поместить этот файл в репозитории.

Docker позволяет создавать и запускать проекты, написанные не только на Python, но и на любых других языках программирования. Главное, возможность поместить этот проект в linux контейнер.

Для понимания Docker можно посмотреть [видео|https://www.youtube.com/watch?v=QF4ZF857m44] , почитать [доку(англ)|https://www.docker.com/get-started/],  [доку(англ)|https://www.docker.com/blog/how-to-dockerize-your-python-applications/], [статья(англ)|https://developers.redhat.com/articles/2023/03/23/10-tips-writing-secure-maintainable-dockerfiles].

h2. Git и Space

Git - технология версионирования кода.

Space - платформа от Jetbrains, совмещающая в себе несколько инструментов для командной разработки, включая Git репозиторий.

Про git можно почитать [тут|https://git-scm.com/book/ru].

Про Space можно почитать [тут(англ)|https://www.jetbrains.com/space/]. Вкратце, для dl.gsu.by это одно место со всеми исходными кодами всех проектов.

Space можно установить, а можно пользоваться [веб версией|https://dl-gsu-by.jetbrains.space/].

h2. HTTP

Про HTTP можно почитать [тут|https://habr.com/ru/articles/215117/].

h1. Стадии развития проекта

Для начала требуется попросить завести вам репозиторий для вашего проекта.

После этого начинаем кодить. После того, как вы протестировали проект и сделали из него то, что планировали, вы можете его опубликовать на серверах dl. Для этого требуется:
* залить все файлы в свой репозиторий на Space (лучше сразу, после того, как внесли изменение в любой файл документировать в коммите это изменение)
* создать Dockerfile (если вы этого еще не сделали) и протестировать корректность создания контейнера
* написать Михаилу Семеновичу письмо о готовности опубликовать проект

h1. Особенности, или инструкция как сэкономить время себе и другим

В этом разделе собраны и будут собираться все особенности публикации проекта.

h2. Обработка URL ведется начиная с префикса названия вашего проекта

Покажу на примере:

Допустим ваш проект называется *newproject*.

Если вы хотите добавить какой-то функционал по адресу */user/profile/1*, то перед публикацией на dl этот URL должен быть преобразован в */newproject/user/profile/1*.

Все пути запросов, отправляемые в ваш проект (контейнер) будут начинаться с */newproject*. Благодаря этому осуществляется перенаправление запросов в нужные контейнеры.

Из URL в запросе */newproject* не убирается.

Пути решения:

Можно завести в файле конфиге проекта поле с префиксом для всех URL, а в обработчиках добавлять к URL этот префикс. Так же, если фреймворк позволяет, указать в приложении явно глобальный префикс для всех URL.

h2. Proxy

{quote}
Вся коммуникация с внешним миром идёт через https-прокси, поэтому в приложении обязательно уметь и использовать прокси (обязательно с поддержкой http basic auth), который будет передан контейнеру через переменные окружения HTTP_PROXY и HTTPS_PROXY. По-умолчанию имеет слелующий формат HTTPS_PROXY=%username:%password@%proxy_host:$proxy_port. В ETR передано именно в этом формате и работает.

Если есть команды в RUN (имеется ввиду в Dockerfile), утилита так же должна уметь работать с http proxy. Опять же, наличие вышеуказанных переменных вполне достаточно, 90% приложений под linux понимают именно этот формат и его стараются унифицировать, хотя бывают исключения. В основном это приложения на java и пакетные менеджеры (напр apt, yum).
{quote}