Pull to refresh

Установка PHP на ubuntu

Reading time4 min
Views5.4K
Зачем?
Это самый первый вопрос, который задаст большинство.
Отвечу:
1) Дефолтный php без зачастую нужных вещей вроде pcntl, и к тому же с вкомпиленным генератором неведомой совокупительной фигни Suhosin Patch.
2) Сборка модулей, которых нет в репозитории.
3) Нет руководств такого типа. Нет, действительно нету, лишь короткие руководства, которые с оговоркой можно назвать логом ./configure && make && make install, и по которым сложно что-то собрать из-за наличия требований дополнительных библиотек.
4) Я не буду писать про фан. Просто не буду, т.к. мы не балуемся, а собираем продукт для работы. Многие найдут это плюсом, но не я.
5) Внезапно возник вопрос сборки своего модуля. Навыки сборки под никс очень помогли в сборке под винду, где и был написан экстеншн.
Можно конечно было сразу писать под никсами… Но ставить и настраиватькастомизировать никсы только ради одного проекта(в консоли на удаленном сервере разрабатывать как-то не особо приятно) мне не хотелось.

Начинаем установку
Создаем каталог и переходим в него:
mkdir build
cd build

Сначала ситавим из репозитория компилер, набор утилит для сборки, wget, и набор библиотек, которые нам понадобятся для сборки PHP(ну и zlib для apache, если собираем с mod_deflate):
sudo apt-get install build-essential wget autoconf zlib1g-dev libxml2-dev libcurl4-openssl-dev libpng-dev libmcrypt-dev libmhash-dev libmysqlclient15-dev libtidy-dev libmemcache-dev 

На девственной ubuntu-server apt-get потребует скачать около 85мб.
Устанавливать мы будем в /opt, чтобы не путать с файлами дистрибутива.

Приступим к сборке апача
Комментировать ничего не буду, т.к. тут все прозрачно и в комментариях не нуждается.
wget http://www.sai.msu.su/apache/httpd/httpd-2.2.12.tar.bz2
bunzip2 httpd-2.2.12.tar.bz2
tar -xf httpd-2.2.12.tar
cd httpd-2.2.12/
./configure --prefix=/opt/apache2 --exec-prefix=/opt/apache2 --enable-mods-shared=all --enable-suexec
make
sudo make install
cd ..


Устанавливаем PHP
Да, именно его модули требуют кучу зависимостей. Я конфигурировал для MySQL/SQLite СУБД, для других собирайте сами. Не нужно бояться добавить сюда лишнего — на производительность это не повлияет.
wget http://ru2.php.net/distributions/php-5.2.10.tar.bz2
bunzip2 php-5.2.10.tar.bz2
tar -xf php-5.2.10.tar 
cd php-5.2.10
./configure --prefix=/opt/php5.2 --with-apxs2=/opt/apache2/bin/apxs --enable-fastcgi --with-curl --enable-ftp --with-gd --enable-mbstring --with-mcrypt --with-mhash --with-mysql --with-sqlite --with-mysqli --enable-pcntl --with-pdo-mysql --enable-shmop --enable-soap --enable-sockets --enable-sqlite-utf8 --with-tidy --enable-zip --enable-mbregex --enable-ctype 
make
sudo make install
cd ..
Пара слов о опциях. PHP-разработчик обязан знать, что значат эти модули(опция начиная с --with-curl), а тот, кто не разработчик, но кому волею судьбы пришлось настраивать сервер, пусть просто поверит, что они более-менее оптимальны и ничего необходимого типа pdo или mysqli не вырезано, как иногда бывает. Это же касается и конфига php.ini.

Правим конфиг апача
sudo vim /opt/apache2/conf/httpd.conf

Я заменяю значение DocumentRoot на "/var/www", добавляю в DirectoryIndex index.php, добавляю AddType application/x-httpd-php .php
Создаем phpinfo.php с содержимым <? phpinfo() ?> и наслаждаемся видом ненастроенного php(запускаем апач через /opt/apache2/bin/apachectl start).

Настраиваем php
Копируем дефолтный php.ini, редактируем его:
sudo cp php.ini-dist /opt/php5.2/lib/php.ini
sudo vim /opt/php5.2/lib/php.ini

Правим эти параметры(я даже не буду заикаться насчет того, что они значат):
error_reporting = E_ALL
display_errors включаем для дебага, на боевой раскладке же выключаем.
log_errors = On
post_max_size = 64M(для типичных задач это более чем)
magic_quotes_gpc = Off(и почему они по молчанию включены? Ума не приложу)
include_path = ".:/opt/php5.2/lib/php"(сюда я положил ZF и прочие интересные вещи)
upload_max_filesize = 64M(равен post_max_size)
Подскажу, что в виме поиском занимается "?"

Автоматический запуск
Для начала уберем дефолтный апач из запуска, нам поможет удобная утилитка rcconf(ее использовать нагляднее, чем update-rc.d, привык ее юзать):
sudo apt-get install rcconf
sudo rcconf

Убираем галочку.
Ну и останавливаем апач, чтобы не перезагружаться:
sudo /etc/init.d/apache2 stop


Теперь в rc.local добавляем строку запуска нашего апача, что позволит запускаться ему при старте:
sudo vim /etc/rc.local

Строка запуска выглядит так: /opt/apache2/bin/apachectl start
Можно же все сделать и правильно, через добавление скрипта, но я ограничусь этим.

Устанавливаем XCache
Сборку комментировать не буду:
wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.bz2
bunzip2 xcache-1.2.2.tar.bz2
tar -xf xcache-1.2.2.tar
cd xcache-1.2.2
/opt/php5.2/bin/phpize
./configure --enable-xcache --prefix=/opt/xcache --enable-xcache-optimizer --with-php-config=/opt/php5.2/bin/php-config
make
sudo make install

Копируем конфиг(был досадный глюк с sudo и правами, поэтому мне пришлось сделать через sudo su) и админку.
sudo su
cat xcache.ini >> /opt/php5.2/lib/php.ini
exit
sudo cp -R admin/ /var/www/xcache

Снова правим php.ini:
sudo vim /opt/php5.2/lib/php.ini

Комментируем zend_extension_ts, выставляем xcache.admin.user в имя админа, xcache.admin.pass в md5 пароля, xcache.size в 64M, xcache.optimizer в On, путь zend_extension выставляем в "/opt/php5.2/lib/php/extensions/no-debug-non-zts-20060613/xcache.so".
Если путь выставлен правильно, то в phpinfo() мы увидим параметры xcache, а статистику сможем посмотреть в админке.
Если этого нету, то смотрим логи апача и ищем ошибку.

Ставим memcache
sudo /opt/php5.2/bin/pecl install memcache

Добавляем в php.ini extension=memcache.so, путь прописывать не надо, она лежит по дефолтному. Ставить из pear на никсах легко, это вам не windows =)

nginx
Меняем порт у апача, вводим в гугле nginx reverse proxy, читаем, делаем. Много раз переписывать одно и то же нет не только желания, но и смысла. Автозагрузка аналогичная апачу.
Update: Использование Nginx Как Reverse-Proxy Сервера На Загруженных Сайтах, nginx как reverse proxy

В следующих сериях
1. Хоррор «Сборка минимального PHP под Windows при помощи VS 2008». Сборка экстеншенов: helloworld. Если хватит кармы, то будет завтра-послезавтра, т.к. уже написана.
2. Сборка экстеншенов на linux. Реализация TEA.

2009-09-01
Tags:
Hubs:
Total votes 35: ↑17 and ↓18-1
Comments15

Articles