Сборка MySQL, Apache и PHP со всеми необходимыми расширениями
Многие люди, занимающиеся программированием для web и/или настройкой серверов, в разное время свой жизни обнаруживали, что необходимо подготовить web-сервер к работе. То есть поставить MySQL, Apache и PHP (причем собрать их с нужными ключами и поддержкой различных часто используемых функций), настроить все это и запустить. Те, кто успешно решали все эти проблемы, обычно ленились записать все ключи, использованные при сборке, список библиотек и т.д. Данная заметка поможет все это вспомнить - сборка и установка всего необходимого описана пошагово.
0. Общая подготовка
Создаем папку, в которую мы будем складывать все скачанные архивы и почти все (кроме MySQL) разжатые папки, и переходим в нее:
cd ~
mkdir distr
cd distr
В конце практически каждого шага не забываем возвращаться в созданную нами папку чтобы получить правильную структуру каталогов и собрать все без проблем.
Кстати, для тех, кто ленится читать простые инструкции. Архивы .tgz и .tar.gz разжимаются с помощью tar xzvf имя_архива.tar.gz.
И еще одно примечание. Ключи, с которыми собираются программы, могут подойти не всем. В данной статье указаны параметры, которые я обычно использую для себя. В случае, если Вы хорошо понимаете, что делаете, можете почитать инструкции и поменять параметры сборки. Само собой, что пути также указаны мои (преимущество в том, что я использую стандартные).
1. Устанавливаем MySQL
Скачиваем бинарный дистрибутив с официального сайта (на момент написания статьи - MySQL 5.0.37) и следуем стандартным для практически любой версии MySQL инструкциям:
groupadd mysql
useradd -g mysql mysql
cd /usr/local
gunzip < /PATH/TO/MYSQL-VERSION-OS.tar.gz | tar xvf -
ln -s FULL-PATH-TO-MYSQL-VERSION-OS mysql
cd mysql
scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
chgrp -R mysql .
Выбираем в папке support-files/ подходящий нам файл конфигурации (в общем-то исходить надо из объема RAM) и копируем его в /etc/my.cnf.
Возвращаемся в нашу папку:
cd ~/distr
2. Готовим Apache
Почему готовим? Да потому, что сначала нужно скачать Apache, потом собрать PHP, и только потом собрать Apache.
Итак, забираем дистрибутив с официального сайта (на момент написания статьи - Apache 1.3.37) и разжимаем.
Затем скачиваем mod_limitipconn.c и кладем его в apache_1.3.37/src/modules/extra/. Этот модуль совсем не обязателен, но очень удобен - он позволяет ограничивать количество соединений к файлам в определенных папках.
Теперь настраиваем Apache:
./configure --add-module=src/modules/extra/mod_limitipconn.c --activate-module=src/modules/php4/libphp4.a --enable-module=rewrite --disable-module=actions --disable-module=asis --disable-module=autoindex --disable-module=userdir --disable-module=cgi --disable-module=env
Не удивляйтесь наличию php4 - этого модуля еще нет, но на момент сборки он будет.
3. Собираем PHP
Для того, чтобы собрать подходящий нам PHP, необходимо скачать и установить несколько библиотек.
3.1. JPEG library
Скачиваем jpegsrc.v6b.tar.gz, распаковываем и собираем:
./configure
make
make install
3.2. zlib (на момент написания статьи - zlib 1.2.3)
Опять же, все просто. Качаем, распаковываем, ставим:
./configure
make
make install
3.3. GNU Multiple Precision Arithmetic Library (GMP) (на момент написания статьи - GMP 4.2.1)
Забираем с официального сайта, разжимаем, собираем:
./configure
make
make check
make install
3.4. cURL (на момент написания статьи - cURL 7.16.1)
Все так же, как и в прошлых шагах - качаем, распаковываем, ставим:
./configure
make
make install
3.5. PHP
Вот мы и добрались до PHP (на момент написания статьи - PHP 4.4.6). Качаем дистрибутив с известного всем сайта, разжимаем. Затем настраиваем PHP и устанавливаем:
./configure --with-apache=../apache_1.3.37 --enable-track-vars --enable-mod_charset --with-mysql=/usr/local/mysql --with-gd --with-jpeg-dir=/usr/local --with-zlib --with-zlib-dir=../zlib-1.2.3 --enable-calendar --enable-ctype --enable-ftp --enable-sockets --with-regex=php --enable-shared --with-ttf --enable-mbstring=ru --enable-mbstr-enc-trans --enable-mbregex --with-iconv --with-gmp --with-curl
make
make install
Не забываем про настройки. Копируем файл php.ini-recommended из дистрибутива в /usr/local/lib/php.ini.
4. Ставим Apache
Пришло время скомпилировать и установить Apache. Для этого переходим в его папку, где мы на шаге (2) вызывали configure с определенными параметрами и делаем стандартные действия:
make
make install
5. Заставляем Apache использовать PHP
Немного редактируем /usr/local/apache/conf/httpd.conf:
В блок <IfModule mod_dir.c> вместо имеющегося содержимого вписываем DirectoryIndex index.php index.html index.htm.
В блок <IfModule mod_mime.c> вписываем:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Ну и, конечно, не забываем настроить нужные виртуальные хосты.
6. eAccelerator (на момент написания статьи - eAccelerator 0.9.5)
eAccelerator кеширует скрипты, написанные на PHP, тем самым существенно повышая производительность и снижая нагрузку на сервер. Установить его просто, а пользы от него масса.
6.1. Устанавливаем eAccelerator
Итак, скачиваем, распаковываем и ставим:
export PHP_PREFIX="/usr/local"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install
6.2. Подключаем eAccelerator к PHP
Редактируем php.ini (место его мы определили в пункте (3.5)). В самом низу дописываем:
[Zend]
zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20020429/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
Примечание: во второй строке (zend_extension) путь мы берем из того, что выведет установщик eAccelerator в пункте (6.1). В принципе, можно попробовать не указывать путь - PHP сам может найти extension, если в php.ini указан правильный extension_dir.
Еще надо не забыть создать папку, куда eAccelerator будет складывать данные:
mkdir /tmp/eaccelerator
chmod a+rw /tmp/eaccelerator
7. Запуск сервера
Теперь мы со спокойной душой можем запустить собранное и проверить, работает ли оно:
/usr/local/mysql/bin/mysqld --user=mysql &
/usr/local/apache/bin/apachectl start
В папку, видимую на web, положите .php-файл со следующим содержимым:
-
<?php
-
-
-
?>
Укажите браузеру адрес этого файла и проверьте, правильно ли собрался и запустился PHP.


March 30th, 2007 at 21:56 Quote
USE="whatever_I_want" emerge -va mysql php apache ? :)
March 30th, 2007 at 23:08 Quote
CSh, это не есть приятный для меня подход. да и не все используют дистрибутивы с такими менеджерами пакетов.
лично я предпочитаю собрать сам. и быть в курсе того, что, почему и как у меня работает.
March 30th, 2007 at 23:48 Quote
Если "занимающиеся программированием для web и/или настройкой серверов" хотят поставить что-то максимально быстро и без доп. головной боли - они выберают ОСи, где есть такого рода пекетные менеджеры(а они сейчас практически везде), как то RedHat/Gentoo/не-дай-Бог-Ubuntu. КАК оно работает - не знаю, как-то всё равно, есть определённый набор .so'шек, которые компиллятся в зависимости от флагов, и юзаются модулем, в данном случае для апача. Учитывая, что сорсы для Gentoo оптимизированы под эту конкретную ОСь, а RH/Ubuntu вообще юзают готовые бинарники, вероятность что-то криво поставить сводится к 0, чего нельзя сказать об установке из сорсов. Конечно, можно развести многостраничный флейм на тему "./configure && make && make install как скринсейвер для консоли или о вреде готовых решений", но я думаю, что УДОБНЕЕ и БЫСТРЕЕ(debug-free) - ставить из пакетов.
March 31st, 2007 at 07:53 Quote
CSh, отчасти ты прав. но я люблю Slackware и привык к здоровой доле мучений. кроме того, я иногда сталкиваюсь с грустными вопросами на форумах на тему того, как установить что-то сравнительно сложное через пакетный менеджер. то есть не просто Apache, а Apache с моделями, например. или PHP со многими расширениями.
кроме того, через пакетный менеджер ты скорее всего установишь базовый вариант плюс динамически подключаемые модули. а для быстродействия лучше если все по возможности сразу вкомпилено внутрь.
anyway, каждый выбирает себе то, что ему удобнее :)
July 10th, 2007 at 14:43 Quote
csh, у меня, к примеру, SLES9 с клиентом оракл и мне из php работать с БД, смутно се представляю как можно это осуществить не компилируя руками все компоненты...
тем более - эт оваще процесс весьма приятный :) када получаеццо :)