Про Vagrant + готовый образ для работы с MODX
На днях рассказали про очень интересный проект — Vagrant
Vagrant (англ. бродяга) — это обёртка для удобного управления виртуальной машиной. Он работает с собственными образами (*.box), для которых предъявляются определённые требования.
Если коротко: то вы скачиваете готовый образ, инициализируете и запускаете. Это позволяет вам запустить новый виртуальный сервер секунд за 30.
При каждой инициализации создаётся отдельная виртуальная машина в VirtualBox и вы не меняете исходный образ. То есть, вы можете запускать сколько угодно виртуальных машин, делать с ними что угодно, потом удалять и создавать новые.
Исходный образ, как бы, распаковывается и создаётся копия на вашей машине.
Самое приятное, что текущую машину можно запаковать обратно в новый box, скопировать на флешку и подарить другу, или еще кому-то. Он так же запустит её у себя в Vagrant и сразу сможет работать.
Команды
Все команды выполняются из той директории, где вы инициализировали свою копию. У вас там должен лежать файл в настройками — Vagrantfie.Инициализация новой копии и запуск:
vagrant init precise32 vagrant upПерезагрузка
vagrant reloadУдаление виртуальной машины — то есть, инициализации, со всеми изменениями этой копии
vagrant destroyВыключение машины
vagrant haltВключение, понятно
vagrant upЗапаковка текущего состояния
vagrant packageВсе остальные команды можно увидеть, набрав в консоли vagrant -h
bezumkin-mbp:~ bezumkin$ vagrant -h Usage: vagrant [-v] [-h] command [<args>] -v, --version Print the version and exit. -h, --help Print this help. Available subcommands: box manages boxes: installation, removal, etc. destroy stops and deletes all traces of the vagrant machine halt stops the vagrant machine help shows the help for a subcommand init initializes a new Vagrant environment by creating a Vagrantfile package packages a running vagrant environment into a box plugin manages plugins: install, uninstall, update, etc. provision provisions the vagrant machine reload restarts vagrant machine, loads new Vagrantfile configuration resume resume a suspended vagrant machine ssh connects to machine via SSH ssh-config outputs OpenSSH valid configuration to connect to the machine status outputs status of the vagrant machine suspend suspends the machine up starts and provisions the vagrant environmentОчень просто и удобно.
Настройки
Все настройки каждой конкретной копии хранятся в одном файле — Vagrantfile.Он очень подробно описан, как внутри самого файла, так и на сайте.
По умолчанию Vagrant подключает директорию, в которой был проинициализирован в директорию /vagrant запущенного сервера. То есть, сразу после запуска вы можете закидывать на сервер свои файлы.
Если вы хотите добавить еще директорий с вашей машины в сервер, нужно списать в конфиг (пример там есть, закомментированный)
config.vm.synced_folder "/Users/bezumkin/mydir", "/media/mydir/"Также на очень важно суметь обратиться на веб-сервер, который запущен в машине. Для этого нужно пробросить порт 8080 вашего компа на порт 80 запущенного образа.
config.vm.network :forwarded_port, guest: 80, host: 8080Таким образом, вы легко сможете подключить любые директории и пробросить порты. После изменения Vagrantfile нужно сделать
vagrant reloadдля применения изменений.
Установка готового образа
Не долго думая, я скачал официальный образ Ubuntu 12.04.3 (precise) и немного доработал его для удобного запуска в нём сайтов.- Скачиваем и устанавливаем свежий Vagrant
- Скачиваем и устанавливаем свежий VirtualBox
- Скачиваем мой настроенный образ Ubuntu 12.04.3
- Заходим в директорию, куда скачали образ и набираем там
vagrant box add precise32 precise32.box
Это добавляет образ к вам в систему.
- Теперь можно проинициализировать этот образ в любой своей директории, и в дальнейшем из неё вы будете запускать все нужные команды.
vagrant init precise32
- Для работы с веб-сервером нужно пробросить порт 8080 в настройках
config.vm.network :forwarded_port, guest: 80, host: 8080
- Теперь запускаем виртуальную машину
vagrant up
vagrant sshДальше можно пользоваться командами через sudo:
- sudo site_add — Добавление ного сайта на последней версии MODX.
- sudo site_prepare — Подготовка окружения для сайта на другом движке. Создаётся все нужно, дальше просто загружаете файлы и устанавливаете.
- sudo site_remove — Удаления сайта целиком, вместе с БД и юзером
- sudo site_upgrade — Обновление сайта на MODX до последней официальной версии
У вас натуральные сайты, у каждого свою юзер, своя база данных и свой доступ по SFTP. Вы можете подключаться на сайт через Filezilla или PhpStorm, используя порт 2222.
Дефолтный сайт открывается по адресу 127.0.0.1:8080.
Для того, чтобы вы могли использовать несколько сайтов на вашей машине, их нужно добавить в hosts вашего компьютера (не образа):
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost pma.localhostВ моём образе уже установлен PhpMyAdmin, логин root, пароль vagrant, заходить на pma.localhost:8080/ сразу после изменения файла hosts.
Установленные пакеты:
- Nginx 1.4.4
- Mysql 5.5.34
- Php 5.5.6 и php-apc
- Sendmail
- Midnight Commander
- htop
На всякий случай, еще раз ссылка на мой образ — yadi.sk/d/hd7MfwC6EHhUp.
Комментарии: 25
Я немного по другому пользуюсь, каждому сайту свой box. Применительно разработке дополнения к modx будет выглядеть примерно так:
В папке с дополнением есть Vagrantfile и bootstrap.sh в котором прописаны все этапы создания правильного хостинга по твоей инструкции и опять же твоим скриптами ставит modx настраивает nginx и php-fpm, потом монтирует директорию /vagrant в директорию с modx, если нужно собирает пакет, потом можно выполнить sql запрос, чтобы прописать пространство имен. В конечном итоге работаем с локальными файлами, и можем спокойно тестировать работу в правильном окружении, скрипты пишутся один раз потом только задаем значения переменным и все работает. Плюс храним все в git и любой человек может собрать такое же окружение с использованием общедоступных box
В папке с дополнением есть Vagrantfile и bootstrap.sh в котором прописаны все этапы создания правильного хостинга по твоей инструкции и опять же твоим скриптами ставит modx настраивает nginx и php-fpm, потом монтирует директорию /vagrant в директорию с modx, если нужно собирает пакет, потом можно выполнить sql запрос, чтобы прописать пространство имен. В конечном итоге работаем с локальными файлами, и можем спокойно тестировать работу в правильном окружении, скрипты пишутся один раз потом только задаем значения переменным и все работает. Плюс храним все в git и любой человек может собрать такое же окружение с использованием общедоступных box
Ну вот я его собрал и выложил — можно использовать.
Не знаю, зачем несколько образов, если при инициализации создается новая машина. Или тебе разные операционные системы нужны?
Не знаю, зачем несколько образов, если при инициализации создается новая машина. Или тебе разные операционные системы нужны?
Жалко что при изменении комментария уведомления не приходят. (:
Я с каждым проектом в git храню конфигурацию для vagrant (не сам бокс, а скрипты для создания окружения). И выходит что для каждого проекта всегда есть настроенная именно для него система только с нужными модулями и все это занимает минимум места. Удобно тем что если нужно чтото делать из ранее созданного то поднимается окружение в котором создавалось приложение. Ну и я монтирую локальную папку в окружение и работаю с исходным кодом локально в идеальном окружении
Я с каждым проектом в git храню конфигурацию для vagrant (не сам бокс, а скрипты для создания окружения). И выходит что для каждого проекта всегда есть настроенная именно для него система только с нужными модулями и все это занимает минимум места. Удобно тем что если нужно чтото делать из ранее созданного то поднимается окружение в котором создавалось приложение. Ну и я монтирую локальную папку в окружение и работаю с исходным кодом локально в идеальном окружении
Тоже на днях занялся изучением. Удивился даже синхронности :) Только для настройки самой коробки имеет смысл писать конфиги с использованием chef или puppet (поддерживается прямо из коробки в Vagrantfile). Chef сейчас у нас на работе конфиги по виртуалкам раскладывает — штука крайне незаменимая, особенно для синхронизации окружения на production и на dev-машинах.
Ну и если выложить на доступный url коробку с образом, то достаточно давать просто сам файл vagrant — коробка сама скачается, установится и запустится, если прописаны правила для puppet или chef — то еще и пакеты все установятся, можно написать рецепты и накатить миграции или сделать чекаут проекта из git например.
Ну и если выложить на доступный url коробку с образом, то достаточно давать просто сам файл vagrant — коробка сама скачается, установится и запустится, если прописаны правила для puppet или chef — то еще и пакеты все установятся, можно написать рецепты и накатить миграции или сделать чекаут проекта из git например.
Я еще использую Fabric для абсолютной автоматизации всех рутинных действий. Выполнил в консоли одну команду и любые действия делаются сами по себе. Типо прогнать тесты, или создать новую ветку, или задеплоить приложение с миграциями доустановкой софта или зависимостей
Как правильно это хозяйство переносить с рабочего компа на домашний, например, и обратно?
Можно просто всё держать на флешке и ходить с ней туда-сюда.
Кстати, теперь pma больше не нужен для визуализации данных jetbrains встроила клиент в свои ide. Уже опробывал, очень круто, удобно и все под рукой
- Изменить адрес для работы в /etc/my.cnf с 127.0.0.1 на 0.0.0.0
- Пробросить порт 3306 на 33060 в Vagrantfile
- Указать юзеру root через phpMyAdmin возможность заходить с любых адресов и все нужные привелегии
- Сделать vagrant reload и подключиться согласно инструкции
В версии 7.0 нету, обновил до 7.1 — появилось.
Нужно
Всё работает замечательно, спасибо за новость!
P.S. При настройке БД можно выбрать scope: project или ide. То есть, эта настроенная БД будет доступна только одному проекту, или всем.
Нужно
Всё работает замечательно, спасибо за новость!
P.S. При настройке БД можно выбрать scope: project или ide. То есть, эта настроенная БД будет доступна только одному проекту, или всем.
Ага, все верно. Очень удобно, чтобы список с подключениями не засорять
А еще синтаксис markdown файлов стал понимать, что весьма актуально в свете написания документации!
Раньше не предлагал, и когда я пытался найти — не смог. Фиг знает, может плохо пытался.
После обновления сам предложил, сам поставил и всё работает.
После обновления сам предложил, сам поставил и всё работает.
Жаль, только для локалки
На удалённом сервере ни в коем случае нельзя держать открытым порт MySql, да еще и с доступом для root.
Но если ты камикдзе — то можно, настройка ничем не отличается.
Но если ты камикдзе — то можно, настройка ничем не отличается.
Поэтому и жаль. Фича удобная, но на локалке ни работаю.
Можно же просто белые и черные списки ip для доступа держать, или рандомные данные для доступа, к примеру при использовании амазона адрес для бд имеет такой вид servicedb.jdskkfjjkclskd.ap-southeast-1.rds.amazonaws.com. Ведь очень частое явление что бд на отдельном сервере
Куда надежнее и логичнее использовать SSH авторизацию клиента для БД,
плюсы на лицо- после авторизации ты по сути обращаешься к базе как localhost,
SSH так и так открыт.
Например Toad for Mysql умеет такую штуку делать.сам пользую.
плюсы на лицо- после авторизации ты по сути обращаешься к базе как localhost,
SSH так и так открыт.
Например Toad for Mysql умеет такую штуку делать.сам пользую.
Мой комментарий относится к случаю если бд находится на отдельном сервере от самого сайта (нод сайт), и конектится серверу бд для получения информации. В таком случае сервер бд чаще всего открыт миру, и это не смертельно. Есть много способов как оставить базу открытой из вне, но при этом защищенной
А как работать без :8080?
Примерно так — freetonik.com/blog/all/vagrant/
Не уверен, что эта инструкция сейчас работает, но принцип должен быть ясен: нужно сделать форвардинг с порта 8080 на 80.
Не уверен, что эта инструкция сейчас работает, но принцип должен быть ясен: нужно сделать форвардинг с порта 8080 на 80.
Сменил
Василий вы на HHVM не тестировали modx
config.vm.network :forwarded_port, host: 8080, guest: 80
На config.vm.network :forwarded_port, host: 80, guest: 80
Заработала без 8080 ато жутко надоел всегда прописывать 8080 конце урл.Василий вы на HHVM не тестировали modx
Похоже что это самый правильное окружение для modx ) Но можно ли отдельно выложить конфиг vagrant и файлы provision? Качать целый образ ununtu 12 уже не актуально.
Не подскажете как можно настроить автоподдомены на виртуальной машине(Parallels Desktop)?
В ней стоит ubuntu настроенная по инструкции.
Настроил bind9 и внутри самой ubuntu поддомены работают, а с основного компьютера где стоит Parallels Desktop нет. Только основной домен работает domain.local, прописанный в hosts.
В ней стоит ubuntu настроенная по инструкции.
Настроил bind9 и внутри самой ubuntu поддомены работают, а с основного компьютера где стоит Parallels Desktop нет. Только основной домен работает domain.local, прописанный в hosts.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.