Установка Apache2, PHP и MySQL на Ubuntu

Написано 26 Июнь, 2013 в категории Linux,MySQL,php,Ubuntu/Debian/Mint,Разработка ПО

1. Устанавливаем apache2 с помощью старого, доброго apt-get

[moon:~] % sudo apt-get install apache2

Все необходимые для настройки апача файлы находятся в /etc/apache2/

[moon:~] % ll /etc/apache2/ 
total 84 
drwxr-xr-x   7 root root  4096 2011-06-21 15:15 ./ 
drwxr-xr-x 139 root root 12288 2011-06-21 15:15 ../ 
-rw-r--r--   1 root root  7994 2011-02-22 21:34 apache2.conf 
drwxr-xr-x   2 root root  4096 2011-06-21 15:15 conf.d/ 
-rw-r--r--   1 root root  1169 2011-02-22 21:34 envvars 
-rw-r--r--   1 root root     0 2011-06-21 15:15 httpd.conf 
-rw-r--r--   1 root root 31063 2011-02-22 21:34 magic 
drwxr-xr-x   2 root root  4096 2011-06-21 15:15 mods-available/ 
drwxr-xr-x   2 root root  4096 2011-06-21 15:15 mods-enabled/ 
-rw-r--r--   1 root root   750 2011-02-22 21:34 ports.conf 
drwxr-xr-x   2 root root  4096 2011-06-21 15:15 sites-available/ 
drwxr-xr-x   2 root root  4096 2011-06-21 15:15 sites-enabled/

Основные команды для управления сервисом apache2:
Запуск сервера:
sudo /etc/init.d/apache2 start или sudo service apache2 start
Остановка сервера:
sudo /etc/init.d/apache2 stop или sudo service apache2 stop
Перезапуск сервера:
sudo /etc/init.d/apache2 restart или sudo service apache2 restart
Перезагрузка настроек севера:
sudo /etc/init.d/apache2 reload или sudo service apache2 reload
Состояние сервера:
sudo /etc/init.d/apache2 status или sudo service apache2 status

Начинаем работу с сервером:
a). 1. Проверяем его состояние

[moon:~] % sudo /etc/init.d/apache2 status 
Apache2 is running (pid 4190).

Т.е. после установки сервер должен самостоятельно запуститься.
b). Сервер запущен. Введите в строку браузера любой ip адрес, который начинается со 127. Например, http://127.1.127.4/, в браузере должно появиться сообщение:

2. Установка PHP5.
Теперь установим PHP5.

[moon:~] % sudo apt-get install php5

Хочу обратить внимание на то что будет установлено и что будет удалено:
Пакеты, которые будут УДАЛЕНЫ:
apache2-mpm-worker
НОВЫЕ пакеты, которые будут установлены:
apache2-mpm-prefork libapache2-mod-php5 php5 php5-cli php5-common

Во-первых, при установке php5 меняется модель обработки запросов в Apache2. Т.е.
Была модель worker , а станет prefork. Worker считается менее надежным (использует меньше оперативной памяти за счет создания потоков внутри процесса), но более быстрым, а prefork более надежным (на каждое соединение создается процесс), но менее скоростным.
Во-вторых, устанавливается не только php5, но и модуль apache2 для работы с php5 — libapache2-mod-php5. Именно поэтому в процессе установки перезагружается apache2.

Проверим работает ли php5 под apache2. Для этого надо создать php файлик с таким кодом:

<?php 
 
// Show all information, defaults to INFO_ALL 
phpinfo(); 
 
// Show just the module information. 
// phpinfo(8) yields identical results. 
phpinfo(INFO_MODULES); 
 
?>

и попробовать его вызвать.
Только вопрос где этот файлик создать?
При установке apache2 создает конфигурацию по умолчанию, которая находится тут:
/etc/apache2/sites-available/default
Там прописан параметр DocumentRoot, который указывает на директорию, где и лежит файлик с тексом «It works»
DocumentRoot /var/www

Кстати, то что мы можем делать запросы с адресов вида 127.*.*.*
задается настройкой Allow from 127.0.0.0/255.0.0.0 ::1/128 в том же файлике.

Создайте файлик /var/www/info.php. Вставьте приведенный выше код.
И наберите в строке браузера 127.0.0.1/index.php

И в этом месте для меня случилось неожиданное — браузер просто предложил мне скачать index.php
Лечится это поведение перезагрузкой apache2:

[moon:~] % sudo /etc/init.d/apache2 restart

И вуаля, мы запустили php-скрипт. Вы должны увидеть страничку похожую на эту:

3. Устанавливаем MySQL.

[moon:~] %  sudo apt-get install mysql-server-5.0

НОВЫЕ пакеты, которые будут установлены:
libdbd-mysql-perl libdbi-perl libhtml-template-perl libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1 mysql-server-5.1 mysql-server-core-5.1

Т.е. Будет установлен не только сервер, но и клиент к нему.

Проверяем работает ли mysql из скрипта. Создаем в /var/www файлик mysql.php и вставляем туда код:

<? 
Error_Reporting(1+2+4); 
define("DBName","test"); 
define("HostName","localhost"); 
define("UserName","root"); 
define("Password","mypass"); 
 
if(!mysql_connect(HostName,UserName,Password)) 
 { echo "Не могу соединиться с базой ".DBName."!<br>"; exit; } 
?>

Перед запуском скрипта, необходимо убедиться, что в MySQL создана база данных test и она доступна для пользователя root.

После запуска http://localhost/mysql.php в Google Chrome, на экране отобразилась страничка описывающая http-ошибку 500 вместо подключения к нашей БД.
А происходит это потому что php5 ничего не знает про существование mysql у Вас на компьютере. Для работы php и mysql необходима библиотека-связка php5-mysql. Устанавливаем её и перезагружаем apache2:

[moon:~] % sudo apt-get install php5-mysql
...
[moon:~] % sudo /etc/init.d/apache2 restart

Проверим, работает ли mysql. Создаем файлик /var/www/mysql_work.php и добавляем в него код:

<? 
Error_Reporting(1+2+4); 
define("DBName","test"); 
define("HostName","localhost"); 
define("UserName","root"); 
define("Password","mypass"); 
if(!mysql_connect(HostName,UserName,Password)) 
 { echo "Не могу соединиться с базой ".DBName."!<br>"; exit; } 
 
// Создаем таблицу test. Если такая таблица уже есть, сообщение об ошибке будет 
// подавлено, т.к. используется "@" 
@mysql(DBName,"create table test(id int,a text)"); 
 
// Вставляем в таблицу 10 записей 
for($i=0; $i<10; $i++) 
 { $id=time(); 
   mysql(DBName,"insert into test(id,a) values($id,'Строка $i!')"); 
 }   
 
// Выводим все записи 
$r=mysql(DBName,"select * from test"); 
for($i=0; $i<mysql_numrows($r); $i++) 
 { $f=mysql_fetch_array($r); 
   echo "$f[id] -> $f[a]<br>\n"; 
 } 
 
?>

В результате, на экране браузера должна появиться картинка похожая на эту:

Установка минимального набора инструментов web-программиста завершена. Легкого программирования!