Текст будет интересен программистам, но в нем есть один анекдот.

Перед программистом, который разрабатывает веб-приложения, стоит задача воссоздания LAMP (Linux, Apache, MySQL, PHP) или MEAN (MongoDB, Express.js, Angular.js, Node.js). Я перепробовал множество способов.

Важные моменты создания такого “окружения” для работы:

    • Удобство и быстрая работа, т.к. даже топовые модели домашних компьютеров часто уступают в мощности профессиональным серверам
    • Соответствие настроек и установленных компонентов тем что будут использоваться в production, т.е. в реальных условиях.

Последний пункт особенно важен, иначе будет как в известном анекдоте:

Устроился программист работать врачом. Приходит пациент, жалуется на боль в ноге. Программист осмотрел ногу и говорит: “Ну не знаю, у меня точно такая же нога и она не болит”

Разработка на веб-сервере.


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

Создание веб-сервера на своем компьютере

Позже я установил на свой ноутбук Apache, MySQL, PHP, настроил их по доке из интернета.
Было удобно, никуда ничего не нужно было загружать. Но после я сменил ноутбук и не захотел проходить этот путь настроек и установок разных модулей снова.

К тому же появилось много задач по переносу кода PHP версии 5.x на PHP 7.x, а постоянно переустанавливать PHP утомительно.

XAMPP


Какое-то время использовал XAMPP от Apache Friends. Решение очень простое и популярное среди моих знакомых. Нужно всего лишь скачать один файл и запустить – и у вас полноценный веб-сервер. Программа распространяется на условиях GNU GPL-лицензии, в чем она заключается вы прочитать в интернете, я лишь скажу, что создатели разрешают использовать XAMPP бесплатно и без всяких ограничений на распространение.

Одновременно я испытал решение под названием DevilBox и в итоге остановился на нем, хотя XAMPP тоже очень хорошее решение, которое имеет все необходимое и даже больше.

Devilbox


Devilbox – это тоже решение из коробки и тоже бесплатное. Реализовано в качестве контейнеров для Docker. Установка и настройка чуть-чуть сложнее, но оно того стоит.

Если на вашей машине нет Докера, то сначала нужно установить его. Всю информацию по установке на Windows, Linux или Mac и настройке вы найдете на сайте docker.com

После этого вы устанавливаете сам devilbox. Инструкция есть на сайте devilbox.org

Вся установка выполняется в три действия:

1. Скачиваем архив и распаковываем или клонируем git-репозиторий с адреса https://github.com/cytopia/devilbox
2. В папке копируете файл настроек env-example в файл .env и редактируете содержимое.
Лично мне потребовалось указать часовой пояс и придумать пароль для базы данных.
3. Запускаем командой docker-compose up

После этого нужно подождать когда будут скачаны необходимые контейнеры и можно начинать работу.

Devilbox имеет гораздо больше разных инструментов в дополнение LAMP и MEAN. Перечислю некоторые “фичы”, которые нужны в моей работе:

Прежде всего настроенный DNS-сервер bind, благодаря которому достаточно создать папку с названием домена и в ней папку htdocs и в результате локальный сайт будет доступен локально по адресу http://имя_домена.loc

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

Devilbox позволяет также автоматически подключать SSL-сертификаты для новых доменов, что позволяет тестировать сайты по протоколу HTTPS

Множество полезных вебприложений (phpmyadmin, adminer и прочие). Установить их несложно, но это время, а здесь они уже идут настроенные

Аналогично много нужных консольных приложений, что особенно актуально для пользователей, например, Windows, в которых такие вещи как git нужно скачивать дополнительно, а для то чтобы иметь полноценную linux-консоль со всеми необходимыми программами нужно ставить какой-нибудь cygwin

Здесь уже есть git, composer, webpack, PHP Codesniffer, WP Cli (если вы разработчик для WordPress),eslint и многое другое.

Смена нужной версии PHP или базы данных выполняется указанием версии в файле .env

Для отладки кода PHP в версии 7.2 просто выставляете значение PHP_SERVER=7.2 и перезапускаете devilbox. Необходимые “стэки” скачаются сами.
По готовности на http://localhost вы увидите такую страницу:

**Некоторые моменты настроек**

– Apache веб-сервер почему-то работал медленно. После замены настройки на nginx в файле .env:
HTTPD_SERVER=nginx-stable сервер забегал значительно быстрее.
– У меня не было времени вникнуть во все нюансы настройки Докера, лично я запускаю devilbox в линуксе командой nohup docker-compose up > /dev/null &, а останавливаю docker-compose down
– Очень часто у меня возникала проблема из-за того что я не всегда останавливал контейнеры devilbox-а, или же, бывало, выключали электричество, из-за этого потом запустить не удавалось, возникала примерно такая ошибка:

Starting devilbox_bind_1 ... error
ERROR: for devilbox_bind_1 Cannot start service bind: OCI runtime create failed: container with id exists: be31a7b2049afff7f9738cc47f07e6fb6c313db085f15eb7f147bc4c65f303db: unknown
ERROR: for bind Cannot start service bind: OCI runtime create failed: container with id exists: be31a7b2049afff7f9738cc47f07e6fb6c313db085f15eb7f147bc4c65f303db: unknown
ERROR: Encountered errors while bringing up the project.

Я долго искал решение в гугле, ничего никто так и не предложил. В итоге изучив вопрос я написал для таких случаев сниппет, который решает эту проблему:

После выполнения этого кода достаточно выполнить docker-compose rm и можно запускать.

Оставьте комментарий

avatar
  Subscribe  
Notify of