Перейти к содержанию

Devilbox aka ящик дьявола

Перед нами очередная полезная штука, работающая на Linux, Mac OS и Windows, под злобным названием Devilbox.

Требования⚓︎

Введение⚓︎

Devilbox представляет собой не только стек LAMP, но и стек MEAN. MEAN это набор технологий на базе JavaScript, предназначенных для разработки веб-приложений: MongoDB, ExpressJS, AngularJS и Node.js. Ну и работает это всё не в отдельном приложении, а на основе Docker.

Можно настроить нужные вам версии сервисов, а также использовать неограниченное количество проектов.

Приступаем⚓︎

Прежде всего остановите любые другие WAMP-приложения (OSPanel и т. п.), если они у вас запущены.

Заходим на диск, куда вы хотите установить Devilbox, и запускаем в консоли команду:

git clone https://github.com/cytopia/devilbox
cd devilbox
cp env-example .env

Меняем файл .env в соответствии с тем, какие именно сервисы вам нужны.

Например, можно задать корневую папку проектов:

HTTPD_DOCROOT_DIR=htdocs

Если вы используете Laravel, то наверняка захотите установить здесь public:

HTTPD_DOCROOT_DIR=public

Там же можно поменять суффикс доменов по умолчанию:

TLD_SUFFIX=dvl.to

Auto DNS

Не забудьте настроить и Auto DNS. Это такая полезная штука, которая избавляет вас от необходимости вручную добавлять адреса создаваемых вами сайтов в файл hosts. Для этого измените строчку HOST_PORT_BIND=1053 таким образом:

HOST_PORT_BIND=53
После этого добавьте 127.0.0.1 в качестве предпочитаемого DNS-сервера.

Теперь можно выполнить запуск (Docker должен быть запущен):

docker compose up -d

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

Либо можно запустить или остановить только то, что вам нужно:

# Традиционный LAMP-стек
docker compose up httpd php mysql
# Добавляем Redis к запущенному стеку
docker compose up redis
# Останавливаем MySQL в текущем стеке
docker compose stop mysql

Для создания нового проекта вам просто потребуется создать новую папку в директории devilbox/data/www. Поскольку вы, вероятно, не хотите каждый раз редактировать файл /etc/hosts, встроенный DNS-сервер автоматически предоставит правильные записи DNS для каждого проекта.

Примечание

Пока Devilbox запущен, вам доступен пункт управления по адресу http://localhost. Здесь вы найдете все популярные инструменты: phpMyAdmin, Adminer и т. д.

Пробный проект⚓︎

Создадим для примера файл devilbox/data/www/test/index.php:

<?php phpinfo();

Если вы не настроили Auto DNS (см. выше), добавьте строчку 127.0.0.1 test.dvl.to в файл C:\Windows\system32\drivers\etc\hosts. Теперь в браузере должен быть доступен адрес https://test.dvl.to (да-да, здесь настроен SSL). Если вы поменяли суффикс доменов в файле .env, используйте его вместо .dvl.to.

Обновление⚓︎

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

docker compose pull

Однако, если только что была выпущена новая дополнительная версия (например, PHP) и вы хотите использовать её прямо сейчас, вы можете просто заgit cloneить репозиторий Docker и пересобрать контейнер. Каждый репозиторий контейнеров содержит сценарий оболочки для упрощения сборки:

# Скачиваем репозиторий PHP 8.3
git clone https://github.com/cytopia/docker-php-fpm-8.3

# Пересобираем контейнер
cd docker-php-fpm-8.3
./build/docker-rebuild.sh

Для изменения настроек PHP откройте файл devilbox/cfg/{версия PHP}/devilbox-php.ini-default, внесите нужные изменения и сохраните под именем devilbox-php.ini (чтобы было расширение .ini). Можно сделать неограниченное число таких конфигов, подхватываться будут только те, что с расширением .ini. Для вступления изменений в силу необходимо перезапускать Devilbox.

Проект на базе Laravel⚓︎

Теперь попробуем установить Laravel. Зайдите в папку devilbox, откройте консоль и выполните команду:

./shell.bat
# Создадим папку внутри директории `data/www`
mkdir my-laravel

# Перейдем в эту папку
cd my-laravel

# Создадим новый проект
laravel new laravel-project

Символическое связывание фактического корневого каталога веб-сайта с htdocs важно. Веб-сервер ожидает, что корень документа каждого проекта находится в <vhost dir>/htdocs/. Это путь, по которому он будет обслуживать файлы. Это также путь, по которому должна быть найдена точка входа в вашу платформу (обычно index.php).

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

ln -s laravel-project/public/ htdocs

Готово. Можно посмотреть созданный проект в браузере: https://my-laravel.dvl.to (если вы не меняли суффикс доменов)

Для остановки запущенного проекта можно воспользоваться графическим интерфейсом Docker Desktop, либо выполнить в корневой папке проекта команду docker compose down.

Список хостов Devilbox⚓︎

При настройке ваших PHP-проектов на использование MySQL, PostgreSQL, Redis, Mongo и других сервисов, убедитесь, что имя хоста/адрес каждого из них соответствует тому, как они определены в сети Devilbox:

Контейнер Имя Хост IP-адрес
DNS bind bind 172.16.238.100
PHP php php 172.16.238.10
Apache, Nginx httpd httpd 172.16.238.11
MySQL, MariaDB, PerconaDB mysql mysql 172.16.238.12
PostgreSQL pgsql pgsql 172.16.238.13
Redis redis redis 172.16.238.14
Memcached memcd memcd 172.16.238.15
MongoDB mongo mongo 172.16.238.16

Как это использовать? Ну, например, при установке какого-нибудь движка, требующего создания базы данных, нужно ввести вместо localhost хост используемой вами базы данных — mysql, pgsql и т. п. Пользователь по умолчанию — root, без пароля.

Комментарии