Pull to refresh

Создание сервера в Windows 7 с помощью Virtualbox

Привет, всем!
Хочу рассказать о том как я создавал веб-сервер для разработки и тестирования PHP приложений на локальной машине и как потом я его «вывел в свет».

Предыстория

В качестве собственного и профессионального развития я решил более тесно познакомится с Linux системой и, в частности, с настройкой веб-сервисов. До этого для разработки и тестирования PHP приложений я пользовался пакетом Denwer для Windows (apache+php+mysql), который вообщем-то со своей задачей справлялся, но не отражал (и не отражает) современной действительности — все-таки хостинг с Windows не так популярен.
Желание иметь полный доступ к серверу и нежелание платить за это удовольствие исключили из рассмотрения вариант покупки VPS. А потому я решил организовать Linux сервер на своем локальном компьютере.

Задача

  1. Поставить виртуальный Linux
  2. Настроить сетевое соединение гостевой ОС (Linux) и хост (Windows 7)
  3. Установить необходимые сервисы
  4. Сделать доступ к серверу из внешнего мира

Инвентарь

Windows 7 Home Basic
VirtualBox 4.0.8
Образ ubuntu-11.04-server-i386.iso

Приступим

Первый пункт, наверное самый простой. Virtualbox обладает простым интерфейсом и процесс создания виртуальной машины не вызывает трудностей. Для своего сервера я выбрал минимальные настройки производительности — (128Мб оперативной памяти, usb устройства отключены, никаких графических ускорений и прочих изысков — для сервера должно быть ок ), чтобы не слишком загружать основную систему.

Параметры сети
В меню Virtualbox в настройках сети для виртуальной машины в качестве типа подключения для первого сетевого адаптера указываем NAT. Тогда сеть в системе поднимется сама и машина будет иметь доступ к внешнему сетевому соединению Windows. Проблема в том, что при таких настройках, Linux система остается недоступной из основной системы.
Но решение есть! Указываем для второго сетевого адаптера значение «Виртуальный адаптер хоста». При установке Virtualbox в системе автоматически дополнительно создается сетевое подключение «VirtualBox Host-Only Network», которое нам пригодится в этом случае. Заходим в «Центр управления сетями и общим доступом» Windows. В настройках этого соединения указываем стандартные для данной задачи параметры: ip — 192.168.0.1, netmask — 255.255.255.0.
Осталось указать нужные параметры в виртуальной системе. Дописываем нужные строки в файл "/etc/network/interfaces"

iface eth1 inet static
address 192.168.0.2
netmask 255.255.255.0
auto eth1


перезапускаем сеть и можно попробовать пинговать Linux.

Таким образом: а) Linux имеет доступ в интернет через сетевое соединение Windows
б) Windows видит сервер и может к нему обращаться по ip — 192.168.0.2 (для удобства можно дописать в файл hosts какое-нибудь удобоваримое имя для этого ip, например «webserver»)

Конфигурация Linux

Что я хочу от своего сервера?
Во-первых, мне нужен веб-сервер с поддержкой PHP — возможность разрабатывать и тестировать приложения на локальной машине меня весьма радует
Во-вторых, мне нужна база данных — MySQL и/или PostgreSQL
В-третьих, мне очень удобно когда сохранив файл в IDE, можно тут же запустив скрипт в консоли или обновив страницу в браузере увидеть изменения. Таким образом, используемая мной IDE также должна иметь доступ к www каталогу на сервере. (чтобы не нужно было дополнительно копировать что-либо куда-нибудь)
В-четвертых, мой сервер должен быть доступен из внешней среды.

Поскольку моя статья не о настройке apache, тонкостях php.ini или бэкапе mysql, то первые три пункта я пропущу и описывать не буду. Скажу лишь, что все что сделал я (что не заработало сразу после установки) — это поправил вывод ошибок в php.ini (по умолчанию был полностью отключен вывод вообще всех ошибок), а также установил xdebug. Третий пункт решается установкой samba и небольшой модификацией файла конфигурации «etc/samba/smb.conf» в разделе Share Definitions, с целью разрешить пользователям доступ к своей директории в home (именно в эту папку помещен DocumentRoot сервера apache).
На данный момент уже можно получить доступ к серверу не только по ssh (open ssh server ставится по умолчанию) через putty, но и по samba — подключив пользовательскую директорию как сетевой диск в Windows.

А вот на последнем пункте я остановлюсь подробнее.

Доступ к серверу из внешнего мира

По сути, задача стоит в том, чтобы все запросы на 80 порт к моему компьютеру перенаправлять на 80 порт моего локального сервера. Такой вот небольшой прокси. Здесь на помощь приходит утилита netsh встроенная в Windows 7.

c:\>netsh
netsh>interface portproxy
netsh interface portproxy>add v4tov4 listenport=80 connectaddress=192.168.0.2 connectport=80 protocol=tcp


Теперь виртуальный веб-сервер доступен при обращении к моему компьютеру по внешнему ip-адресу.
Если для вас, как и для меня, белый внешний ip адрес является роскошью и проще говоря, его нет, то еще одна часть истории для вас!

Пробиваемся на свет

На самом деле я сейчас сделаю финт ушами, но возможно такое решение тоже кому-нибудь пригодится. Мой компьютер находится в локальной сети Новосибирского государственного университета и извне к нему не подобраться. Однако в нашей сети есть такой проект как campus.nsu.ru предоставляющий желающим простенький php хостинг, но что самое главное домен вида username.at.nsu.ru.
Таким образом, для завершения задачи необходимо при обращении на свой публичный домен каким-то образом перенаправлять пользователя по локальной сети на мой компьютер. Самый простой вариант — это создать в www директории на username.at.nsu.ru файлик index.php следующего содержания
<?php
echo file_get_contents("http://MY_COMPUTER_LOCAL_IP_ADDRESS/index.php?s=".urlencode(serialize($_SERVER)));
?>


Теперь при обращении на username.at.nsu.ru будет отдаваться сгенерированный моим linux сервером ответ. Значение $_SERVER передается с целью сохранить исходные значения запроса. Файл index.php на моем виртуальном сервере принимает и занимается дополнительной обработкой поступившего запроса.

На данный момент сервер работает на моем ноутбуке, доступ осуществляется через публичный домен shurik.at.nsu.ru

Все! Задача решена. Спасибо за внимание.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.