Статьи

Повторное представление Vagrant: правильный путь для начала с PHP

Меня часто просят порекомендовать ресурсы для начинающих для людей, плохо знакомых с PHP. И это правда, у нас не так много по- настоящему дружелюбных новичков. Я хотел бы изменить это, сначала поговорив об основах конфигурации среды. В этом посте вы узнаете о самом первом, что вы должны сделать, прежде чем начать работать с PHP (или любым другим языком в этом отношении).

Мы вновь представим разработку на базе Vagrant.

Обратите внимание, что эта тема (среди других передовых практик) более подробно освещена в книге SitePoint, посвященной Jump Start PHP Environment .

Пожалуйста, найдите время, чтобы прочитать всю статью — я понимаю, что это стена текста, но это важная стена текста. Следуя советам внутри, вы не только сделаете себе одолжение, но и получите выгоду от бесчисленных других разработчиков в будущем. Эта публикация будет в основном теоретической, но в конце мы дадим ссылку на быстрый 5-минутный учебник, предназначенный для того, чтобы практически сразу приступить к работе с Vagrant. Тем не менее, рекомендуется, чтобы вы усвоили теорию, стоящую за этим, прежде чем делать это

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

Какая?

Начнем с очевидного вопроса — что такое Vagrant? Чтобы объяснить это, нам нужно сначала объяснить следующие 3 термина:

  • Виртуальная машина
  • VirtualBox
  • Provisioning

Виртуальная машина

В таких простых определениях, как я могу их представить, Виртуальная машина (ВМ) — это изолированная часть вашего основного компьютера, которая считает, что это компьютер сам по себе. Например, если у вас есть ЦП с 4 ядрами, 12 ГБ ОЗУ и 500 ГБ пространства на жестком диске, вы можете превратить 1 ядро, 4 ГБ или ОЗУ и 20 ГБ или пространство на жестком диске в виртуальную машину. Затем эта ВМ думает, что это компьютер с таким большим количеством ресурсов, и совершенно не знает о своей «родительской» системе — она ​​думает, что это компьютер сам по себе. Это позволяет вам иметь «компьютер в компьютере» (да, даже новый «монитор», который по сути является окном внутри окна — см. Изображение ниже):

A Windows VM inside a Mac OS X system
Виртуальная машина Windows внутри системы Mac OS X

Это имеет несколько преимуществ:

  • Вы можете испортить все, что захотите, и на вашей основной машине ничего не сломается. Представьте себе случайную загрузку вируса — на вашем главном компьютере, который может быть катастрофическим. Весь ваш компьютер будет в опасности. Но если вы загрузили вирус внутри виртуальной машины, рискует только виртуальная машина, потому что она не имеет реальной связи с родительской системой, от которой она живет. Таким образом, виртуальная машина, когда она заражена, может быть просто уничтожена и снова настроена на существование, чистая как свисток, без последствий.
  • Вы можете протестировать приложения для других операционных систем. Например, у вас есть компьютер Apple, но вы действительно хотите одно конкретное приложение Windows, которого нет у Apple. Просто включите виртуальную машину Windows и запустите приложение внутри нее (как на картинке выше)!
  • Вы держите свою основную ОС свободной от мусора. Устанавливая компоненты на свою виртуальную машину, вы избегаете необходимости устанавливать что-либо на свою основную машину (ту, на которой работает виртуальная машина), сохраняя основную ОС чистой, быстрой и максимально приближенной к ее «совершенно новому» состоянию для долгое время.

Вы можете задаться вопросом — если бы я посвятил большую часть своего хост-компьютера виртуальной машине (все ядро ​​процессора, 4 ГБ ОЗУ и т. Д.), Не так ли:

  • сделать мой главный компьютер медленнее?
  • замедлить работу виртуальной машины, потому что это слабая машина?

Ответ на оба вопроса — «да», но вот почему это не имеет большого значения. Вы запускаете виртуальную машину только тогда, когда вам это нужно, а когда нет, вы «выключаете» ее, как если бы вы выключали физический компьютер. Ресурсы (ядро вашего процессора и т. Д.) Мгновенно высвобождаются. Медленная работа виртуальной машины не является проблемой, поскольку она не предназначена для того, чтобы быть главной машиной — для этого у вас есть хост, ваш главный компьютер. Таким образом, виртуальная машина существует только для определенной цели, и для этой цели этих ресурсов более чем достаточно. Если вам действительно нужна виртуальная машина более мощная, чем хост-операционная система, просто выделите виртуальной машине больше ресурсов — например, если вы хотите играть в мощную игру на своем компьютере с Windows, и вы работаете на компьютере Mac с 4 ядрами процессора, дайте виртуальную машину 3 ядра и 70-80% вашей оперативной памяти — виртуальная машина мгновенно становится достаточно мощной для запуска вашей игры!

Но как вы «делаете» виртуальную машину? Это где программное обеспечение, как VirtualBox приходит.

VirtualBox

VirtualBox — это программа, которая позволяет быстро и легко создавать виртуальные машины. Альтернативой VirtualBox является VMware. Вы можете (и должны немедленно) установить VirtualBox здесь .

VirtualBox logo

VirtualBox предоставляет простой в использовании графический интерфейс для настройки новых виртуальных машин. Это позволит вам выбрать количество ядер ЦП, дисковое пространство и многое другое. Чтобы использовать его, вам нужен существующий образ (например, установочный компакт-диск) операционной системы, которую вы хотите запустить на создаваемой виртуальной машине. Например, если вы хотите использовать виртуальную машину Windows, как показано на рисунке выше, вам понадобится установочный DVD-диск Windows. То же самое для разных версий Linux, OS X и так далее.

Provisioning

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

В процессе инициализации вам нужно всего лишь создать новую виртуальную машину и запустить провайдера (провайдер — это специальная программа, которая требует специальных инструкций), и обо всем позаботится автоматически. Некоторые популярные провайдеры: Ansible, Chef, Puppet и т. Д. — каждый из них имеет специальный синтаксис в «рецепте» конфигурации, который вам необходимо изучить. Но не бойтесь — это тоже можно пропустить. Продолжай читать.

бродяга

Вот где мы добираемся до Бродяги. Vagrant — это еще одна программа, которая сочетает в себе возможности поставщика и VirtualBox для настройки виртуальной машины.

Вы можете (и должны немедленно) установить Vagrant здесь .

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

На машинах Vagrant не будет графических элементов, окон, панелей задач и мыши. Они используются исключительно через терминал (или командную строку в Windows — но для простоты я буду называть его теперь терминалом). Это имеет несколько преимуществ перед стандартными виртуальными машинами:

  1. Бродячие виртуальные машины очень быстро загружаются. Буквально секунды требуются для включения виртуальной машины и начала разработки на ней. Посмотрите, как быстро это происходит для меня — 25 секунд без изменений от начала до конца:
    Vagrant up
  2. Бродячие виртуальные машины чрезвычайно быстры в использовании — без графических элементов, занимающих ценные циклы ЦП и ОЗУ, виртуальная машина работает так же быстро, как обычный компьютер
  3. Бродячие виртуальные машины напоминают реальные серверы. Если вы знаете, как использовать виртуальную машину Vagrant, вы также можете найти способ обойти реальный сервер.
  4. Бродячие виртуальные машины очень легки из-за их раздробленной природы, поэтому их конфигурация обычно может быть намного слабее, чем у обычных виртуальных машин с графическим интерфейсом. Одно ядро ​​ЦП и 1 ГБ ОЗУ более чем достаточно в большинстве случаев использования при разработке на PHP. Это означает, что вы можете не только загрузить Vagrant VM на очень слабый компьютер, вы также можете загрузить несколько и при этом не беспокоиться о нехватке ресурсов.
  5. Возможно, самое главное, Vagrant VM являются разрушаемыми. Если что-то идет не так на вашей виртуальной машине — вы устанавливаете что-то вредоносное, случайно удаляете что-то важное или происходит любое другое бедствие, все, что вам нужно сделать, чтобы вернуться в исходное состояние, — запустить две команды: vagrant destroy которая уничтожит виртуальную машину и все, что было установлено на нем после процесса инициализации (что происходит сразу после загрузки), и vagrant up который восстанавливает его с нуля и после этого перезапускает процесс инициализации, эффективно возвращая время назад, до того, как вы все испортили.

С Vagrant у вас есть очень щадящая среда, которая может за считанные минуты восстановить все до первоначального состояния, что экономит вам многие часы процедур отладки и переустановки.

Почему?

Итак, почему это делается для разработки PHP в частности?

  1. Возможность тестирования на нескольких версиях PHP или PHP с различными установленными расширениями. Одна виртуальная машина может работать под управлением PHP 5.5, другая может работать под управлением PHP 5.6, другая может работать под управлением PHP 7. Протестируйте свой код на каждой — не нужно ничего переустанавливать. Мгновенно убедитесь, что ваш код совместим с разными версиями.
  2. Возможность тестирования на нескольких серверах. Тестирование на Apache на одной виртуальной машине, тестирование на Nginx на другой или на Lighttpd на другой — тоже самое, что и выше: убедитесь, что ваш код работает на всех конфигурациях сервера.
  3. Оцените скорость выполнения вашего кода на разных комбинациях серверов + версии PHP. Возможно, код будет выполняться в два раза быстрее на Nginx + PHP 7, что позволит вам оптимизировать процесс и предупредить потенциальных пользователей о возможном увеличении скорости.
  4. Поделитесь этой же средой с другими членами команды, избегая оправданий «она работает на моей машине». Все, что для этого нужно — это поделиться одним Vagrantfile (который содержит всю необходимую конфигурацию), и у всех будет такая же настройка, как и у вас .
  5. Получите четность dev / prod: настройте Vagrant VM на использование того же программного обеспечения (и версий), что и на производственном (живом) сервере. Например, если на живом сервере запущены Nginx и PHP 5.6.11, настройте виртуальную машину Vagrant точно так же. Таким образом, вы на 100% уверены, что ваш код будет работать мгновенно, когда вы развернете его в производство, а значит, для ваших посетителей не будет простоев !

Это основные, но не единственные причины.

Но почему не XAMPP ? XAMPP — это предварительно собранный пакет PHP, Apache, MySQL (и Perl, для трех людей в мире, которые в нем нуждаются), который делает рабочую среду PHP одним щелчком мыши. Конечно, это лучше, чем Бродяга, нет? Я имею в виду, один клик против изучения терминалов, клонирования Git, виртуальных машин, хостов и т. Д.? Ну, на самом деле, это намного хуже по следующим причинам:

  1. Используя XAMPP, вы полностью поглощаете ноу-хау конфигурации сервера, оставаясь на 100% невежественным в отношении терминалов, ручной установки программного обеспечения, использования SSH и всего остального, что вам когда-нибудь понадобится для развертывания реального приложения.
  2. С XAMPP вы никогда не используете самую последнюю версию программного обеспечения. Будучи предварительно сконфигурированным стеком программного обеспечения, обновление отдельной части требует времени и усилий, поэтому обычно этого не происходит, если не происходит существенного изменения версии. Таким образом, вы всегда работаете над чем-то, хотя бы немного устаревшим.
  3. XAMPP заставляет вас использовать Apache. Не то, чтобы Nginx был альфа и омегой серверного программного обеспечения, но возможность хотя бы протестировать его была бы очень полезной. С XAMPP и аналогичными пакетами у вас нет возможности сделать это.
  4. XAMPP заставляет вас использовать MySQL. Как и выше, возможность переключения баз данных по желанию является отличным преимуществом разработки на основе виртуальных машин, поскольку она позволяет не только изучать новые технологии, но и использовать те из них, которые соответствуют сценарию использования. Например, вы не будете строить социальную сеть с MySQL — вы будете использовать графическую базу данных — но с такими пакетами, как XAMPP, вы можете поцеловать эту опцию до свидания, если вы не столкнетесь с дополнительными махинациями установки ее на свою машину, что приводит к наряду с множеством новых проблем.
  5. XAMPP устанавливается на вашей операционной системе, что означает, что он загрязняет пространство вашей основной системы. Каждый раз, когда ваш компьютер загружается, он будет немного медленнее из-за этого, потому что программное обеспечение будет загружаться независимо от того, планируете ли вы какую-то разработку в этот день. С виртуальными машинами вы включаете их только тогда, когда они вам нужны.
  6. XAMPP заблокирован по версии — вы не можете переключить версию PHP для другой или версию MySQL для другой. Все, что вы можете сделать, это использовать то, что вам дают, и хотя это может подойти для того, кто на 100% новичок в PHP, в долгосрочной перспективе это вредно, поскольку дает ложное чувство безопасности и уверенности.
  7. XAMPP зависит от ОС. Если вы используете Windows и устанавливаете XAMPP, вам придется мириться с различными проблемами, с которыми PHP сталкивается в Windows. Код, который работает в Windows, может не работать в Linux, и наоборот. Поскольку подавляющее большинство сайтов PHP работают на серверах Linux, разработка на виртуальной машине Linux (работающей на Vagrant) имеет смысл.

Есть еще много причин не использовать XAMPP (и подобные пакеты, такие как MAMP, WAMP и т. Д.), Но это основные.

Как?

Так как же включить Vagrant box?

Первый способ, который включает в себя некоторые эксперименты и загрузку большого количества данных, — это перейти к списку Vagrant Box в Hashicorp, найти понравившийся вам и выполнить команду, которую вы можете найти в деталях блока. Например, чтобы vagrant init ubuntu/trusty64 64-битную виртуальную vagrant init ubuntu/trusty64 Ubuntu 14.04, вы запускаете: vagrant init ubuntu/trusty64 в папке по вашему выбору после установки Vagrant, как vagrant init ubuntu/trusty64 в инструкциях . Это загрузит коробку в вашу локальную копию Vagrant и сохранит ее для будущего использования (вам нужно будет загрузить только один раз), чтобы будущие виртуальные машины, основанные на этой, настраивались быстрее.

Обратите внимание, что блоки Hashicorp (которая, кстати, является компанией Vagrant) не обязательно должны быть виртуальными машинами. Некоторые поставляются с предустановленным программным обеспечением, что делает все намного быстрее. Например, в комплект поставки laravel / hometead входит новейшая предустановленная версия PHP, MySQL, Nginx, PostgreSQL и т. Д., Поэтому вы можете приступить к работе почти сразу (подробнее об этом в следующем разделе).

Еще один способ — захватить чью-то заранее сконфигурированную коробку Vagrant с Github. Коробки из списка в приведенной выше ссылке достаточно приличны, но не содержат всего, что вы хотели бы установить или настроить. Например, пакет hometead поставляется с PHP и Nginx, но если вы загрузите его, у вас не будет настроенного сервера, и вы не сможете посетить свой сайт в браузере. Чтобы получить это, вам нужен провайдер, и именно здесь Vagrantfiles вступают в игру. Когда вы извлекаете чей-то Vagrantfile из Github, вы также получаете конфигурацию — все настраивается для вас. Это приводит нас в HI.

Здравствуй!

HI (сокращение от Homestead Improved) — это версия laravel / hometead . Мы широко используем это поле в SitePoint для быстрой загрузки новых проектов и учебных пособий, чтобы у всех читателей была одинаковая среда разработки для работы. Почему версия, а не оригинальная усадьба может вас удивить? Поскольку оригинал требует, чтобы на вашем хост-компьютере был установлен PHP (тот, на котором вы загрузите свою виртуальную машину), и я большой сторонник кроссплатформенной разработки, так как вам не нужно ничего менять на вашем компьютере. хост ОС при переключении машин. Используя Homestead Improved, вы получаете среду, готовую для абсолютно любой операционной системы практически без усилий.

GIF выше, где я загружаю виртуальную машину за 25 секунд — это виртуальная машина HI, которую я использую для конкретного проекта .

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

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

Вывод

Используя HI (и Vagrant в целом), вы прокладываете путь к собственному опыту кросс-платформенной разработки и сохраняете свою хост-операционную систему чистой и изолированной от всех ваших усилий по разработке.

Ниже вы найдете список других полезных ресурсов для пополнения ваших новых способностей Бродяги:

  • Сообщения SitePoint Vagrant — множество учебных пособий по множеству различных аспектов разработки с помощью Vagrant, некоторые объясняют ссылки ниже, некоторые выходят за рамки этого и углубляются в ручную настройку коробки или даже создание собственной и т. Д.
  • StackOverflow Vagrant Tag для вопросов и ответов о Vagrant, если у вас возникли проблемы с его настройкой
  • PuPHPet — способ графически настроить предоставление нового Vagrant-бокса под ваши потребности — выбрать сервер, версию PHP, базу данных и многое другое. Использует поставщика марионеток. Знание Кукольный не требуется.
  • Phansible — такой же, как PuPHPet, но использует поставщика Ansible. Знание Ansible не требуется.
  • Vaprobash набор скриптов Bash, которые вы можете загрузить (без инициатора — необработанные команды терминала в различных файлах, которые только что выполняются) в качестве альтернативы двум вышеупомянутым. Требует немного больше ручной работы, но обычно приводит к менее раздутым виртуальным машинам из-за тонкости настройки .
  • 5 способов начать работу с Vagrant — перечисленные выше ресурсы, а также некоторые другие.

У вас есть вопросы? Что-то неясно? Хотите, чтобы я углубился в любую из упомянутых выше тем? Пожалуйста, дайте мне знать в комментариях ниже, и я сделаю все возможное, чтобы прояснить ситуацию.