Создаем окружение в Windows > VirtualBox > Ubuntu Server > общая папка (nginx + php5-fpm + mysql + mongo)
Качаем и устанавливаем VirtualBox
https://www.virtualbox.org/wiki/Downloads
Качаем и устанавливаем Ubuntu Server 14.04 на VirtualBox
http://www.ubuntu.com/download/server
Обновляемся
sudo apt-get update
sudo apt-get upgrade
Настраиваем общую папку
- в настройках виртуальной машины добавляем общую папку
- в окне виртуалки -> устройства -> подключить образ диска Дополнительной гостевой ос
- монтируем привод и запускаем VboxLinuxAdditions.run
sudo mount /dev/cdrom /mnt
sudo apt-get install dkms build-essential linux-headers-$(uname -r)
cd /mnt && sudo sh ./VBoxLinuxAdditions.run
- создаем папку в виртуалке где будет общая папка проекта
sudo mkdir -p /var/wwww/project.dev
- монтируем общую папку
sudo mount -t vboxsf project.dev /var/wwww/project.dev
- после этой команды директория /var/wwww/project.dev должна стать общей, смотрим что там у нас в каталоге теперь
ls -la /var/wwww/project.dev
- если видим файлы нашего проекта, то все хорошо и можно добавить это монтирование в загрузку /etc/rc.local
sudo nano -w /etc/rc.local
- добавляем в самый низ строчку ( exit 0 - уберем )
mount -t vboxsf project.dev /var/wwww/project.dev
Теперь общая папка у нас есть.
Устанавливаем ssh сервер, если таковой не поставили при установке.
Причина 1) им удобней пользоваться чем в окне виртуалбокса
Причина 2) подключаться к базам данных (через гуи) нужно используя ssh туннель, т.к. они все забиндены на localhost и считаю незачем это менять
Устанавливаем Openssh
sudo apt-get install openssh-server
- в virtualbox для нашей ubuntu у которой NAT адаптер, делаем проброс портов TCP порт хоста 22, порт гостя 22
- в сетевых подключениях виндовс смотрим внешний айпи нашей виртуалки 192.168.56.1
- прописываем его в c:\WINDOWS\system32\drivers\etc\hosts
192.168.56.1 project.dev
Перезагружаемся
sudo reboot
Далее будем пользоваться виртуалкой через Putty ssh.
Конектимся на project.dev порт 22. Авторизируемся.
Устанавливаем Nginx
- прописываем в конец файла /etc/apt/sources.list следующее:
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
- добавляем ключ
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ABF5BD827BD9BF62
- обновляем репозитории и устанавливаем
sudo apt-get update && sudo apt-get install nginx
- аналогично, как с ssh пробрасываем 80 порт. TCP порт хоста 80, порт гостя 80
- теперь при попытке зайти на http://project.dev мы увидим Welcome to nginx!
Устанавливаем php5-fpm
sudo apt-get install php5-fpm php5-gd php5-mysql php5-mongo
Теперь нужно настроить Nginx что бы работал с PHP.
- сначала в /etc/nginx/conf.d/default.conf смотрим где хранится html c Welcome to nginx!
nano /etc/nginx/conf.d/default.conf
- видим root /usr/share/nginx/html, по этому пути создадим index.php с
sudo nano -w /usr/share/nginx/html/index.php
- теперь если обратиться на http://project.dev/index.php он не откроется, но скачается =)
- правим /etc/nginx/nginx.conf
user www-data;
- правим /etc/nginx/conf.d/default.conf
sudo nano -w /etc/nginx/conf.d/default.conf
- ключевые моменты (минимум для старта php):
location ~ \.php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_n$
include fastcgi_params;
}
- перезапускаем nginx и php5-fpm
sudo service nginx restart && sudo service php5-fpm restart
- проверяем
по http://project.dev/ Welcome to nginx!
по http://project.dev/index.php открывается phpinfo
Ставим заглушку sendmail
- создаем shell-скрипт /usr/bin/fakesendmail.sh со следующим содержимым:
#!/bin/sh
prefix="/var/mail/sendmail/new"
numPath="/var/mail/sendmail"
if [ ! -f $numPath/num ]; then
echo "0" > $numPath/num
fi
num=`cat $numPath/num`
num=$(($num + 1))
echo $num > $numPath/num
name="$prefix/letter_$num.txt"
while read line
do
echo $line >> $name
done
chmod 777 $name
/bin/true
- делаем файл исполняемым и назначим его владельцем пользователя root
sudo chown root:root /usr/bin/fakesendmail.sh
sudo chmod 755 /usr/bin/fakesendmail.sh
- нужно создать особую структуру каталогов и дать права на запись в них
sudo mkdir /var/mail/sendmail
cd /var/mail/sendmail
sudo mkdir cur
sudo mkdir new
sudo mkdir tmp
sudo chmod -R 777 /var/mail/sendmail
- настраиваем php на работу с заллушкой в /etc/php5/fpm/php.ini ставим параметр
sendmail_path = /usr/bin/fakesendmail.sh
- перезапускаем php
sudo service php5-fpm restart
- открываем наш тестовый /usr/share/nginx/html/index.php и дописываем функцию отправки письма
mail("[email protected]", "My Subject", "Line 1\nLine 2\nLine 3");
- обновляем страницу http://project.dev/index.php и проверяем каталог с письмом
/var/mail/sendmail/new создался letter_1.txt с отправленым нами письмом
Заглушка готова.
Устанавливаем MySQL 5.6
sudo apt-get install mysql-server-5.6
- если используете гуи типа HeidiSQL то подключайтесь к 127.0.0.1 через ssh тунель
Mysql готов.
Устанавливаем Mongo
- добавляем ключ
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
- добавляем репозиторий
echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
- обновляем
sudo apt-get update
- устанавливаем
sudo apt-get install -y mongodb-org
- если используете гуи типа MongoVUE то подключайтесь к 127.0.0.1 через ssh тунель
Mongo готов.
Чистим систему от старых и ненужных пакетов
sudo apt-get autoclean
sudo apt-get autoremove
Теперь изменяем /etc/nginx/conf.d/default.conf на нашу общую папку /var/www/project.dev
location / {
...
root /var/www/project.dev;
index index.php index.html index.htm;
...
}
location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME /var/www/project.dev$fastcgi_script_name;
...
}
- перезапускаем nginx и php5-fpm
sudo service nginx restart && sudo service php5-fpm restart
Все готово.
Дополнительно
Старт VM машины из cmd
c:/"Program Files"/Oracle/VirtualBox/VBoxManage startvm "vm_name" --type headless
Стоп VM машины из cmd
c:/"Program Files"/Oracle/VirtualBox/VBoxManage controlvm "vm_name" acpipowerbutton
Файлы конфигурации
nginx
/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/default.conf
php
/etc/php5/fpm/php.ini
/etc/php5/fpm/pool.d/www.conf
/etc/php5/fpm/pool.d/www.conf
mysql
/etc/mysql/my.cnf
mongo
/usr/local/etc/mongodb.conf
/etc/mongod.conf
/etc/mongod.conf
Дальнейшая конфигурация и настройка каждой части окружения, очень индивидуальна.
Полезные программки
sudo apt-get install htop
sudo apt-get install iotop
sudo apt-get install cbm
sudo apt-get install mc
Послесловие
Альтернативный вариант создания окружения. Но это способ для тех кому не нужно ковыряться в настройках например nginx'a.
Скачать Vagrant. Установить. Потом зайти https://puphpet.com/ и создать конфигурацию сервера.
После распаковать себе в проект архив конфигурации.
Выполнить в консоли vagrant up.
Виртуальная машина скачается, установится, сконфигурируется и поставит все программы которые указаны в конфигурации.
Но, суть вагранта такова что конфигурируется сервер непосредственно в файле конфигурации, а не после того как машина развернута. А из за этого возникают проблемы тонкой настройки виртуального сервера.