В интернетах сто тысяч пятьсот статей на эту тему, но я сделаю еще одну, чтобы лично мне было удобно, потому что читая другие мануалы, я не всегда понимаю как это все работает.
Начинаем с установки пакетов
sudo apt-get install php5 apache2 mysql-server php5-mysql libapache2-mod-php5
А вот теперь идем конфигурировать все это.
Во-первых, я не работаю с директорией, куда ссылается апач по умолчанию, потому что там есть некоторый геморой с правами, если вас это не сильно пугает, то можете все оставить как есть. Я сделал паку my_sites в домашней папке
Копируем файл настроек apache в ту же папку
sudo cp /etc/apache2/sites-available/default.conf /etc/apache2/sites-available/mysite.conf
default может называться и иначе, например, у меня был назван 000-default.conf. Затем откроем файл mysites.conf
sudo gedit /etc/apache2/sites-available/mysite.conf
изменяем строчку
DocumentRoot /var/www/html
на
DocumentRoot /home/{YOUR_NAME}/my_sites
{YOUR_NAME} — это имя вашего пользователя в системе.
Укажем апачу использовать новый конфигурационный файл
a2dissite default.conf && sudo a2ensite mysite.conf
Далее. Открываем основной конфигурационный файл apache2
sudo gedit /etc/apache2/apache2.conf
И добавим следующее:
<Directory /home/{YOUR_NAME}/my_sites/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Перезапустим apache
sudo service apache2 restart или sudo /etc/init.d/apache2 restart
Если бы работа шла только над одним сайтом, то все отлично, открываем в браузере localhost, предварительно в папку /home/{YOUR_NAME}/my_sites добавим файлик index,php и увидим работу этого файлика. Но я веду сразу несколько проектов на локальной машине, для этого создадим файл хостов.
sudo touch /etc/apache2/sites-available/vhosts.conf
И отредактируем его
sudo gedit /etc/apache2/sites-available/vhosts.conf
Теоретически можно не создавать файл, а сразу его открыть на редактирование.
Добавим туда виртуальные хосты, например, для 2х сайтов dev1.my и dev2.my. Вписываем в vhosts.conf следующие параметры
<VirtualHost *:80>
ServerName dev1.my
ServerAlias www.dev1.my
DocumentRoot /home/{YOUR_NAME}/my_sites/dev1.my
</VirtualHost>
<VirtualHost *:80>
ServerName dev2.ru
ServerAlias www.dev2.ru
DocumentRoot /home/{YOUR_NAME}/my_sites/dev2.ru
</VirtualHost>
Не забываем создать 2 папки dev1.my и dev2.my в /home/{YOUR_NAME}/my_sites.
Но, например, если нам нужно чтобы исполнялись cgi скрипты, нужно в vhosts писать так
<VirtualHost *:80>
ServerName dev1.ru
ServerAlias www.dev1.ru
DocumentRoot /home/{YOUR_NAME}/my_sites/dev1.ru
ScriptAlias /cgi-bin/ /home/{YOUR_NAME}/my_sites/dev1.ru/cgi-bin/
<Directory "/home/{YOUR_NAME}/my_sites/dev1.ru/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</VirtualHost>
Теперь в папку /home/{YOUR_NAME}/my_sites/dev1.ru/cgi-bin складываем наши cgi скрипты.
При перезагрузке apache у вас скорее всего будет появляться ошибка такого содержания:
AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message
Лечиться добавление в самом начале файла vhosts.conf одной строки
ServerName localhost
А чтобы это все заработало нужно в папку /etc/apache2/sites-enabled положить символьную ссылку на vhosts.conf следующей последовательностью команд
cd /etc/apache2/sites-enabled/ sudo ln -s ../sites-available/vhosts.conf
Перезапустим сервер апач.
Вот собственно и все.
Если не заработал .htaccess
Во-первых, проверьте, чтобы в файле /etc/apache2/apache2.conf параметр AllowOverride был установлен в значение All.
И, во-вторых, включим необходимый модуль
sudo a2enmod rewrite
Необязательная настройка домашней директории
Нижеследующее подлежит строгой оценке и критике, в целом выполнение не обязательно, но может натолкнуть на светлую мысль и пощадить ваши нервы.
Могут возникнуть проблемы с правами доступа к файлам, например wordpress не захочет закачивать плагины из репозитория, вся причина в том, что права на папку указаны от вашего имени, а вот php запускается от www-data, и он ничего не может менять в ваших файлах, чтобы исправить эту ситуацию, нужно либо изменить права на файлы, установив 777, что не очень-то хорошо, на мой вкус:
# перейдем в папку с проектами
cd ~/my_sites
# изменим права на файлы
sudo find dev1.my/ -type f -exec chmod 777 {} \;
# изменим права на папки
sudo find dev1.my/ -type d -exec chmod 777 {} \;
Либо изменить хозяина файлов, это как-то правильнее, опять же на мой вкус:
cd ~/my_sites
sudo chown -R www-data:www-data dev1.my/
# а чтобы мы могли изменять файлы этого пользователя, добавимся в группу www-data
sudo usermod -a -G www-data {YOUR_NAME}
# только права на фалы выставим 664
sudo find dev1.my/ -type f -exec chmod 664 {} \;
Установка и настройка PhpMyAdmin
Поскольку, мы люди ленивые, а MySQL из консоли это та еще забава, нам нужен PhpMyAdmin:
sudo apt-get install phpmyamin
И по адресу localhost/phpmyadmin мы ожидаем увидеть заветную панель, если ее нет, делаем вот так
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
А чтобы файл в базу можно было залить любого размера, а не только 2Мб, идем в /etc/php5/apache2/php.ini и ищем там параметр upload_max_filesize и post_max_size, но их значение не может превышать memory_limit
Дополнительные настройки сервера
в /etc/php5/apache2/php.ini
# Временная зона date.timezone = "Europe/Moscow"