VirtualBox: Делаем LAMP-сервер в гостевой Ubuntu Server
Для работы, да и просто для экспериментов, часто требуется отдельный сервер/VDS или же просто хостинг с Linux/Apache/MySQL/PHP, но аренда стоит определенных тугриков, а бесплатные решения в сети имеют множество ограничений, поэтому имеет смысл соорудить свой собственный виртуальный LAMP-сервер на домашнем/рабочем компьютере.
В качестве виртуальной машины (ВМ) будет использоваться VirtualBox, операционной системой хоста (т.е. нашего компьютера) у нас уже стоит десктопная Убунта, а в качестве гостевой системы возьмём Ubuntu Server (на момент написания поста — Ubuntu Server 10.04 LTS), которая хороша тем, что в ней всё лишнее, для сервера, выпилено.
Если операционной системой хоста является Windows, то эта статья так же будет полезна, ведь основная настройка производится именно на гостевой системе.
Программа действий следующая:
• Создать и настроить виртуальную машину, в которой будет работать наша гостевая система
• Установить Ubuntu Server, как гостевую систему
• Настроить в гостевой системе Apache/MySQL/PHP/PhpMyAdmin
• Настроить общий доступ к файлам гостевой системы из хоста
И так начнём:
1) Качаем свежий образ Ubuntu Server
2) Подключаем «родной» репозиторий VirtualBox-а (раздел «Debian-based Linux distributions»), и ставим сам пакет. Подключение репозитория нужно, чтобы иметь самую свежую версию виртуальной машины, свежее, чем в репозиторий Ubuntu.
Думаю, с подключением репозитория и установкой пакета, ни у кого не возникнет проблем. На Windows этот шаг, конечно, пропускается.
3) В VirtualBox, через кнопку «Создать», cоздаём виртуальную машину, в которой будет вертеться Ubuntu Server, со следующими параметрами (которые используются у меня):
Имя: LAMPUbuntu (для примера)
Операционная система: Linux
Тип ОС: Ubuntu
Размер видеопамяти: 12 МБ (по умолчанию)
Размер основной памяти: 512 МБ (потом можно изменить по своим потребностям)
Тип образа жесткого диска: Динамически расширяющийся образ (образ будет меньше занимать места)
Расположение: LAMPUbuntu (лучше оставить, как есть)
Размер: 2 Гб (размера виртуального жесткого диска)
4) После создания виртуальной машины, нужно донастроить её.
В свойстве «Система» > «Материнская плата» убираем дискету из очереди загрузки и обязательно ставим первой CD/DVD-ROM.
Так же снимаем галку в «Аудио» > «Включить аудио», зачем оно на сервере? ![]()
В свойствах «Носители» > «IDE контроллер» и в «SATA контроллер» проверяем, стоят ли галочки «Кеширование операций ввода/вывода», если нет — ставим.
И наконец, в свойстве «Сеть» нашей виртуальной машины ставим:
• Тип подключения «Сетевой мост»
• Имя адаптера (по умолчанию «eth0″)
• Тип сетевого адаптера в «PCnet-FAST III (Am79C973) (в подразделе «Дополнительно»)
• Галку «Кабель подключен».
Хочу сразу сказать, что при типе подключения «Сетевой мост» ваша гостевая система будет «видна» в сети, как отдельный компьютер, и с ней возможна инициация соединения не только с хоста, но и из сети.
Так же замечу, что в будущем, уже при настроенной гостевой системе, МАС-адрес её сетевого адаптера желательно не трогать (в сетевых настройках виртуальной машины), т.к. каждый раз, после смены МАС-а, гостевая система будет считать, что её сетевую карту поменяли на другую и, соответственно, присвоит сетевому интерфейсу новое имя — на единицу больше предыдущего (например, с прежним MAC-ом было eth0 — с новым стало eth1 и т.д.).
А это чревато тем, что сеть в гостевой ОС перестанет работать, ведь в её настройках указан старый сетевой интерфейс, и поэтому, чтобы сеть продолжала нормально функционировать после смены MAC-а, так же придётся исправить имя сетевого адаптера на новое в /etc/network/interfaces, либо чистить содержимое /etc/udev/rules.d/70-persistent-net.rules (там лежат соответствия MAC-ов сетевых карт и имён сетевых интерфейсов).
5) Скачанный образ iso, с дистрибутивом Ubuntu Server, надо добавить в число доступных образов для виртуальных машин, через меню «Файл» > «Менеджер виртуальных носителей» > «Образы CD/DVD».
Затем, в свойствах «Носители» нашей виртуальной машины, в «IDE контроллер» > «Пусто» > «Привод» нужно указать наш образ Убунты , либо реальный привод CD/DVD-привод с диском нашего дистрибутива.
6) Установка Ubuntu Server не должна вызвать проблем, но на всякий случай пройдемся по основным моментам:
Исключительно для статьи, в качестве всех логинов и паролей будем использовать слово developer (Привет Стивену Балмеру
)
На практике, из-за соображений безопасности, этого делать НЕ РЕКОМЕНДУЕТСЯ!
• При настройке сети указываем имя компьютера — development (для примера)
• Вариант разметки диска на Ваше усмотрение, но если не уверены, то используйте вариант «Авто — использовать весь диск»
• Полное имя пользователя, учетной записи и пароль — developer
• Вид обновления — на Ваш вкус, но лучше держать систему актуальной через «Устанавливать обновления безопасности автоматически»
• При выборе программного обеспечения выбираем «LAMP server» (это набор Apache+MySQL+PHP) и «OpenSSH server».
• Задаём пароль root-а для MySQL — всё тот же developer ![]()
• Соглашаемся с установкой Grub-а и перезагрузкой
• После загрузки гостевой системы, отключаем её через меню «Машина» > «Выключить через ACPI» либо после логина отключаем через команду:
sudo shutdown -h 0
7) Теперь осталось отключить загрузку с CD/DVD-ROM. Это делается через свойства BM «Носители» > «IDE контроллер» > «ubuntu-10.04-server-i386.iso» (название вашего образа) > «Привод» > устанавливаем в «Пусто».
Запускаем наш виртуальный Ubuntu Server, логинимся и запускаем обновление пакетов:
sudo apt-get update
sudo apt-get upgrade
9) Теперь нужно настроить сеть на гостевой Ubuntu Server. По умолчанию, сетевой интерфейс гостевой системы настроен получать IP через DHCP, но нам нужен статический IP-адрес. Поэтому, на Ubuntu Server, под рутом запускаем mc (или любимый редактор) и идём править /etc/network/interfaces, в котором вместо строк:
auto eth0
iface eth0 inet dhcp
пишем следующее:
auto eth0
iface eth0 inet static
# статический IP нашего виртуального сервера
address 192.168.1.50
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
# и гейт (например, LAN-модем), откуда будем брать инет
gateway 192.168.1.1
теперь перезапустим сетевые службы гостевой системы с новыми настройками:
sudo /etc/init.d/networking restart
и проверим их у нашего адаптера eth0:
ifconfig -a
Далее, с нашей системы-хоста проверим пинг до гостевой системы Ubuntu Server (с адресом 192.168.1.50) и пинг из гостевой системы до любого домена в интернете. Если пинги идут нормально, то сеть функционирует нормально.
10) Теперь, займемся Apache-м.
Первым делом, проверим работу веб-сервера Apache на гостевой системе, набрав в адресной строке браузера IP-адрес гостевой системы — http://192.168.1.50/. Апач поприветствует нас следующим сообщением:
It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.
Теперь, когда видно, что Апач работает
, настроим на нём первый виртуальный хост, и назовем этот домен, например, dev.i
Первым делом, на хосте, отдельной строкой добавим в файл /etc/hosts запись о новом домене (на Windows-хостах в %SystemRoot%\system32\drivers\etc\hosts):
192.169.1.50 dev.i www.dev.i
Тем самым, с хоста можно будет обращаться к гостевой системе не только по IP, но и имени конкретного домена.
Далее, в гостевой системе, под рутом, добавляем в /etc/apache2/httpd.conf конфигурацию нового виртуального хоста:
NameVirtualHost 192.168.1.50:80 <VirtualHost 192.168.1.50:80> ServerAdmin webmaster@localhost ServerName dev.i ServerAlias dev.i www.dev.i DocumentRoot /home/developer/www/dev.i/htdocs/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /home/developer/www/dev.i/htdocs/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /home/developer/www/dev.i/cgi-bin/ <Directory "/home/developer/www/dev.i/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /home/developer/www/dev.i/logs/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /home/developer/www/dev.i/logs/access.log combined </VirtualHost>
При чём, директива NameVirtualHost описывается лишь один раз в начале файла, а конструкция <VirtualHost 192.168.1.50:80>…</VirtualHost> для каждого домена создается своя.
Затем, в гостевой системе, в домашней папке пользователя developer создадим структуру директорий для нашего домена:
mkdir /home/developer/www
mkdir /home/developer/www/dev.i
mkdir /home/developer/www/dev.i/htdocs
mkdir /home/developer/www/dev.i/logs
mkdir /home/developer/www/dev.i/cgi-bin
Как видно по структуре папок и настройкам в конфигурации виртуального хоста (выше) — логи доступа и ошибок будут лежать в папке logs и у каждого виртуального хоста они будут свои.
После создания структуры папок, в /home/developer/www/dev.i/htdocs для нашего сайта создадим индексный файл index.php:
<?php phpinfo();?>
Осталось перезапустить Apache для вступления в силу новых настроек, что мы и сделаем:
sudo /etc/init.d/apache2 restart
Чтобы проверить работу PHP на гостевой системе, с Ununtu-хоста, в браузере, откроем адрес http://dev.i/ и получим информацию выданную командой phpinfo().
11) Наконец, очередь дошла и до phpmyadmin.
Ставим этот чудесную утилиту для администрирования MySQL:
sudo apt-get install phpmyadmin
Во время установки phpmyadmin нас попросят выбрать веб-сервер, который мы используем, указываем, конечно, Apache2.
Затем соглашаемся установить и настроить базу данных для работы phpmyadmin, для чего вводим пароль административного пользователя MySQL (root-a), который мы уже задали на стадии установки системы (это слово developer) и пароль для соединения phpmyadmin-а к MySQL (опять таки developer
). Второй пароль нужен затем, чтобы phpmyadmin, который в процессе установки создает свою служебную базу и своего одноименного пользователя, мог подключаться к своей рабочей MySQL-базе.
Если установка phpmyadmin прошла с ошибками, то его можно переустановить следующим образом (с удалением конфигурационных файлов):
sudo apt-get remove phpmyadmin
sudo dpkg -P phpmyadmin
sudo apt-get install phpmyadmin
Заходим через браузер с хоста по адресу http://192.168.1.50/phpmyadmin/ или по http://dev.i/phpmyadmin/ и радуемся жизни.
Теперь несколько слов о «Shared Folders», т.е. об общих папках. Владельцам хостов с Windows можно пропустить следующие абзацы про SSHFS и смело использовать «Shared Folders».
Честно говоря, реализация шар у VirtualBox мне никогда не нравилась, поэтому под Linux-хостом мы пойдем другим путём.
Как Вы помните, я рекомендовал, во время установки гостевой Ubuntu Server, поставить ещё и OpenSSH server. Он нам понадобится для подключения и удаленного управления файлами гостевой системы по протоколу SSH. Т.е. можно будет примонтировать удаленную папку гостевой системы на файловой системе хоста и работать с ними, как с локальными файлами.
Для этого, в системе компьютера-хоста, нужно установить пакет SSHFS:
sudo apt-get install sshfs
и для понимания прочитать пару абзацев здесь: SSHFS — Secure SHell FileSystem.
Монтирование папки гостевой системы со виртуальными хостами к файловой системе хоста будет выглядеть так:
sshfs developer@192.168.1.50:/home/developer/www/ /путь_на_хосте/куда_монтировать -p 22
где -p 22 — это порт OpenSSH в гостевой системе (который можно поменять в /etc/ssh/sshd_config, например на 2022, дабы запутать посторонних
)
а размонтировать можно так:
fusermount -u /путь_на_хосте/куда_смонтировано/
Команды монтирования и размонтирования лучше засунуть в два скрипта и держать под рукой, правда размонтирование требуется редко, ведь после выключения гостевой системы смонтированная папка отваливается сама.
Вот как-то так…
Кстати, вовсе необязательно использовать «Shared Folders» или монтирование папок, если конечно Вам не нужна какая либо IDE — можно работать прямо в консоли гостевой системы.
Для этого, в гостевой нужно всего лишь изменить разрешение в консоли на большее (через Grub2, правкой /etc/default/grub — подробнее можно найти в интернете), поставить любимый консольный редактор или Midnight Commander и работать не выходя во вне


17 Янв 2011 в 09:54
а hamachi кто нить ставил на виртуальной убунту ?
20 Ноя 2011 в 04:42
Отличный пост! Ставил на Win 7×64 (хост) Ubuntu 11.10-server-amd64 (гостевая). Все получилось. Большое спасибо!
22 Ноя 2011 в 04:06
Отличная статья. Подробная и с разъяснениями почему делается именно так, а не иначе. Спасибо за качественную работу
22 Ноя 2011 в 17:02
Спасибо
12 Янв 2012 в 22:05
Это схема будет пахать если нет постоянного IP адреса и подключение к сети будет производится через модем ?
Пожалуйста объясните подробней
13 Янв 2012 в 01:40
Хочу уточнить — нет постоянного IP адреса у хоста-компьютера в локалке или же при выходе в инет?
Поясню — хостовый компьютер и работающая на нём гостевая виртуальная система должны иметь именно СТАТИЧЕСКИЕ ЛОКАЛЬНЫЕ IP адреса из одного диапазона, т.е. они должны находиться в одной локальной сети, причем не важно, есть ли локальная сеть физически — это нужно для виртуальной локальной сети между хостом и гостевой системой.
Что, впрочем, не мешает иметь сетевым картам хоста и гостевой системы еще тучу других IP , в том числе и динамических.
А наличие или отсутствие модема и внешнего IP (при подключении инета) никак не влияет, если только Вы только не хотите через интернет цепляться к виртуалке, запущенной на удаленном компьютере.