Пользователь
0,0
рейтинг
14 августа 2013 в 12:58

Разработка → Настраиваем LAMP для работы в Windows через VirtualBox из песочницы

PHP*
Здравствуйте.

Статья из разряда – шоб для себя було, но, думаю, будет интересна многим.

Началось с того, что потребовалось мне в PHP работать с xlsx-файлом, что, по сути, переименованный zip. И вот как-то сложилось, что Денвер мне не понравился с самого начала изучения PHP. Не то чтоб он мне совсем не нравился, но хоть я большую часть времени и win_user, но вот получилось так, что люблю понимать, как оно работает и иметь возможность самостоятельной настройки. Поэтому Apache+PHP+MySQL настраивал на Windows самостоятельно. Первое время все ставил из exe и msi файлов, потом как-то перешел на zip-пакеты и даже стал понимать, что я там прописываю в conf и ini файлах. Но zip под Windows работать не захотел, при этом прекрасно работая под Ubuntu. Поковырявшись в «этих ваших интернетах» стало понятно, что zip под Windows это очень муторно. Видимо, просто я еще не созрел для понимания действий, описанных в мануалах, либо использовать готовые классы на php, но, опять же, с ними тоже не все так гладко.

Вывод очевиден — ставим Ubuntu, поднимаем LAMP и вперед, с песнями. Опыт работы в ось отличной от Windows вроде бы есть, но, как всегда, есть какое-нибудь «но». И, в данном случае, это то, что мне очень «ндравиться» — Windows 8.

Две системы поставить вроде бы не сложно, но придется каждый раз перезагружаться. А я не люблю выключать компьютер, максимум — режим сна для ноутбука и гибернация для стационара.

Второй вариант — установить Ubuntu в VirtualBox, и при необходимости просто сворачивать окно с виртуалкой. Почти идеальный вариант. На стационаре с 8-ю ядрами, естественно, все отлично, а вот на ультрабуке с core i3 второго поколения и частотой 1300Мгц уже все не так прекрасно.

Да и Sublime Text под Windows мне нравится значительно больше, сугубо визуально.

Потому появился хитрый план:

1. Устанавливаем Ubuntu-server в VirtualBox
2. Настраиваем в samba папку с сайтом
3. В Windows подключаем папку из Ubuntu как сетевой диск

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

VirtualBox у вас уже должен быть установлен. Немного о конфигурации виртуалки которую я использую на выше озвученном ультрабуке:

  • процессор – 1 ядро
  • оперативка – выделяем от 512Mb и до… Исходя из возможностей вашей машинки, у меня 12Gb, потому я позволил забрать 2Gb
  • жесткий диск – я сделал динамическим на 80Gb
  • и для сети я выбрал следующее
    image


Для установки я выбрал Ubuntu-server 13.04. Установка стандартная, остановлюсь только на паре моментов:
image
диск сразу настроил как LVM. Если в дальнейшем потребуется увеличить его емкость, то данный вариант весьма удобен.

Чтобы потом не настраивать в ручную, сразу выберем нужные компоненты.
image

Вот мы и зашли в первый раз в систему. На первом экране нас интересует, какой IP получила система.
image
В моем случае это 192.168.31.111.

Теперь можно запускать какой ни будь SSH-клиент и подключиться к свеже установленной системе. Вся дальнейшая работа будет идти по SSH.

Первым делом проверим обновления:
sudo apt-get update
sudo apt-get upgrade

пока не заморачиваемся задаваемыми вопросами, отвечаем на все «да».

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

Получаем и устанавливаем ключ:
wget http://www.webmin.com/jcameron-key.asc
sudo apt-key add jcameron-key.asc

Добавляем источник:
sudo nano /etc/apt/sources.list 
deb http://download.webmin.com/download/repository sarge contrib (можно прописать первой строчкой)

Сохраняем <Ctrl+O и Enter> и выходим <Ctrl+X>.

Обновляемся:
sudo apt-get update

и устанавливаем:
sudo apt-get install webmin

Установка сама подтянет все зависимости, нам нужно только соглашаться.

Установка прошла успешно и теперь можно открыть наш сервер в windows-браузере. В адресной строке вводим 192.168.31.111:10000. Браузер перекинет нас на защищенное соединение (https).

image

image

image

image

И попадаем на страничку ввода логина/пароля.
image

Вернемся в SSH. Теперь можно установить ftp сервер, например pure-ftpd:
sudo apt-get install pure-ftpd

Теперь, если вы наберете в браузере 192.168.31.111, у вас должно открыться окно с запросом логина/пароля.
image

Вот и все ftp-сервером можно пользоваться.
image

Собственно, уже можно приступать к программированию на PHP, но закидывать каждый раз файлы через ftp не совсем удобно.

Поэтому предлагаю настроить samba-сервер и подключить папку из ubuntu к windows машине как обычный сетевой диск. Заходим в webmin, открываем Servers -> Samba Windows File Sharing.
image

Выбираем Windows Networking:
image

Заполняем поля:
  • Workgroup(Рабочая группа)
  • Server name – по этому имени компьютер будет виден в windows-сети
  • Security – это уровень безопасности, пока выставим на User level
    image

Сохраняемся.

Далее жмем на ссылку Create a new file share и создаем новый файловый ресурс.
image

Тут нужно заполнить следующие поля:
  • Share name – это будет имя сетевой папки
  • Directory to share – вписываем директорию которую нужно расшарить
  • Create with permissions – выставляем уровень прав, рекомендую пока не заморачиваться и выставить максимальный уровень (777)
  • Browseable – выставляем в yes, этим мы разрешаем показывать расшареный ресурс, иначе путь до папки нужно будет прописывать ручками (например \\samba\sites).
    image

Нажимаем кнопочку Create (создать).

Теперь в списке ресурсов выбираем наш, свеже созданный.
image

Выбираем Security and Access Control.
image

Параметр Writable – устанавливаем в yes, этим мы разрешили записывать файлы в нашу шару.
image
Сохраняем.

Возвращаемся в Servers->Samba Windows File Sharing и жмем Restart Samba Server.
image

Все, можем использовать наш сетевой диск.

Открываем проводник <Win + E>, выбираем сетевое подключение.
image

Выбираем наш сервер.


Выбираем расшареную папку.


Система попросит у нас логин/пароль. Введем их, и не забудем поставить галочку, чтобы система запомнила нас и больше не мучила подобными вопросами.


На этом могли бы и закончить, но в windows принято обращаться к дискам по имени, поэтому вернемся на шаг назад.


Теперь выберем сетевую папку правой кнопкой. Из появившегося списка выбираем «подключить сетевой диск».


По умолчанию система предложит первую свободную букву с конца алфавита, но вы можете выбрать любую понравившуюся, кроме тех, за которыми закреплены локальные диски (правда их в списке не будет). У меня это буква «А».


Таким образом, когда мы снова откроем проводник <Ctrl + E>, то увидим, что диск появился в начальном списке «мой компьютер» и у него есть буква.


Теперь наша папка будет доступна абсолютно для всех программ как обычный жесткий диск.

Замечательно. Все работает, но где же файлы нашего сайта? А вот это мы и исправим в финальной части нашей статьи.

Первым делом установим phpMyAdmin. Сделать это можно двумя способами:
  • первый вариант установить из репозитория
    sudo apt-get install phpmyadmin
    
  • и, второй вариант, скачать архив с официального сайта

Мы пойдем вторым путем и установим с оф. сайта. Для этого, пока мы еще находимся в windows, пройдем по ссылке www.phpmyadmin.net/home_page/index.php и скачаем самую свежую версию (4.0.4.1). Далее заходим на наш сетевой диск и распаковываем на него скачанный архив. Для удобства рекомендую переименовать папку во что-то покороче, например, phpmyadmin.

Настала пора вернуться в SSH:
sudo nano /etc/apache2/sites-available/phpmyadmin.dev

У нас открылся чистый лист в текстовом редакторе. Впишем в него следующее:
<VirtualHost *:80>
	ServerName phpmyadmin.dev
	ServerAlias www.phpmyadmin.dev
	DocumentRoot /home/%USER%/phpmyadmin
</VirtualHost>

где %USER% заменить на ваше имя пользователя, а phpmyadmin.dev – это имя нашего нового сайта, на котором, собственно, и будет работать phpmyadmin. Естественно, вы можете использовать любое другое имя для сайта.

Сохраняем файл, выходим и сообщаем apache о вновь созданном сайте:
sudo a2ensite phpmyadmin.dev

Ubuntu посказывает нам, что для применения конфигурации требуется перезагрузить apache.
sudo service apache2 reload

Теперь необходимо сообщить системе о новом сайте, для этого внесем изменения в файл hosts:
sudo nano /etc/hosts

В первой строчке открывшегося файла скорее всего увидите
127.0.0.1	localhost

Допишем в конец строки, через пробел, название нашего сайта. В итоге первая строка будет выглядеть примерно так:
127.0.0.1	localhost phpmyadmin.dev

Сохраняем, выходим.

Все. Сайт готов, но пока о нем знает только Ubuntu. Прежде чем перейти к настройке Windows, создадим еще один сайт, например test.dev.

Для этого я предлагаю создать каталог sites:
mkdir sites

а уже в нем test.dev:
mkdir sites/test.dev

Повторим действия для phpmyadmin (единственно, заменим phpmyadmin на test.dev):
sudo nano /etc/apache2/sites-available/test.dev

<VirtualHost *:80>
	ServerName test.dev
	ServerAlias www.test.dev
	DocumentRoot /home/%USER%/sites/test.dev
</VirtualHost>

Сохранить, выйти.

sudo a2ensite test.dev
sudo service apache2 reload
sudo nano /etc/hosts

127.0.0.1	localhost phpmyadmin.dev test.dev

Сохранить, выйти.

Для того, чтобы объяснить windows о существовании сайтов, достаточно их прописать в файл hosts (да, да в Windows тоже есть такой файл). Синтаксис Windows-файла абсолютно такой же, как и в Ubuntu. Найти его можно в папке Windows/System32/Drivers/etc. Открываем его в любом текстовом редакторе (скорее всего редактор необходимо будет открыть с правами администратора). И дописываем строчку:
192.168.31.111 phpmyadmin.dev test.dev

Вписать ее можно в любую часть файла (начало/конец – это уже по вашему усмотрению). Ну, и не забываем, что IP нужно вписывать такой, который присвоен Ubuntu.
Сохраняем, закрываем.
Осталось обновить DNS. Открываем командную строку от имени администратора и выполняем:
ipconfig /flushdns

Все. Теперь набираем в браузере только что добавленное имя сайта и наслаждаемся результатом.

Осталось только включить поддержку ЧПУ, для этого вернемся в панель webmin:

Откроем меню Servers -> Apache Webserver и переключимся на вкладку Global configuration:


Выбираем пункт Configure Apache Modules


И ставим галочку напротив rewrite

Жмем кнопку (внизу) Enable Selected Modules

Справа сверху жмем по очереди:
  • Apply Changes
  • Stop Apache

И снова запускаем – Start Apache.


И напоследок, небольшие хитрости для удобства работы:

Поскольку в наборе Denwer по умолчанию выставлено отображение ошибок PHP в браузер, а на этапе отладки это вполне себе нужная информация, предлагаю не заморачиваться с настройками php.ini, а просто добавить в файл .htaccess в корне сайта следующие строчки
php_flag display_errors on
php_flag display_startup_errors on

Таким же образом можно включать и другие параметры PHP.

Такой сервер отлично себя чувствует даже на слабеньком ультрабучном core i3, при этом абсолютно его не нагружая. На моем ультрабуке загрузка процессора поднимается до 5% при работе в phpmyadmin.

Информация собиралась по запросам в гугл и яндекс, но большая их часть вела на хабр.

UPD. Если кому пригодилась данная инструкция, прошу принять во внимание что со сборкой Ubuntu-server 13.10 есть некоторые проблемы. Чуть позже, когда/если разберусь добавлю еще один UPD.
Хорошкевич Руслан @Zezst
карма
1,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (18)

  • 0
    Vagrant — проще и, имхо, удобнее.

    Почти 2 недели назад была статья с аналогичным смыслом — Удобный веб сервер на Virtualbox из песочницы

    Почему вы выбрали установку самба-сервера на виртуалку, а не virtualbox shared folders?

    предлагаю не заморачиваться с настройками php.ini, а просто добавить в файл .htaccess в корне сайта следующие строчки

    После проделанного — «не заморачиваться» — это достаточно странное предложение :)
    • 0
      Virtualbox shared folders ето если вы будучи внутри виртуалки хотите иметь доступ к папкам хоста.
      Такой вариант не подходит так как очень часто надо банально создать симлинку.
  • 0
    Почему samba?
    У меня дома 4 компьютера объединены в домашнюю сеть. Один из них, с большим числом жестких дисков, работает постоянно, и его диски подключены на остальных компьютерах. При работе с файлами по ftp неудобство в том, что, например, sublime не умеет автосейвить на ftp.

    Virtualbox shared folders хранит файлы на компьютере-хосте. В моём случае все файлы хранятся внутри гостевой системы. Соответственно, могу в любой момент кинуть виртуальную машину на флешку, либо вообще поселить ее на флешку с USB 3.0. Еще вариант — всю папку с виртуалкой поселить в dropbox. Такой ленивый бэкап.
    • 0
      sublime не умеет автосейвить на ftp

      Sublime SFTP
      правда не уверен, что в тройке он работает
      • 0
        Я знаю про этот плагин, но в данном случае он несколько неудобен. У меня в кофиге sublime прописано, сохранять документ при потере фокуса. Порядок действий получается такой:

        — пишем код
        — <Alt + Tab> — минуя <Ctrl + S>, т.е. минус одно лишнее действие
        — — обновили страничку, увидели результат.
        • 0
          Тогда вам нужен какой-нибудь live edit.
          Одно время пользовался Browser Refresh
          • 0
            Спасибо. Попробую. От <F5> тоже неплохо бы избавиться.
  • 0
    Можно подключить виртуалку как диск по sshfs. Я использую Dokan. (http://dokan-dev.net/en/)
    В качестве ssh использую cygwin запущенный в ConEmu ( статья на хабре habrahabr.ru/post/164687/). Очень удобно с табами.
    • 0
      Вариант интересный, но я ставил себе целью сведение к минимуму действий при повторной установке. В моем случае можно прописать для виртуалки вторую сетевую карту и присвоить ей статический IP средствами VirualBox’а. Таким образом после перенесения образа:

      запускаем виртуалку,
      прописываем hosts в windows,
      подключаем сетевой диск

      На все — не более пяти минут.
  • 0
    sshfs замедляет время реакции, вроде бы доли секунды а всё же заметно.
  • +1
    Очередное изобретение велосипеда? Ознакомьтесь уже с возможностями современных версий PHP — php.net/manual/en/features.commandline.webserver.php. Под виндой тоже работает. И второе — если уже сделали якобы выделенный сервер для проекта (пусть и девелопмент-сервер), то стоило сразу подумать о системе контроля версий и деплое вашего приложения. Времена простого копирования файлов по FTP постепенно уходят, если говорить о чем-то более-менее серьезном на PHP.
    • 0
      Ну мне подумалось, что в начале статьи я достаточно прозрачно намекнул на то, что весь этот велосипед можно и нужно рассматривать как альтернативу Денвера. Я всего лишь хотел поделиться инструкцией еще одного варианта быстрого развертывания и комфортной работы. А в данной виртуалке можно уже всякого понастраивать. У меня дома, например, на такую виртуалку заведен белый IP и одной сетевухой она смотрит в инет, а второй в локалку. Плюс, подключил к ней реальные харды от своей файлопомойки и скриптиками на PHP заставляю потихоньку разгребать завалы.

      Я просто недавно стал джуниором и в конторке, в которой работал, в качестве локального сервера использовался Денвер + TortoiseSVN. На работу добираться час в электричке и чтоб не терять время на копирования, а зачастую еще не забыть и базу слить, вот придумал себе такой вариант.

      Виртуалка на буке. Воткнулся в локалку и сиди работай на большом мониторе и более мощном пк. Что дома, что на работе.
      • 0
        Я прекрасно понял мотив статьи. Но поверьте — не нужно это. Как минимум — из-за наличия Vagrant. Сейчас такое время, что практически на каждую задачу есть готовое решение уже. Не нужно изобретать велосипеды.

        «в качестве локального сервера использовался Денвер + TortoiseSVN» — wat? Я что-то не понял этой фразы.

        Небольшой совет — разрабатывать под веб (если только речь не идет про ASPX.NET) лучше всего в *nix-системах. Так что ставим Ubuntu/Debian/SuSE/etc, изучаем git и вперед. Станет намного проще жить :)
        • 0
          На машине локально стоял Денвер, а для контроля версий стоял TortoiseSVN, который в свою очередь был натравлен на папку сайта в Денвере.

          Небольшой совет — разрабатывать под веб (если только речь не идет про ASPX.NET) лучше всего в *nix-системах. Так что ставим Ubuntu/Debian/SuSE/etc, изучаем git и вперед. Станет намного проще жить :)


          Примерно об этом я и написал в посте.
          • 0
            Я забыл дописать — без виртуалок :) Без лишних телодвижений.

            И для контроля версий вы использовали SVN, TortoiseSVN всего лишь GUI к нему.
            • 0
              Да я нормально отношусь к *nix’ам, но комфортнее себя чувствую все же в windows. К сожалению многое из того, в *nix системах идет чуть ли не из коробки, в винде приходится (признаю это) очень кропотливо настраивать. И пост как раз о том, как я совместил приятное с полезным.

              GUI винды мне лично ближе к сердцу. И это сугубо мое личное отношение к ней, которое я никому не навязываю.
  • 0
    Пользуюсь LAMP в VitrualBox, только безо всяких Webmin'ов.
    • 0
      Webmin здесь приплетен только для удобства вин-юзера, к которым отношу и себя, а нам удобнее и приятнее такие действия мышкой делать. Собственно и сайты можно было через webmin нарезать. Да и вместо webmin можно было бы использовать любую другую панель управления хостингом.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.