Готовим окружение к разработке web-приложения на Python и Starlette

programming

Опубликован:
2024-11-26T23:53:41.356926Z
Отредактирован:
2024-11-26T23:53:41.356926Z
Статус:
публичный
32
0
0

Театр начинается с вешалки... Я не утверждаю, всего лишь воспроизвожу один из базовых стереотипов современного общества. А с чего начинается разработка web-приложения? Открываю небольшой цикл статей, посвященный разработке web-приложения на Python и Starlette в домашних условиях, и начинать буду с "вешалки". В этом обзоре я в беглом режиме расскажу, как подготовить окружение, с чего начать и какие программы предстоит установить. Мелкие детали имеют значение, поэтому начнём с мелких деталей.

Компьютер

Web-разработка — дисциплина компьютерная, и чтобы заниматься ей, необходим любой компьютер с большим экраном, современным процессором, достаточным запасом оперативной памяти и удобной клавиатурой. Особого значения не имеет, стационарный это компьютер или лэптоп, главное, чтобы оператору было приятно за ним находиться и работать продолжительное время. Выделенная видеокарта для web-разработки не обязательна, достаточно встроенного в процессор видео.

Поскольку в этом блоге мы говорим о web-разработке с точки зрения хобби и увлечения для досуга, на вакансию в Яндексе не претендуем, окружение я буду воспроизводить в домашних условиях. Главная цель — чтобы получилось недорого и необременительно в обслуживании и эксплуатации.

В моём распоряжении есть весьма бюджетный, довольно старенький лэптоп с очень слабым процессором и 8ГБ RAM. Именно на нём я буду разрабатывать и воспроизводить здесь код всех примеров. Конечно же, хотелось бы иметь процессор с большей производительностью, хотя бы начиная от Intel i3. Но если такого нет, обойдёмся AMD e1, при этом от частого прогона комплекта автоматизированных тестов придётся отказаться, процессор слишком медленный. Да и нужны ли автоматизированные тесты в домашних условиях — вопрос, предполагающий не очевидный ответ. Ручное тестирование в браузере со слабым процессором будет тоже весьма задумчивым, но вполне терпимым процессом.

Для чего нужен запас оперативной памяти? Вопрос хороший...

Во-первых, разработку я буду воспроизводить на обычном десктопе, а на современном десктопе с оперативной памятью меньше 8ГБ слишком тоскливо.

Во-вторых, для web-разработки мне потребуются базы данных, и работать я буду в отладочном режиме. Отсюда можно предположить на некоторых этапах разработки банальную утечку оперативной памяти до полной отладки разрабатываемого кода.

В-третьих, в процессе разработки я должен буду предусмотреть отработку развёртывания разрабатываемого кода на сервер, и в этих обстоятельствах мне не обойтись без виртуальной машины, которая в свою очередь требует запаса RAM.

В-четвёртых, для отладки и тестирования кода мне потребуется запускать несколько экземпляров web-браузеров в одном сеансе, а современные браузеры очень жадно поглощают вашу RAM, сколько бы не было — им будет мало...

Учитывая перечисленные аргументы, делаю вывод... Оперативной памяти не бывает много. Для более или менее комфортной работы желательно иметь от 8ГБ RAM.

Операционная система

На современных десктопах наиболее часто используются следующие операционные системы:

  • MS Windows;

  • Apple macOS;

  • Операционные системы с Linux на борту.

Приступая к web-разработке и выбирая операционную систему для рабочего десктопа, следует представлять весь цикл вероятного развития событий в перспективе. А перспектива после разработки и отладки web-приложения предполагает развёртывание полученного кода на сервер. И отправляясь на сервер, разработчику придётся выбирать операционную систему уже для сервера, устанавливать на него все программные компоненты, использованные в процессе разработки.

MS Windows и Apple macOS безусловно считаются хорошим выбором для десктопа. Но они требуют оплаты лицензии. И если на десктопе ещё как-то можно выкрутиться, установить демо-версию, или вообще забить на лицензию и довольствоваться пиратской копией, то на сервере этот фокус не пройдёт, ну или в потенциале может принести достаточно много проблем. А учитывая, что мы говорим о хобби, вашим первым сервером будет бюджетный VDS с минимальными аппаратными возможностями за ~100-200 рублей в месяц. На такой установить серверную MS Windows вряд ли получится, даже если у вас будет куплена лицензия.

Подводим итог, операционная система со свободной лицензией, не требующей оплаты, и имеющая версию и для десктопа, и для сервера, подойдёт как нельзя кстати. А значит, уделяя достаточное время web-разработке в домашних условиях, хочешь-не-хочешь, придётся погрузиться в мир Linux и OpenSource.

Какой Linux подойдёт

Операционных систем с Linux на борту известно достаточно много, о чём свидетельствует длинный список вероятных конкурсантов на distrowatch.com. А когда выбор широкий, соблазнов больше. И поскольку мы говорим о web-разработке в домашних условиях, остановиться нужно на вендоре, который предлагает и десктопный вариант, и серверный. Кроме этого, при выборе следует обратить внимание на срок поддержки операционной системы.

Каким бы длинным не был список вероятных конкурсантов на distrowatch.com, конечный выбор сводится всего лишь к двум приемлемым вариантам: deb-совместимая операционная система, или rpm-совместимая операционная система.

Американская корпорация RedHat очень плотно подсела на OpenSource с давних пор, когда старина Линус ещё только представил своего пингвина почтенной публике. Свободная лицензия GNU GPL вполне позволяет делать бизнес на свободном программном обеспечении с некоторыми оговорками. В арсенале этой корпорации, включая сонм разнообразных форков, есть продукты со свободной лицензией, не требующие оплаты. Операционные системы, базирующиеся на Redhat Package Manager, обычно называют rmp-совместимыми, и среди них есть варианты как для десктопа, так и для сервера.

Второй возможный соискатель — это deb-совместимые операционные системы, базирующиеся на пакетном менеджере dpkg. В этой линейке главными игроками являются собственно Debian, и его вездесущая тень — Ubuntu. Оба предлагают операционную систему как для десктопа, главным образом домашнего десктопа, так и для сервера.

В рамках этого цикла статей я буду поэтапно демонстрировать разработку web-приложения на базе операционной системы Debian. Воспроизвести процесс по образцу вполне возможно на Debian, начиная с trixie и текущего на данный момент sid. В конечном итоге, если я не потеряю интерес к этому перформансу, будет показан процесс развёртывания разработанного кода на сервер сети. А интерес я не потеряю, только если в блоге будет активность — просмотры, подписки, лайки, комментарии...

Набор программного обеспечения

Итак, я определился с выбором, на рабочем десктопе в процессе разработки этого web-приложения у меня установлен Debian sid, а на сервер сети впоследствии встанет Debian trixie, в этом случае я получаю значительный срок поддержки операционной системы на сервере, когда trixie перейдёт в стадию stable, на данный момент его стадия testing.

Установка и настройка Debian на десктоп заслуживает отдельного внимания, и её мы обсуждаем в соседнем блоге. Для домашнего десктопа подойдёт любой графический рабочий стол (GNOME, KDE, XFCE и так далее), в зависимости от аппаратных возможностей вашего компьютера. А вот набор программного обеспечения для web-разработки следует обсудить более детально...

Терминал

Разрабатывая web-приложение, мне очень часто придётся обращаться к текстовой консоли и работать в командной строке. В Debian любой версии, с любым графическим рабочим столом, всегда найдётся штатный графический терминал. Вариантов терминальных программ на официальном зеркале Debian довольно много, подойдёт любой. Разрабатывая код web-приложения в этом цикле статей, я всегда буду работать в терминале Sakura.

FXifRSAySX.png

Основное преимущество терминала — это возможность работать не снимая пальцы рук с основной позиции на клавиатуре и выполнять все рутинные действия с помощью текстовых команд. Оценить удобство командной строки способны только люди с базовой теоретической подготовкой, владеющие слепым десятипальцевым методом набора текста. Для остальных командная строка будет как ножиком по стеклу, но, увы, в web-разработке без терминала обойтись очень сложно, даже на коммерческих "юзерфрендли" операционных системах.

Текстовый редактор

Web-разработка в самых общих чертах всегда заключается в наборе кода различных диалектов в текстовые файлы разных форматов. Разрабатывая web-приложение, никак не обойтись без текстового редактора с подсветкой синтаксиса. Последнее время многие пользователи стремятся заменить текстовый редактор так называемыми IDE: VSCode, PyCharm и другими подобными. Но главная функция любой IDE — набор текста, а все остальные вспомогательные функции, как правило, отъедают у системы львиную долю аппаратных возможностей вычислительной машины и отвлекают оператора. У меня компьютер довольно медленный, поэтому в рамках этого цикла статей я буду править код примеров в консольном текстовом редакторе Vim, а продвинутые возможности модных IDE мне заменит командная строка и её не менее продвинутые инструменты.

Vim удобен, опять же, только людям, владеющим слепым методом набора текста, всем остальным он может не понравиться вплоть до крайней меры неприятия. Тем не менее, я советую освоить его хотя бы в объёме vimtutor, пригодится.

etgnjUfvYB.png

Vim имеет широкий спектр настроек, которыми я обычно стараюсь не злоупотреблять без надобности. Вот как выглядит мой файл настроек .vimrc.

set number
set colorcolumn=80
set showmatch
syntax on
filetype indent plugin on
imap <c-s> <esc>
vmap <c-s> <esc>
let &t_SI = "\<Esc>[6 q"
let &t_SR = "\<Esc>[4 q"
let &t_EI = "\<Esc>[2 q"
autocmd FileType html setlocal ts=2 sw=2 expandtab
autocmd FileType htmldjango setlocal ts=2 sw=2 expandtab
autocmd FileType xml setlocal ts=2 sw=2 expandtab
autocmd FileType css setlocal ts=2 sw=2 expandtab
autocmd FileType lua setlocal ts=2 sw=2 expandtab
autocmd FileType javascript setlocal ts=2 sw=2 expandtab
autocmd FileType sql setlocal ts=4 sw=4 expandtab
autocmd FileType c setlocal ts=2 sw=2 expandtab autoindent smartindent
autocmd FileType c++ setlocal ts=2 sw=2 expandtab autoindent smartindent
autocmd FileType rust setlocal ts=4 sw=4 expandtab autoindent smartindent
colorscheme shine 

В редакторе с такими настройками, а в них нет ничего сверх необычного, я и буду разрабатывать и демонстрировать код далее в этом цикле статей. Здесь привязка Esc на сочетание ctrl+s даст мне возможность не тянуться к этой клавише каждый раз при выходе из режимов. А для используемых мной в повседневной практике диалектов я назначил собственную ширину отступа для каждого. Кроме этого, редактор всякий раз будет показывать цветную полосу на 80 столбце, номера строк и подсвечивать парную скобку. Внешний вид курсора в командном режиме редактора будет отличаться в режиме ввода и визуальном. В общем, всё без изысков, дешево и сердито.

Базы данных

Современный web, как известно, описывает взаимодействие клиента и сервера сети по протоколу HTTP. В процессе разработки web-приложения, а этот процесс кроме набора кода предполагает ещё и тестирование, а если необходимо, ещё и отладку, понадобится отладочный web-сервер и запуск в нём разрабатываемого приложения. Это значит, что в операционной системе рабочего десктопа необходимо будет установить некоторые серверные программы. Для текущего web-приложения мне потребуются две базы данных: PostgreSQL и Redis.

Debian великолепен своим официальным хранилищем пакетов, в котором есть в наличии всё, или почти всё, как для десктопа, так и для сервера, достаточно подключиться к любому свободному зеркалу в сети. Есть в этом хранилище и Redis, и PostgreSQL. Установить эти компоненты можно при помощи пакетного менеджера apt вот такой простой командой.

$ sudo apt install -y postgresql redis

Конечно же, не сто процентов времени работы десктопа оператор занят web-разработкой, а сервера Redis и PostgreSQL по-умолчанию включены уже при загрузке операционной системы. В Debian окружение несложно настроить так, чтобы эти сервера включались только по команде пользователя. Более детально работу с этими базами данных, в том числе начальную настройку программного обеспечения для работы с ними, я опишу отдельными статьями в последующих выпусках этого блога, оставайтесь на связи, подписывайтесь и следите за обновлениями по соответствующим тегам, будет интересно.

Система контроля версий

Работа над web-приложением, как и программирование в любой другой специализации, предполагают поступательное редактирование кода от версии к версии. А это значит, что потребуется удобная и современная система контроля версий. В рамках этого цикла статей я буду использовать свободную систему контроля версий — Git.

По удивительному стечению обстоятельств Git есть в официальном хранилище пакетов Debian, а установить его так же просто, как и любой другой пакет, с помощью apt.

$ sudo apt install -y git

Если очень хочется поделиться своим кодом с почтенной публикой, это достаточно просто будет сделать с любым публичным Git-сервисом, коих в современной сети Интернет достаточно много. Git тоже заслуживает особого внимания, и поэтому работу с ним я покажу в отдельных статьях этого блога уже в ближайшей перспективе.

Интерпретатор Python3x

Поскольку задумал я разрабатывать web-приложение на современном, красивом и лаконичном языке программирования Python, для тестирования мне конечно же потребуется интерпретатор.

Хорошая новость — в Debian, в любой его версии и в комплекте установки с любым графическим рабочим столом интерпретатор Python будет уже установлен, а в официальном хранилище Debian есть целый сонм уже готовых к использованию python-пакетов почти на все случаи жизни.

На начальном этапе настройки операционной системы сразу необходимо установить всего три дополнительных пакета: python3-dev, python3-venv, python3-pip. Кроме этого, моя практика показывает, что пакет build-essential никогда не оказывается лишним, он подтягивает в систему компиляторы gcc и g++, которые в некоторых случаях бывают необходимы при установке пакетов в Pip.

В Debian всё перечисленное можно установить такой простой командой:

$ sudo apt install python3-dev python3-venv python3-pip build-essential

Пару слов стоит сказать о версии интерпретатора...

Так как Python3x является современным языком программирования и постоянно совершенствуется в поступательном развитии, версия интерпретатора время от времени обновляется. Чтобы всегда иметь интерпретатор актуальной версии, продвинутые пользователи используют на своём десктопе Debian sid, — это так называемый rolling-release, все компоненты обновляются в бесконечном цикле по мере выпуска. Когда выходит новая версия интерпретатора Python, достаточно сделать upgrade операционной системы, версия интерпретатора обновится автоматически, очень удобно. И конечно же стоит помнить, что sid нестабильная ветка и временами случается так, что он бывает неисправен. Осторожность при обновлении sid необходима, а она приходит с опытом.

Браузеры

Современный web описывает взаимодействие клиента и сервера по протоколу HTTP. С сервером всё более или менее понятно, вернее, пока совсем ничего не понятно, но пару слов о серверных компонентах я всё же сказал выше. А что с клиентом? Клиентом в данном случае является обычный, хорошо всем знакомый web-браузер. Насколько хорошо с возможностями web-браузера знаком рядовой пользователь — одно дело. Некоторые функциональные возможности этой программы обычные пользователи упускают из вида за неимением надобности, а вот web-разработчику для успешной разработки с ними (возможностями) так или иначе придётся познакомиться и даже сделать для себя некоторые потрясающие открытия, но об этом позже...

Работа над web-приложением предполагает тестирование кода в браузере — один из возможных вариантов тестирования. Практика показывает, что без браузера вряд ли можно обойтись даже работая в парадигме TDD (Test Driven Development). Браузеров сегодня известно достаточно много, и при разработке клиентской части приложения будет разумно тестировать код в браузерах разных вендоров. Кроме этого, при ручном тестировании будет необходимо работать от имени разных пользователей одновременно, а это значит, что будет необходимо иметь два и больше экземпляров браузера, в которых можно авторизоваться от имени разных пользователей.

К чему веду..? Если вы занимаетесь web-разработкой, браузеров никогда не бывает много, как и оперативной памяти компьютера. В моей текущей системе, например, их установлено 6 штук различных вендоров. Вот пруф, считайте.

r1dZ7oREWM.png

В самых тяжелых ситуациях, в период сезонных обострений обычно, случается запуск одновременно всех шести браузеров, в зависимости от количества дифференцированных в приложении групп пользователей. При этом в штатном браузере, в моём случае это Chromium, я работаю в сети Интернет в реальном времени всегда, и в нём копится кэш, автозаполнения, история посещений и прочий полезный для работы в сети шмурдяк. В этом браузере я стараюсь не тестировать web-приложения, потому что при тестировании очень часто возникает необходимость вычистить браузер в исходное состояние. Для тестирования и только для тестирования web-приложений в моей системе установлены зверушки типа Yandex, Brave, Google Chrome, Opera — в них я в глобальной сети не работаю никогда по соображениям безопасности и могу чистить их сколь угодно часто.

К чему эти оправдания? Однажды на pingvinus-е я выставил подобный снимок экрана, и мне пришлось выдержать нападки злобных хомяков за шесть браузеров в общем, и Google Chrome в частности. Теперь всегда подстилаю соломки... :) Желающих поругаться, милости прошу в комментарии, но без фанатизма.

Подводим итог

Web-разработка — довольно сложная, комплексная специализация, она требует тщательной теоретической подготовки оператора и не менее тщательной подготовки используемого оператором десктопа. В этой статье я бросил только первый, весьма беглый взгляд на используемое для web-разработки программное обеспечение. Далее в этом цикле статей я планирую описать многие аспекты этой работы более скрупулёзно и детально. Насколько далеко я зайду в реализации этих планов, зависит от активности в блоге — ваши посещения, подписки, лайки, комментарии, донаты служат главным мотивирующим меня фактором. Все статьи цикла доступны в хронологическом порядке по метке webapp. Не оставайтесь в стороне, продолжение следует, будет интересно...