Установка php 7 на Debian 8 «jessie» из исходных кодов
Можно использовать скрипт который упрощает установку разных версий php
Сегодня дождливый и пасмурный день. И нет ничего более уютного и расслабляющего чем попивая горячий чай собирать ПО из исходников. Поэтому самое время собрать php 7 на debian 8.
У нас есть тачка с debian 8, установленым с образа netinstall. Установка минимальная, кроме ssh ничего не ставилось.
Для установки php 7 нам нужно выполнить по ssh или в консоли тачки несколько ругательств из под рута.
Первым делом установим все необходимые для сборки пакеты:
# apt-get install git apache2 mysql-server make autoconf gcc bison libxml2 \
libxml2-dev libcurl4-openssl-dev pkg-config libssl-dev \
bzip2 libbz2-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev \
libgmp-dev libgmp3-dev libmcrypt-dev libmysqlclient-dev \
libpspell-dev librecode-dev
Также нам нужен пакет libt1-dev, который отсутствует в репах debian 8, возьмем его из репов debian 7 wheezy, для этого добавим в /etc/apt/sources.list следующую строку
deb http://ftp.debian.org/debian wheezy main contrib non-free
Затем выполняем:
# apt-get update
# apt-get install libt1-dev
Затем убираем добавленную строку из /etc/apt/sources.list и затем выполняем
# apt-get update
Теперь сделаем симлинк gmp.h в /usr/include/
# ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h
Теперь все готово для сборки. Создадим папку для исходников и скачаем их туда.
# mkdir /root/php7
# cd /root/php7
# git clone https://git.php.net/repository/php-src.git
Переходим к сырцам и конфигурим
# cd php-src
# ./buildconf
# ./configure \
--prefix=/usr \
--with-config-file-path=/etc \
--enable-mbstring \
--enable-zip \
--enable-bcmath \
--enable-pcntl \
--enable-ftp \
--enable-exif \
--enable-calendar \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-curl \
--with-mcrypt \
--with-iconv \
--with-gmp \
--with-pspell \
--with-gd \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-zlib-dir=/usr \
--with-xpm-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib=/usr \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-openssl \
--with-mysql=/usr \
--with-pdo-mysql=/usr \
--with-gettext=/usr \
--with-zlib=/usr \
--with-bz2=/usr \
--with-recode=/usr \
--with-mysqli=/usr/bin/mysql_config
Если все в порядке, то результатом выполнения предыдущей команды будет что-то типа:
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.
Далеее выполняем
# make
# make install
Проверяем, что установка прошла успешно
root@debian:~/php7/php-src# php -v
PHP 7.0.0-dev (cli) (built: May 23 2015 15:48:27)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies
Вобщем то php7 установлен, но если мы хотим заставить веб-сервер обрабатывать php, то надо ещё настроить apache2.
Заставим apache2 обрабатывать php, с помощью php-cgi.
У меня в системе есть пользователь user, и я решил сделать для него виртуальный хост.
Создаем каталог cgi-bin у пользователя
# mkdir /home/user/cgi-bin/
Создаем файл /home/user/cgi-bin/php со следующим содержимым
#!/usr/bin/php-cgi
И выставляем права 555 на него
# chmod 555 /home/user/cgi-bin/php
Создаем файл /home/user/cgi-bin/php.ini со следующим содержимым
max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0
zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0
Создаем каталог для виртуалхоста
# mkdir /home/user/www
И кладем в него index.php со следующим содержимым
<?php
phpinfo();
?>
И т.к мы все делали из под рута, то меняем владельца всех этих созданных файлов и каталогов на user
# chown -R user:user /home/user/
Теперь нужно настроить apache2. Добавим необходимые модули в apache2
# a2enmod actions
# a2enmod cgi
Заменим конфиг /etc/apache2/sites-enabled/000-default.conf на такой
<Directory /home/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /home/user/www
ScriptAlias /cgi-bin/ "/home/user/cgi-bin/"
AddType application/x-httpd-php .php .php3
Action application/x-httpd-php /cgi-bin/php
DirectoryIndex index.php
</VirtualHost>
И перезапустим apache2
# service apache2 restart
Теперь мы можем зайти браузером на ip тачки и увидеть страницу php info.
Аналогично можно настроить другие виртуальные хосты.
Про настройку разных версий php для каждого сайта на одном сервере можно прочитать в статье про мультиверсионность php.
Спасибо за статью. Но не могли бы ещё объяснить, каким образом можно на сервере поставить разные версии PHP и как настраивать свою версию php под каждый сайт?
Я написал статью как это сделать http://anikin.pw/all/multiversionnost-php-na-servere-s-vestacp/