Решил оформить наконец своё HOW-TO на форуме в нашей вики, т.к. это правильнее и форматирование здесь удобнее. Я постарался изложить материал кратко, намеренно упустив подробности, которые не относятся напрямую к сути (вроде того, что конфиги сервера нужно править от рута). Считаем, что читатель имеет базовый уровень работы с линукс-системами.

Обсуждение статьи - http://forum.ubuntu.ru/index.php?topic=52552.0

Просьба к редакторам тоже там отписываться

thunderamur

Базовая установка и настройка веб-сервера

Выполнив этот раздел, вы получите базовый, работающий веб-сервер

Установка

apt-get install lamp-server^ phpmyadmin
lamp-server^ - поставит базовый набор lamp (Linux Apache Mysql PHP).

phpmyadmin - веб-интерфейс для управления БД MySQL.

Иногда при копипасте кода установки может вылезать ошибка, что какой-то пакет не найден. На самом деле все правильно, просто глюк копипаста. Решение вбить руками команду или попробовать стереть название проблемного пакета вместе с пробелами по краям и вбить руками только его.

Настройка Apache

Персональные настройки

FIXME Начиная с версии Ubuntu Saucy (13.10) свои настройки следует писать в /etc/apache2/conf-available, активировать настройки следует с помощью команды a2enconf.

Свои настройки следует писать в /etc/apache2/conf.d, т.е. создать там файл, например, myconf.conf и определить в нём свои настройки.
## Файл персональных настроек веб-сервера Apache

## Чтобы устранить предупреждение при перезапуске Apache (хотя в целом на производительности это не отразится)
ServerName localhost

## Для того, чтобы Apache интерпретировал php и не предлагал сохранить php-файл
AddType application/x-httpd-php .php .phtml

## Установка кодировки UTF-8 по умолчанию
AddDefaultCharset UTF-8
Для того, чтобы так же работали файлы php, которые начинаются с «<?» вместо «<?php» нужно, чтобы в /etc/php5/apache2/php.ini было short_open_tag = On
После внесения изменений в конфиги Apache, его нужно перезапустить, чтобы измнения вступили в силу
service apache2 restart

Настройка виртуальных хостов

Есть несколько способов, я же расскажу о том как повесить несколько виртуальных хостов на один IP c доступом к ним по имени сервера.

  • В /etc/hosts прописываем наши хосты:
127.0.0.1    host2.server1 host1.server1
  • Идём в /etc/apache2/sites-available

и создаём там файлы, названиями которых будут названия, создаваемых серверов, например host1.server1.conf и host2.server1.conf в эти файлы пишем (здесь показано простейшее, подробнее можно заценить в файле default):

<VirtualHost *:80>
    ServerName host1.server1
    DocumentRoot /var/www/host1.server1
    <Directory /var/www/host1.server1>
        AllowOverride All
    </Directory>
</VirtualHost>
<VirtualHost *:80>
        ServerName host2.server1
        DocumentRoot /var/www/host2.server1
        <Directory /var/www/host2.server1>
                AllowOverride All
        </Directory>
</VirtualHost>
  • Далее создаём симлинки на эти файлы в директории /etc/apache2/sites-enabled с помощью команды a2ensite:
a2ensite host1.server1 host2.server1
Удаляются симлинки таким же образом командой a2dissite
  • Перезапускаем Apache, пробуем в браузере открыть хосты
http://host1.server1
http://host2.server1

Твики и трюки

Этот раздел применять не обязательно, у вас уже всё работает после 1-го раздела. Однако вы можете найти здесь что-то полезное. Я рекомендую не обделить вниманием ускорение (opcode cacher)

Ускоряем сервер (Opcode Cacher)

Акселератор PHP — программа, ускоряющая исполнение сценариев PHP интерпретатором путём кэширования их байткода.

http://ru.wikipedia.org/wiki/Акселератор_PHP

Не устанавливайте сразу несколько акселераторов PHP, это не даст никакого результата.
Начиная с версии PHP 5.5 в интерпретатор по умолчанию включён Zend OPcache. В этой связи, а также потому что данная статья описывает базовую настройку, из неё убраны описания установки php-apc и php-xcache

Выключаем автозапуск apache2 и mysql

ВАМ ЭТО ДЕЙСТВИТЕЛЬНО НУЖНО? Эти демоны стартуют в родной для себя среде в разы быстрее чем денвер в винде, думаю от 1 сек к времени загрузки ОС и 10 мб ОЗУ вам хуже не станет, а лишних телодвижений не будет…

Выключаем автозапуск Apache:

sudo update-rc.d -f apache2 remove

Выключаем автозапуск MySQL:

sudo nano /etc/init/mysql.conf

комментируем строки:

start on (net-device-up
          and local-filesystems
          and runlevel [2345])

т.е. должно быть так:

#start on (net-device-up
#          and local-filesystems
#          and runlevel [2345])

Разрешаем подключение к MySQL из Мира

Нужно для подключения веб-сервера или другой программы, находящейся на другом сервере. В случае, если у вас они крутятся на одном сервере этого делать не нужно!
по умолчанию mysql не принимает tcp соединения т.к. прослушивает только 127.0.0.1

/etc/mysql/my.cnf

#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

Самое простое - просто закомментировать эту строку.

Кроме этого требуется добавить пользователя, который с разных мест и из разных программ может соединяться с базой, например «admin»:

GRANT ALL PRIVILEGES ON *.* TO admin@"%" IDENTIFIED BY 'my_admin_password' WITH GRANT OPTION;