Про Vagrant + готовый образ для работы с MODX

Хостинг для MODX. modhost.pro

На днях рассказали про очень интересный проект — 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) и немного доработал его для удобного запуска в нём сайтов.
  1. Скачиваем и устанавливаем свежий Vagrant
  2. Скачиваем и устанавливаем свежий VirtualBox
  3. Скачиваем мой настроенный образ Ubuntu 12.04.3
  4. Заходим в директорию, куда скачали образ и набираем там
    vagrant box add precise32 precise32.box
    Это добавляет образ к вам в систему.
  5. Теперь можно проинициализировать этот образ в любой своей директории, и в дальнейшем из неё вы будете запускать все нужные команды.
    vagrant init precise32
  6. Для работы с веб-сервером нужно пробросить порт 8080 в настройках
    config.vm.network :forwarded_port, guest: 80, host: 8080
  7. Теперь запускаем виртуальную машину
    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.

Установленные пакеты:
  1. Nginx 1.4.4
  2. Mysql 5.5.34
  3. Php 5.5.6 и php-apc
  4. Sendmail
  5. Midnight Commander
  6. htop
Если вам что-то непонятно по работе с сервером, пожалуйста, прочитайте старые заметки по настройке хостинга: первую и вторую, прежде чем задавать вопросы.

На всякий случай, еще раз ссылка на мой образ — yadi.sk/d/hd7MfwC6EHhUp.
Василий Наумкин
14 декабря 2013, 04:57
modx.pro
3
10 626
0

Комментарии: 25

Alex Vakhitov
14 декабря 2013, 10:10
0
Я немного по другому пользуюсь, каждому сайту свой box. Применительно разработке дополнения к modx будет выглядеть примерно так:
В папке с дополнением есть Vagrantfile и bootstrap.sh в котором прописаны все этапы создания правильного хостинга по твоей инструкции и опять же твоим скриптами ставит modx настраивает nginx и php-fpm, потом монтирует директорию /vagrant в директорию с modx, если нужно собирает пакет, потом можно выполнить sql запрос, чтобы прописать пространство имен. В конечном итоге работаем с локальными файлами, и можем спокойно тестировать работу в правильном окружении, скрипты пишутся один раз потом только задаем значения переменным и все работает. Плюс храним все в git и любой человек может собрать такое же окружение с использованием общедоступных box
    Василий Наумкин
    14 декабря 2013, 10:28
    0
    Ну вот я его собрал и выложил — можно использовать.

    Не знаю, зачем несколько образов, если при инициализации создается новая машина. Или тебе разные операционные системы нужны?
      Alex Vakhitov
      16 января 2014, 19:34
      0
      Жалко что при изменении комментария уведомления не приходят. (:

      Я с каждым проектом в git храню конфигурацию для vagrant (не сам бокс, а скрипты для создания окружения). И выходит что для каждого проекта всегда есть настроенная именно для него система только с нужными модулями и все это занимает минимум места. Удобно тем что если нужно чтото делать из ранее созданного то поднимается окружение в котором создавалось приложение. Ну и я монтирую локальную папку в окружение и работаю с исходным кодом локально в идеальном окружении
    Іван Клімчук
    14 декабря 2013, 19:50
    0
    Тоже на днях занялся изучением. Удивился даже синхронности :) Только для настройки самой коробки имеет смысл писать конфиги с использованием chef или puppet (поддерживается прямо из коробки в Vagrantfile). Chef сейчас у нас на работе конфиги по виртуалкам раскладывает — штука крайне незаменимая, особенно для синхронизации окружения на production и на dev-машинах.
    Ну и если выложить на доступный url коробку с образом, то достаточно давать просто сам файл vagrant — коробка сама скачается, установится и запустится, если прописаны правила для puppet или chef — то еще и пакеты все установятся, можно написать рецепты и накатить миграции или сделать чекаут проекта из git например.
      Alex Vakhitov
      15 декабря 2013, 10:45
      0
      Я еще использую Fabric для абсолютной автоматизации всех рутинных действий. Выполнил в консоли одну команду и любые действия делаются сами по себе. Типо прогнать тесты, или создать новую ветку, или задеплоить приложение с миграциями доустановкой софта или зависимостей
      Andrei Kilin
      16 января 2014, 13:59
      0
      Как правильно это хозяйство переносить с рабочего компа на домашний, например, и обратно?
      Alex Vakhitov
      17 января 2014, 12:53
      0
      Кстати, теперь pma больше не нужен для визуализации данных jetbrains встроила клиент в свои ide. Уже опробывал, очень круто, удобно и все под рукой

        Василий Наумкин
        17 января 2014, 13:24
        0
        В версии 7.0 нету, обновил до 7.1 — появилось.

        Нужно
        1. Изменить адрес для работы в /etc/my.cnf с 127.0.0.1 на 0.0.0.0
        2. Пробросить порт 3306 на 33060 в Vagrantfile
        3. Указать юзеру root через phpMyAdmin возможность заходить с любых адресов и все нужные привелегии
        4. Сделать vagrant reload и подключиться согласно инструкции


        Всё работает замечательно, спасибо за новость!

        P.S. При настройке БД можно выбрать scope: project или ide. То есть, эта настроенная БД будет доступна только одному проекту, или всем.
          Alex Vakhitov
          17 января 2014, 13:34
          0
          Ага, все верно. Очень удобно, чтобы список с подключениями не засорять
            Василий Наумкин
            17 января 2014, 13:55
            0
            А еще синтаксис markdown файлов стал понимать, что весьма актуально в свете написания документации!
              Alex Vakhitov
              17 января 2014, 14:01
              0
              Он и раньше умел, был и есть плагин в репозитории.



              Там вообще много добра такого, можно прям конвеер для разработки сделать

              P.S. Скрин с PyCharm, но сильных отличий с phpStorm нет
                Василий Наумкин
                17 января 2014, 14:11
                0
                Раньше не предлагал, и когда я пытался найти — не смог. Фиг знает, может плохо пытался.

                После обновления сам предложил, сам поставил и всё работает.
            Сергей Шлоков
            17 января 2014, 18:15
            0
            Жаль, только для локалки
              Василий Наумкин
              17 января 2014, 18:45
              0
              На удалённом сервере ни в коем случае нельзя держать открытым порт MySql, да еще и с доступом для root.

              Но если ты камикдзе — то можно, настройка ничем не отличается.
                Сергей Шлоков
                17 января 2014, 18:55
                0
                Поэтому и жаль. Фича удобная, но на локалке ни работаю.
                  Alex Vakhitov
                  17 января 2014, 19:49
                  0
                  Можно же просто белые и черные списки ip для доступа держать, или рандомные данные для доступа, к примеру при использовании амазона адрес для бд имеет такой вид servicedb.jdskkfjjkclskd.ap-southeast-1.rds.amazonaws.com. Ведь очень частое явление что бд на отдельном сервере
                    Clean
                    18 января 2014, 21:59
                    0
                    Куда надежнее и логичнее использовать SSH авторизацию клиента для БД,
                    плюсы на лицо- после авторизации ты по сути обращаешься к базе как localhost,
                    SSH так и так открыт.

                    Например Toad for Mysql умеет такую штуку делать.сам пользую.
                      Alex Vakhitov
                      19 января 2014, 10:38
                      0
                      Мой комментарий относится к случаю если бд находится на отдельном сервере от самого сайта (нод сайт), и конектится серверу бд для получения информации. В таком случае сервер бд чаще всего открыт миру, и это не смертельно. Есть много способов как оставить базу открытой из вне, но при этом защищенной
            TITAN-UZ
            05 мая 2015, 07:33
            0
            А как работать без :8080?
              Василий Наумкин
              05 мая 2015, 08:16
              +1
              Примерно так — freetonik.com/blog/all/vagrant/

              Не уверен, что эта инструкция сейчас работает, но принцип должен быть ясен: нужно сделать форвардинг с порта 8080 на 80.
                TITAN-UZ
                06 мая 2015, 08:00
                0
                Сменил
                config.vm.network :forwarded_port, host: 8080, guest: 80
                На
                config.vm.network :forwarded_port, host: 80, guest: 80
                Заработала без 8080 ато жутко надоел всегда прописывать 8080 конце урл.

                Василий вы на HHVM не тестировали modx
              Dronowar
              27 апреля 2016, 20:54
              0
              Похоже что это самый правильное окружение для modx ) Но можно ли отдельно выложить конфиг vagrant и файлы provision? Качать целый образ ununtu 12 уже не актуально.
                Василий Наумкин
                27 апреля 2016, 20:57
                0
                Неа, давно уже этим не пользуюсь.

                Для разработки Parallels Desktop, для работы — modhost.pro
                  Николай Загумённов
                  25 июня 2016, 12:59
                  0
                  Не подскажете как можно настроить автоподдомены на виртуальной машине(Parallels Desktop)?
                  В ней стоит ubuntu настроенная по инструкции.
                  Настроил bind9 и внутри самой ubuntu поддомены работают, а с основного компьютера где стоит Parallels Desktop нет. Только основной домен работает domain.local, прописанный в hosts.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                25