Погружение в веб-разработку для начинающих. Часть 3. Инструменты, среда запуска и разработки

14.08.2019

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

В этой части будут рассмотрены три важных раздела:

  • Базовые инструменты с которыми должен быть знаком каждый разработчик
  • Так как наши приложения живут в сети интернет, рассмотрим темы касающиеся работы сети
  • Окружения в которых работают наши приложения

Средства разработки

Начнём с создания комфорта при разработке и отладке приложений.

Редакторы кода

Редактор кода — это основное рабочее место каждого разработчика (то место где создаются чудеса). Базовые редакторы предоставляют необходимый набор возможностей, такие как подстветка синтаксиса, помощь при рефакторинге и отладке. Также существуют более продвинутые редакторы, называемые IDE (интегрированная среда разработки), которые содержат больше разных инструментов и возможностей. Вот список некоторых редакторов и IDE.

  • Visual Studio Code — это кроссплатформенный редактор кода созданный Microsoft. Имеет встроенную поддержку JavaScript, TypeScript, CSS и HTML. Также доступна поддержка множества других языков программирования в виде дополнительных расширений. VS Code поддерживает подсветку синтаксиса, автодополнение кода, шаблоны генерации текста, инструменты рефакторинга и встроенный терминал. Также имеется интегрированный отладчик для помощи в поиске багов. И хотя редактор не имеет таких широких возможностей как коммерческие IDE, этого может быть вполне достаточно.
  • IDE от JetBrains — семейство IDE разрабатываемых JetBrains для разных платформ. Например есть WebStorm для фронтенда, IDEA для Java, PhpStorm для PHP и так далее. Каждая из них фокусируется на поддержке конкретных языков программирования, их фреймворков и инструментов. Но во всех них есть общие полезные инструменты, такие как интеграция с системами контроля версий, собственная история изменений и другие. Продукты JetBrains платные, но у некоторых есть свободные для использования лицензии Community Edition.
  • Visual Studio IDE коммерческая IDE разрабатываемя Microsoft. Доступны три вида лицензии: свободная Community Edition, Professional и Enterprise. Имеет поддержку разных языков программирования и возможности для разработки и отладки приложений. В дополнение к этому есть поддержка других продуктов и сервисов от Microsoft, например Azure и Azure DevOps. В приоритете C# и TypeScript.

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

Системы контроля версий играют ключевую роль в процессе разработки. Они позволяют хранить полную историю изменений кода в удалённом репозитории. Вы можете просматривать изменения, делать сравнения версий и откатываться к предыдущим. Несколько разработчиков могут работать с одним общим репозиторием для обеспечения совместной разработки проекта.

Системы контроля версий могут использоваться как из командной строки так и из графического интерфейса.

  • Git — наиболее популярная система контроля версий. Является распределённой, это означает что при работе все пользователи имеют полную копию репозитория со всей историей и могут работать независимо от основного репозитория. Время от времени разработчики должны публиковать свои изменения в центральный репозиторий и загружать к себе изменения других участников. Существуют сервисы облачного хостинга репозиториев, такие как GitHub и BitBucket.
  • Subversion (SVN) — другая система контроля версий. В отличии от Git, SVN позволяет разработчику работать только с одной веткой. Для переключения на другую ветку потребуется скачать её с удалённого репозитория. И хотя всё ещё используется в индустрии, на данный момент Git имеет большую популярность в веб-разработке.

Терминал и командная строка

Как разработчику, важно чтобы вы могли комфортно работать с терминалом в OSX или Linux или командной строкой в Windows. Даже если большинство вещей доступны вам через графический интерфейс, всё равно периодически придётся сталкиваться с инструментами доступными только из интерфейса командной строки. Также возможно придётся работать с удалёнными серверами, которые вообще не имеют какой-либо графической оболочки. Важно уметь совершать базовые операции, такие как навигация по файловой системе, создание и удаление файлов, просмотр и редактирование документов, запуск программ и скриптов.

Shell скрипты

Познакомившись однажды с удобством shell-скриптов, в будущем вы можете сэкономить много времени на автоматизации рутинных задач, таких как выгрузка кода, обслуживание инфраструктуры или запуск других цепочек задач. В зависимости от операционной системы, следует изучить написание скриптов используя Bash для Linux или OSX, или PowerShell для Windows. Часто множество других программ поставляются с набором своих скриптов.

Linux

Linux — это семейство свободных операционных систем с открытым исходным кодом основанных на ядре Linux (Linux Kernel). Существует множество разных дистрибутивов: Ubuntu, Debian, CentOS, Mint, openSUSE и другие. Можно найти дистрибутивы которые будут запускаться на любых видах устройств, начиная со встраиваемой электронники и заканчивая смартфонами и серверами. Linux отличается от Windows в базовых вещах, и поэтому при переходе с Windows потребуется изучить фундаментальные подходы, например как устроена структура файловой системы, контроль доступа, установка ПО и так далее.

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

Сеть

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

Протоколы

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

  • HTTP — основной протокол сети интернет определяющий как браузеры и другие клиенты могут запрашивать информацию у веб-серверов. Когда вы вводите адрес сайта в браузере, осуществлется один или несколько HTTP запросов к серверу для загрузки HTML, CSS, скриптов и картинок. Его дополнение, HTTPS, позволяет шифровать всю передаваемую информацию для обеспечения безопасности.
  • HTTP/2 — обновление HTTP направленное на повышение производительности веб-приложений. Основывается на мультиплексировании, что означает возможность передачи одновременно разных данных в пределах одного запроса. Протокол принуждает использовать шифрование и минимизирует дополнительные издержки сжатием заголовков.
  • TCP — транспортный протокол обеспечивающий доставку пакетов между приложениями без потерь этих пакетов с гарантией доставки. HTTP и HTTPS работают поверх TCP.
  • Internet Protocol (IP) — протокол сетевого уровня определяющий как пакеты должны направляться от одного узла к другому. TCP использует IP для маршрутизации. Сейчас существует две основные версии протокола IPv4 и IPv6.

DNS

Система доменных имён ответственна за перевод человеко-понятных названий интернет-ресурсов в соответствующие им IP адреса.

Проблемы с сетью

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

  • Ping — кроссплатформенная утилита позволяющая проверить доступность IP адреса. Также есть возможность для сбора статистики по потерям пакетов и времени их доставки для диагностики уровня работы сети.
  • Ncat — Linux инструмент, "швейцарский" нож в сетевых инструментах, который позволяет отправлять сообщения по разным протоколам, сканировать открытые порты, создавать туннели и много другое.

Веб-серверы

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

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

Вот некоторые популярные веб-серверы.

  • Apache HTTP Server — свободный веб-сервер с открытым исходным кодом разрабатываемый Apache Software Foundation. Это быстрый и мощный веб-сервер который может быть настроен как для отдачи статичных файлов, так и для запуска различных скриптов написанных на PHP, Python и др.
  • Microsoft IIS — универсальный веб-сервер от Microsoft которые доступен в Windows Server. IIS это популярный выбор компаний использующих стек технологий от Microsoft.
  • NGINX — это веб-сервер который чаще используется в проектах с повышенной нагрузкой в качестве прокси-сервера, балансировщика нагрузки и сервера статичных файлов. NGINX — это свободный веб-сервер с открытым исходным кодом, но существует также расширенная платная версия NGINX Plus.

Виртуализация

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

Виртуальные машины

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

  • VirtualBox — свободный кроссплатформенный гипервизор с открытым исходным кодом разрабатываемый Oracle. Есть поддержка создания и запуска виртуальных машин, управления ресурсами и общими директориями. Есть поддержка графического интерфейса.
  • Parallels Desktop for Mac позволяет бесшовно запускать Windows-приложения на Mac.

Контейнеры

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

  • Docker — наиболее популярная кроссплатформенная система контейнеризации. Docker позволяет сделать укомплектованный образ для запуска приложения с набором предустановленных программ и пакетов.
  • Kubernetes — это платформа для автоматического запуска и обслуживания множества контейнеров на кластерах серверов.

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