Apache2 с mod_fcgid и PHP5 на CentOS
Это решение описывает то, как мы можем установить Apache2 с mod_fcgid и PHP5 на CentOS 5.3.
mod_fcgid – альтернативное решение, замещающее устаревший mod_fastcgi. Это решение позволит нам выполнять скрипты PHP с разрешениями их владельцев вместо стандартных user/group (apache/apache).
В этом примере мы будем использовать CentOS 5.3 Server c именем хоста yz.dynaconf.ru, в качестве примера, и IP адресом 192.168.0.242.
Так же мы создадим скрипт, который возьмет на себя львиную долю работы по созданию и предварительному конфигурированию создаваемого apache-хоста.
Конечно же, нет гарантии, что это сразу заработает у вас, но приложив некоторые усилия можно добиться нужного результата.
Подготовительные разьяснения
Я не буду акцентировать внимание на установке самой CentOS. Это достаточно тривиальная задача. Как выполнить установку описано подробно здесь http://attic.su/howto/centos/centos_inst.
Выберите минимальную конфигурацию, установите при выборе пакетов (Package Selection) только Server. В Package Group Selection выберите следующие группы:
Server Configuration Tools
Перед тем, как мы начнем, следует отключить SELinux. Выполните:
system-config-securitylevel
установите Security Level и SELinux в положение Disabled.
То, что мы отключили SELinux перед выполнением текущего примера, вовсе не исключает необходимости в его использовании. Отключение делается в целях удобства конфигурирования сервера, поскольку в противном случае возникают затруднения в плане доступа некоторых процессов к ресурсам системы. После окончательной доводки сервера рекомендуется SELinux и Security Level вернуть в исходное состояние.
После этого следует перезагрузить систему:
Установка Midnight Commander c дистрибутива
Давайте установим вначале файловый менеджер Midnight Commander. Честно признаюсь, я испытываю некоторые затруднения при использовании редактора Vi, и mcedit в этой ситуации является неплохой альтернативой.
Создаём каталог под CD/DVD и монтируем установочный диск:
mount -t iso9660 /dev/hda /mnt/cdrom
Возможно, компьютер будет выдавать сообщение об ошибке устройства /dev/hda, тогда попробуйте последовательно /dev/hdb и /dev/hdc. Одно из этих устройств обязательно сработает.
Переходим в каталог CentOS на CD-диске:
Проверяем, есть ли в дистрибутиве Midnight Commander
-rw-rw-r-- 2 500 500 2211952 Ноя 21 2007 mc-4.6.1a-35.el5.x86_64.rpm
-rw-rw-r-- 2 500 500 16489 Ноя 19 2007 mcelog-0.7-1.22.fc6.x86_64.rpm
-rw-r--r-- 2 root root 17717 Мар 17 16:35 mcstrans-0.2.11-3.el5.x86_64.rpm
rpm -ihv mc-4.6.1a-35.el5.x86_64.rpm
Уходим с CD-диска и выполняем размонтирование:
Конфигурирование /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.0.100 yz.dynaconf.ru yz
::1 localhost6.localdomain6 localhost6
Конфигурирование добавочного алиаса
(Эта операция опциональна. Этот пример показывает как добавить дополнительный адрес (алиас) для вашего сетевого интерфейса eth0, если вы нуждаетесь в более, чем одном IP-адресе Если вам достаточно одного адреса, просто пропустите этот раздел.)
Предположим, что ваш сетевой интерфейс eth0. В таком случае на вашем сервере есть такой файл /etc/sysconfig/network-scripts/ifcfg-eth0, который содержит настройки для eth0. Вы можете использовать этот файл как образец для вашего нового виртуального интерфейса eth0:0:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
Предположим, что вы решили присвоить IP адрес 192.168.0.244 виртуальному интерфейсу eth0:0. В этом случае откройте файл /etc/sysconfig/network-scripts/ifcfg-eth0:0 и модифицируйте его как показано ниже (удалите строчку с HWADDR, поскольку физически это та же самая сетевая карта):
mcedit /etc/sysconfig/network-scripts/ifcfg-eth0:0
# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.0.255
HWADDR=00:17:31:4E:6E:BE
IPADDR=192.168.0.244
NETMASK=255.255.255.0
NETWORK=192.168.0.0
ONBOOT=yes
После этого следует перестартовать сеть:
/etc/init.d/network restart
Теперь следует проверить /etc/hosts после добавления IP адреса, хотя это и необязательно.
Вы должны получить что-то похожее на это:
[root@yz ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:C2:29:7E
inet addr:192.168.0.242 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fec2:297e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:281 errors:0 dropped:0 overruns:0 frame:0
TX packets:311 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26449 (25.8 KiB) TX bytes:60343 (58.9 KiB)
Interrupt:177 Base address:0x1400
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:C2:29:7E
inet addr:192.168.0.244 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:177 Base address:0x1400
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)
Проверка соединения с интернетом
elinks http://www.yandex.ru
Если соединение с интернетом есть, то вы увидите страничку Яндекса, правда без картинок, один текст. Но этого нам достаточно для того, чтобы убедиться в доступности интернета, поскольку все следующие шаги будут требовать его наличия.
Если интернета все же нет, то попробуйте проделать следующее:
mcedit /etc/sysconfig/network
Вы должны увидеть что-то подобное:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=yz.dynaconf.ru
GATEWAY=192.168.0.254
Первая строка говорит, что протокол IPv4 включен;
вторая — что IPv6 отключен;
третья — собственно имя хоста;
четвертая указывает адрес шлюза 192.168.0.254
Еще можно проверить ./etc/resolv.conf:
Там должно быть что-то похожее на это:
search dynaconf.ru
nameserver 191.244.228.203
nameserver 191.244.230.203
Если это не так, то приведите этот файл к похожему виду. Имейте ввиду, что пример хоста yz.dynaconf.ru – это всего лишь пример и использовать его не стоит.
Последние две строки — это DNS-адреса. Их можно выяснить у вашего провайдера.
Вот, собственно, и все, что касается работы сети и соединения с интернетом. Даже если вы новичок, этой информации вполне достаточно, чтобы выполнить подключение к интернету.
Предварительная установка некоторых пакетов
Вначале мы импортируем GPG-ключи для программных пакетов:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Теперь убедитесь, что группы пакетов 'Development Libraries' и 'Development Tools' установлены:
Если они не установлены, то надо позаботиться об этом сейчас. Это можно сделать, используя в качестве локального репозитория установочный DVD-диск. Подробно об этом написано здесь. Второй вариант — менее предпочтительный — установка из интернета. В этом случае установку групп пакетов можно произвести позже.
Итак, обновление системы:
Будьте готовы к тому, что из интернета будет скачено не менее 120 мегабайт.
Теперь выполните, если вы не сделали это ранее:
yum groupinstall 'Development Libraries'
yum groupinstall 'Development Tools'
Установка Apache, MySQL, phpMyAdmin
Сейчас мы подключим репозиторий RPMforge к нашей CentOS системе, как удаленный источник пакетов, которых нет в наличии в официальном репозитории.
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
cd /tmp
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
После этого мы может установить нужные нам пакеты одной командой:
yum install ntp httpd mysql-server php php-mysql php-mbstring php-mcrypt phpmyadmin rpm-build gcc mysql-devel pkgconfig zlib-devel pcre-devel expect libtool-ltdl-devel libtool gdbm-devel
Установка пароля MySQL и конфигурирование phpMyAdmin
chkconfig --levels 235 mysqld on
Теперь устанавливаем пароль для учетной записи root в MySQL:
/usr/bin/mysqladmin -u root password 'rootsqlpassword'
/usr/bin/mysqladmin -u root -h yz.dynaconf.ru password 'rootsqlpassword'
Сейчас мы будем конфигурировать phpMyAdmin. Мы изменим конфигурацию Apache таким образом, чтобы phpMyAdmin разрешал соединения не только с localhost. Для этого следует закомментировать директиву <Directory> … </Directory>.
mcedit /etc/httpd/conf.d/phpmyadmin.conf
#
# Web application to manage MySQL
#
#<Directory "/usr/share/phpmyadmin">
# Order Deny,Allow
# Deny from all
# Allow from 127.0.0.1
#</Directory>
Alias /phpmyadmin /usr/share/phpmyadmin
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /mysqladmin /usr/share/phpmyadmin
Теперь следует изменить способ аутентификации в phpMyAdmin с cookie на http:
mcedit /usr/share/phpmyadmin/config.inc.php
[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]
Теперь настроим системный запуск сервера Apache и стартуем его:
chkconfig --levels 235 httpd on
/etc/init.d/httpd restart
Теперь запускаем браузер и в адресной строке набираем http://192.168.0.242/phpmyadmin/ логинимся с учетной записью root и паролем, который мы указали при конфигурировании MySQL сервера.
В официальном репозитории CentOS mod_fcgid отсутствует. Однако такой пакет для CentOS 5.x есть в тестовом репозитории centos.karan.org по адресу http://centos.karan.org. Мы подключим его следующим образом:
cd /etc/yum.repos.d/
wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
Далее мы откроем kbsingh-CentOS-Extras.repo...
mcedit /etc/yum.repos.d/kbsingh-CentOS-Extras.repo
... и установим gpgcheck в 0 и enabled в 1 в секции [kbs-CentOS-Testing]:
[...]
[kbs-CentOS-Testing]
name=CentOS.Karan.Org-EL$releasever - Testing
gpgcheck=0
gpgkey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt
enabled=1
baseurl=http://centos.karan.org/el$releasever/extras/testing/$basearch/RPMS/
После этого можно установить mod_fcgid, и PHP5:
yum install mod_fcgid php-cli
Если PHP5 уже установлен в Apache как модуль, его надо отключить. Для этого выполните:
mcedit /etc/httpd/conf.d/php.conf
... и закомментируйте следующие строки в этом файле:
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
#LoadModule php5_module modules/libphp5.so
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
#DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
Теперь откроем /etc/php.ini...
...и добавим строчку cgi.fix_pathinfo = 1 в конец файла:
Теперь перестартуем Apache:
/etc/init.d/httpd restart
Собственно, с установкой пакетов все закончено.