Разработчики всегда стараются идти в ногу со временем. Однако часть работающих и приносящих прибыль проектов, к сожалению, остаются на старом стеке технологий. Таких, например, как Apache и php 5.3.
Новые дистрибутивы Linux, к сожалению, уже не имеют в своих репозиториях такой старой версии php как 5.3. Готовые сборки docker для php разработчиков, такие как Laradock, тоже не поддерживают столь старые версии. Что же делать, если необходимо поднять окружение разработчика для таких проектов?
Одним из возможных решений может быть поднятие виртуальной машины на базе старой версии дистрибутива Linux. Однако, если есть потребность перенести окружение на новый компьютер или распространить внутри группы разработчиков, то хотелось бы избежать рутины повторения одних и тех же настроек. В этих случаях на помощь приходит Vagrant.
Я сделал проект vagrant-grandpa-php с конфигурационными файлами для легкого поднятия такой машины.
Необходимо, чтобы у вас были установлены несколько зависимостей:
- VirtualBox
- vagrant
- vagrant-hostsupdater
Если они у вас установлены, то необходимо клонировать проект с github на в любую удобную директорию и запустить команду
vagrant up
В процессе развертывания в консоли vagrant запросит у вас sudo пароль для внесения строк в /etc/hosts. Дело в том, что чтобы избавить нас от ручного внесения строк туда vagrant-hostsupdater сделает это за нас при старте vagrant.
Какие домены добавлять он узнает из Vagrantfile настройки
config.hostsupdater.aliases = ["testhost1.local", "testhost2.local"]
По-умолчанию, как видно там 2 тестовых домена. Настройки виртуальных хостов Apache для них находятся в папке manifests/assets. Эти настройки грузятся в виртуальную машину по инструкциям puppet-файла manifests/provision.pp. В целом этот файл содержит набор инструкций, которые описывают что нужно установить и запустить, чтобы подготовить машину к работе. Здесь можно видеть установку Apache, MySQL, Memcached и php с расширениями.
Немного опишу настройки, которые вам понадобится поменять.
В Vagrantfile есть строка
config.vm.synced_folder "./sites", "/var/www",
:mount_options => ["dmode=777", "fmode=666"]
Здесь установлено, что локальная папка ./sites (как видно путь указан относительно папки, куда склонирован проект) монтируется к папке /var/www виртуальной машины. Сейчас в этой папке находится 2 тестовых сайта testhost1.local и testhost2.local.
Скорее всего вам захочется поменять путь ./sites на, скажем, ~/projects, или другую папку, в которой находсят ваши проекты.
Но для ваших сайтов необходимо создать конфигурационные файлы виртуальных хостов по примеру тех что уже есть в manifests/assets.
А также, загрузку этих файлов необходимо предусмотреть в manifests/provision.pp.
И, наконец, домены для этих сайтов необходимо добавить в Vagrantfile в настройку
config.hostsupdater.aliases = ["testhost1.local", "testhost2.local", ...]
После этого новый запуск необходимо vagrant необходимо произвести с опцией provision (чтобы снова выполнились инструкции из manifests/provision.pp):
vagrant up --provision
Полезные команды (выполняютися в папке с файлом Vagrant):
- vagrant up — поднятие машины Vagrant
- vagrant up –provision — то же, но с принудительным запуском секции provision из Vagrantfile
- vagrant ssh — подключиться по ssh к виртуальной машине
- vagrant halt — выключить виртуальную машину
- vagrant destroy — удалить виртуальную машину
Полезные ссылки:
- Использование Puppet в секции provision Vagrantfile
- Описание очередности выполнения инструкций puppet. Про зависимости ресурсов puppet