logo

VestaCP, несколько версий php или мульти php на Debian и Ubuntu

Разместил , . Последнее изменение: 2019-02-05. / 43 комментария

Мульти php на VestaCP

  1. Как работает менеджер версий php?
  2. Как взаимодействовать с php менеджером?
  3. Как проверить версию php на сервере и сайте?

Привет читатель, не так давно на просторах интернета наткнулся на прекрасный скрипт облегчающий внедрение в VestaCP нескольких версий php. Хочется отметить, что скрипт в первую очередь делался для Debian, но и с Ubuntu так же будет работать (правда с одним но). Сегодня убедимся в работоспособности скрипта на Ubuntu 16.04.

Особенности для Debian: скрипт собирает версии 5.2 и выше.

Особенности для Ubuntu: скрипт собирает версии 5.3 и выше. Для 5.2 выдает ошибку, поэтому, если вам требуется 5.2, используете Debian.

Что нам потребуется:

  1. Операционка Debian или Ubuntu
  2. Установленная VestaCP
  3. Модуль апача cgi (установлен по умолчанию)
  4. SHH доступ к серверу.
Если нужен только php 7 и не хочется париться, то кликни сюда

Если вам нужен только php 7, то советую вам переустановить VestaCP на новый дистрибутив ОС, в репозитории которого уже прописана новая версия php. Как пример могу привести Ubuntu 16.04.

Внимание! По всей видимости Deban 9 не поддерживается, подробности в комментариях.

Как работает менеджер версий php в VestaCP?

  1. Вводим нужные нам версии php через пробел с указанием точного номера (к примеру 5.6 не правильно, 5.6.30 - правильно)
  2. Потом скрипт просматривает http://php.net/downloads.php и http://php.net/releases/ на предмет наличия архивов с указными версиями php. Если находит. то скачивает и распаковывает в /opt/php/src. Этот этап можно пропустить, если сразу положить исходные файлы в /opt/php/src/bzips.
  3. Скрипт ставит нужные зависимости, без которых скрипт не может работать. Эта процедура проводится один раз при первом запуске, при последующих ее следует пропускать.
  4. Создает шаблоны для Apache, которые потом легко можно включить в панеле VestaCP.

Как взаимодействовать с php менеджером?

  1. Прежде всего загрузим и запустим менеджер под root.
    git clone https://github.com/petranikin/mgrvphp.git
    cd mgrvphp
    bash mgrvphp
  2. Вводим через пробел нужные версии php (помните: 7.17.1.4), номера версий можно найти на сайте http://php.net/releases, пример ввода указан на скрине ниже.VestaCP, несколько версий php или мульти php на Debian и Ubuntu
  3. Создавать ли ссылки в /usr/bin для быстрого доступа к файлам? Видимо скрипт может работать не правильно если не создать ссылки, по этому нажимаем Y.  В результате вы получите следующее: VestaCP, несколько версий php или мульти php на Debian и Ubuntu
  4. Создавать шаблон VestaCP для каждой указанной версии? Нажимаем да У.
  5. Далее вас спросят устанавливать ли зависимости? Тут обязательно жмет да У, т. к. это первый запуск скрипта на сервере.
  6. После этого остается только ждать. Установка займет какое-то время, много зависит от конфигурации сервера и количества шаблонов (у меня заняло более 30 минут).
  7. Как только установка завершится можно перейти в панель у установить нужный шаблон.

В списке шаблонов вы скорее всего увидите php71 и php71-fcgid. Это не ошибка. Просто php71 сделан на основе шаблона Vesta php-cgi, а  php71-fcgid на основе шаблона phpfcgid. Выберите то, что вам больше подходит.

Как проверить версию php на сервере и сайте?

Теперь давайте проверим успешность нашего труда.

  1. Создаем файл phpinfo.php. Открываем его текстовым редактором и вводим следующее:
    <?php
    phpinfo();
    ?>
  2. Загружаем файл в корень сайта → открываем файл в браузере и смотрим на сменную версию php.

Проверить версию php, установленную по умолчанию, можно с помощью консольной команды:

php  -v

Вот и все готово, пишите комментарии, задавайте вопросы. Мне очень важна обратная связь.

1
2
3
4
12345

43 комментария Добавить комментарий

  • Аватар

    Спасибо за статью! Почитал комментарии, попробовал поставить на Ubuntu 16.04. Все встало без ошибок, но после того как в админке Vesta для определенного сайта выбрал др. версию php и перезагрузил Apache и Nginx, меня выбросило из админки и больше я зайти туда не могу. При попытках входа выдает NO LANGUAGE DEFINED. Пробовал смену пароля через SSH. не помогло. Кроме этого при попытке зайти на страницу phpMyAdmin выдает ошибку см. скрин http://joxi.ru/xAevBlXhR51Var

    Кто-нибудь сталкивался? Поставил на боевую машину, мать его((( Хорошо хоть сайты не рухнули. Пока работают.
    Буду очень благодарен за любые мысли по этой проблеме!

    • Аватар

      Все таки все рухнуло, mySql сервер остановился. Чтобы все восстановить пришлось удалить скачанные версии php и вернуть все как было. Тогда все заработало и в админку вошел, и phpMyadmin перестал выдавать ошибки и mySql сервер заработал!

      Но вопрос открыт, так как в будущем было бы не плохо использовать несколько версий php.

  • Аватар

    Вот такая ошибка при использовании скрипта, в самом начале, ставлю рнр 5.6.40 (ставил и другие) получаю вот это.

    You can enter multiple versions through 'space'.
    Enter php version/versions(for example 5.6.30):
    >5.6.40
    Create simlinks in /usr/bin?(y/N)
    >y
    Create VestaCP web templates?(y/N)
    >y
    Start install PHP 5.6.40
    bzip2: (stdin) is not a bzip2 file.
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    /opt/php/src/php-5.6.40/options.sh: No such file or directory
    sed: can't read /opt/php/src/php-5.6.40/options.sh: No such file or directory
    mgrvphp: line 113: cd: /opt/php/src/php-5.6.40/: No such file or directory
    bash: options.sh: No such file or directory
    rm: cannot remove '/opt/php/src/php-5.6.40/options.sh': No such file or directory

    Конфигурация сервера Ubuntu 16.04.1, Vesta 0.9.8. По умолчанию стоит РНР 7.0.32.
    Понимаю что не распаковывается архив bzip2, но проверял, стоит последняя версия этого архиватора.

    • Аватар

      Руками скачайте и закиньте в папку, но у меня так и не получилось из-за openssl поставить что то старее 7

  • Аватар

    Здравствуйте. Никак не получается установить, хотя раньше на такой же точно конфигурации проблем не было. Ubuntu 16.04. Несколько раз пытался переустановить, так как система свежая. Устанавливаю 5.6.40. Текст ошибки таков (на всякий случай захватил чуть больше):

    URL transformed to HTTPS due to an HSTS policy
    --2019-04-02 20:14:07-- https://php.net/
    Resolving php.net (php.net)... 185.85.0.29, 2a02:cb40:200::1ad
    Connecting to php.net (php.net)|185.85.0.29|:443... connected.
    HTTP request sent, awaiting response... 301 Moved Permanently
    Location: https://www.php.net/ [following]
    --2019-04-02 20:14:07-- https://www.php.net/
    Resolving www.php.net (www.php.net)... 185.85.0.29, 2a02:cb40:200::1ad
    Connecting to www.php.net (www.php.net)|185.85.0.29|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: unspecified [text/html]
    Saving to: '/opt/php/src/bzips/php-5.6.40.tar.bz2'

    /opt/php/src/bzips/ [ ] 54.40K --.-KB/s in 0.06s

    2019-04-02 20:14:08 (890 KB/s) - '/opt/php/src/bzips/php-5.6.40.tar.bz2' saved [55710]

    bzip2: (stdin) is not a bzip2 file.
    tar: Child returned status 2
    tar: Error is not recoverable: exiting now
    /opt/php/src/php-5.6.40/options.sh: No such file or directory
    sed: can't read /opt/php/src/php-5.6.40/options.sh: No such file or directory
    mgrvphp: line 113: cd: /opt/php/src/php-5.6.40/: No such file or directory
    bash: options.sh: No such file or directory
    rm: cannot remove '/opt/php/src/php-5.6.40/options.sh': No such file or directory

    Не может распаковаться bz2 архив?

    Оф форумы по этому поводу тоже никакого внятного ответ не дают.

    • Аватар

      у меня такая проьлема была по причине недокачки файлов bz2 (битый файл). попробуйте скачать вручную и положите в папку /opt/php/src/ нужные версии php и снова запустите скрипт.

      • Аватар

        Да, проблема была в битых архивах, решилось загрузкой вручную

  • Аватар

    А как теперь на эти версии всякие модули доставлять? Аля mondodb и прочее, ведь apt install php**** не поставит

  • Аватар

    Админ привет, спасибо только вот одна проблема как установить модули скажем для версии 5.6 или другой.
    apt-get install php-curl скажем установлюеться только для той которая php -v

    • Аватар

      Привет. Не приходилось заниматься этим, но мне видится это примерно меняем дефолтную версию вызываемую php -v на требуемую с помощью update-alternatives. Тут и тут подробнее. Затем ставим требуемый модуль.

  • Аватар

    Постоянно использовал Ваш скрипт, но сейчас уже пару часов пытаюсь установить и постоянно выпадает ошибка:
    checking for PCRE2 10.30 or greater... configure: error: PCRE2 version 10.30 or later is required to compile php with PCRE2 support

    Пробовал на Убунту 16.04 и 18.04 на серверах Амазона, ДиджиталОушен, Ukraine.

    На Юкрейне точно всегда без проблем устанавливался скрипт, а тут прям напасть какая-то...

    Подскажите, в чем может быть проблема?

    • Аватар

      Порешал проблему с PCRE2, вылезла другая, порешал её, вылезла третья и так далее...
      В конечном итоге так и не встала...
      Что изменилось в скрипте или в убунтах, что он перестал работать?

      • Аватар

        Как я понимаю, поменялись зависимости и скрипт не может автоматически их установить. Попробуйте что-нибудь почерпнуть из комментария Лёни. Обратите внимание на те зависимости которые он ставит.

    • Аватар

      Здравствуйте, попробуйте

      sudo apt-get install pcre2-utils

      На сколько я понимаю, не хватает зависимости. Отпишитесь, пожалуйста, об успешности, очень давно не использовал этот скрипт.

    • Аватар

      Об этих зависимостях упоминал ранее автор скрипта

      apt-get update 
      apt-get install curl wget 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 libpcre3-dev libpcre++-dev libxslt1-dev libonig-dev libmcrypt-dev libreadline-dev libmhash-dev -y
      ln -s /usr/include/qdbm/depot.h /usr/include/depot.h
      ln -s /usr/lib/libc-client.a /lib/x86_64-linux-gnu/libc-client.a
      ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
      mkdir /usr/include/freetype2/freetype 
      ln -s /usr/include/freetype2/freetype.h /usr/include/freetype2/freetype/freetype.h
  • Аватар

    Hi Admin,

    I was used this script couple of times before and successful. But When i trying this today it gives me this error. I was tried this on couple of VPS thinking it is due to OS issue all failed on ubuntu 16.04/18.04. Not sure where is the issue. Could you please help me with following error.

    /opt/php/src/php-5.6.38/ext/openssl/openssl.c:2338: undefined reference to `sk_free'
    ext/ftp/.libs/ftp.o: In function `ftp_login':
    /opt/php/src/php-5.6.38/ext/ftp/ftp.c:282: undefined reference to `SSLv23_client_method'
    collect2: error: ld returned 1 exit status
    Makefile:268: recipe for target 'sapi/cli/php' failed
    make: *** [sapi/cli/php] Error 1
    Ops. Something is wrong..

    Thanks in advance.
    Charitha

  • Аватар

    А скрипт для удаления установленных дополнительный версий php есть?

  • Аватар

    Добрый день. На весте 10+ сайтов. сервер убунта 14, пхп 5.5. Нужно было чтобы mediawiki работала под 7 версией пхп (чтобы обновить саму медиавики до последней версии). Воспользовался скриптом и всё ок кроме 2 моментов. 1. как мне "доставить" плагин php7.1-ldap, к тому php, что я поставил через скрипт?
    2. если обновлять медиавики через консоль, то это запускается командой php update.php
    Т.к. требуемая версия пхп для обновления 7, то я запускал так: php71 update.php и получил такое результат:

    "X-Powered-By: PHP/7.1.21
    Content-type: text/html; charset=UTF-8

    This script must be run from the command line"

    Хотя и запускал не из консоли. Если установить php7 на весь сервер без скрипта, а обычным обновлением, то скрипт отрабатывает

  • Аватар

    Админ, помоги пожалуйста

    После установки в логах ошибка PHP Warning: Module 'ionCube Loader' already loaded in Unknown on line 0

    PHP Version 5.4.45

  • Аватар

    Подскажите как поставить memcache на debian8 php7.2
    уже стоит и работает на php5.6 , но на php7.2 не определяется, php7.2 устанавливался этим скриптом
    На apt-get install php7.2-memcache php7.2-memcached пишет
    E: Unable to locate package php7.2-memcache
    E: Couldn't find any package by regex 'php7.2-memcache'
    E: Unable to locate package php7.2-memcached
    E: Couldn't find any package by regex 'php7.2-memcached'

  • Аватар

    Привет читатели блога, для тех кто пытался на debian 9 установить PHP с помощью этого скрипта и словил ошибки, написал небольшую инструкции.

    Все действия необходимо производить под root, находясь в /home

    VestaCP установлена со всеми компанентами, предварительно в панели управления остановленны все службы, кроме fail2ban и iptables

    Сохраняем файл репозиториев, на всякий непредвиденный случай

    # cp /etc/apt/sources.list /etc/apt/sources.list.backup

    Вносим правки, добавляя запись к сушествующим репозиториям, это укажет debian искать пакеты со всех доступных репозиториев

    # nano /etc/apt/sources.list

    deb http://httpredir.debian.org/debian/ stretch main contrib non-free
    deb-src http://httpredir.debian.org/debian/ stretch main contrib non-free

    # apt-get update

    Установите необходимые пакеты в систему, без этого у вас вероятно не будет работать скрипт

    # apt-get install firmware-linux-free firmware-linux-nonfree --fix-missing

    # apt-get install linux-headers-`uname -r` binutils pkg-config build-essential --fix-missing

    # apt-get install libxml2-dev libssl-dev libpcre3 libpcre3-dev zlib1g-dev libbz2-dev libjpeg-dev libpng-dev libonig-dev libpspell-dev libreadline-gplv2-dev libxslt-dev --fix-missing

    # apt-get install git-core subversion build-essential autoconf automake libtool libncurses5 libncurses5-dev make libjpeg-dev gawk libz-dev pkg-config libcurl4-openssl-dev libexpat1-dev libx11-dev unixodbc-dev libasound2-dev libogg-dev libvorbis-dev libperl-dev libgdbm-dev libdb-dev python-dev uuid-dev software-properties-common wget --fix-missing

    # apt-get install libmagickwand-dev libmagickcore-dev --fix-missing

    # apt-get install php-dev --fix-missing

    # apt-get install libturbojpeg0-dev --fix-missing

    # apt-get install libjpeg62-turbo-dev --fix-missing

    # apt-get install libmcrypt-dev --fix-missing

    Меняете значения в mgrvphp этот файл находится в папке со скриптом

    строка 54 меняете http://php.net/releases/ на https://secure.php.net/downloads.php

    строка 57 меняете http://php.net/downloads.php на https://secure.php.net/downloads.php

    строка 58 меняете http://php.net на https://php.net

    строка 70 меняете http://php.net на https://php.net

    Это пути по которым скрипт ищет файлы для скачивания, но у меня скрипт по непонятной мне причине идет за файлами для скачивания вот сюда http://am1.php.net/distributions причем страница не защишена HTTPS. Значит верим в то что это не страница злых редисок которые хотят нам навредить, передовая файлы в открытом виде.
    У меня версия PHP 5.6 не собралась, собирались версии от PHP 7.0.32 и старше.
    Как собрать PHP 5.6 я копать не стал, так как уже очень скоро она поддерживаться перестанет. Если вы знаете как собрать PHP 5.6 делитесь информацией.

    Далее следуйте вот этой инструкции, предварительно перейдя в каталог /home пользователя root

    Это будет выглядеть вот так ( root@имя вашей машины:/home# )

    https://pupi-boy.ru/web-server/vestacp-versii-php-debian-ubuntu.html если вы читаете этот комментарий значит вы уже здесь

    В заключение подчистите опилки и прочий мусор, который остался после работы пилой и напильником

    # apt-get autoremove && apt-get autoclean

    Обновите параметры загрузчика и ядра

    # update-initramfs -u

    # update-grub2

    Перезагрузите систему !

  • Аватар

    Для версии 5.3.29 phpinfo выдаёт такое рсположение php.ini

    Loaded Configuration File (none)

  • Аватар

    после установки
    имею в логах ошибку
    PHP Warning: Module 'ionCube Loader' already loaded in Unknown on line 0

    • Аватар

      Решил проблему? Такая же беда.

      • Аватар

        /opt/php/php-5.3.29/etc/conf.d/ext.ini закоментировал строку с инициализацией ioncube

        • Аватар

          Loaded Configuration Fili (none)

          Проблема как-то была решена?

  • Аватар

    При установке php 5.6.30 выдает ошибку configure: error: Please reinstall the libcurl distribution -
    easy.h should be in /include/curl/
    Подскажите, как решить?

    • Аватар

      Попробуйте sudo apt-get install libcurl4-openssl-dev

    • Аватар

      Добрался я до этого скрипта, видимо Debian 9 не поддерживается. Пытался установить 7.2 выдает вашу ошибку, при ее устранении появляются и другие стандартные ошибки компилировании PHP.

      Помогла доустановка зависимостей и простое гугление этих ошибок:

      apt-get install libxml2-dev libssl-dev libpcre3 libpcre3-dev zlib1g-dev libbz2-dev libjpeg-turbo8-dev libjpeg-dev libpng-dev ibfreetype6-dev libonig-dev libpspell-dev libreadline-gplv2-dev libxslt-dev; cd /usr/include; ln -s x86_64-linux-gnu/curl
  • Аватар

    В процессе установки скрипт не предложил "Создавать шаблон VestaCP для каждой указанной версии? Нажимаем да У" соответственно новые шаблоны в Весте не появились.
    Enter php version/versions(for example 5.6.30):
    >5.3.1 5.4.10 5.6.0
    Create simlinks in /usr/bin?(y/N)
    >N
    If you select 'No', then you need to set the dependencies yourself. Otherwise, the installation will fail.
    Install packages and dependencies?(y/N)
    >y
    Start the installation of packages and dependencies. Please wait...
    При этом дополнительные версии PHP установились, судя по логам. Как-то можно вручную создать шаблоны или исправить?

    • Аватар

      На самом деле, про темплейты вас не спрашивает, потому что вы на вопрос про создание линков ("Create simlinks in /usr/bin?(y/N)") ответили "N". Судя по скрипту, для создания темплейтов обязательно должны создаваться линки.

  • Аватар

    Спасибо, потрясающий скрипт.
    И обьяснили доступно все
    Я только начал работать с выделенным сервером, ваша статья была очень полезна.
    Спасибо

  • Аватар

    Это работает только на 64 разрядности, на 32 не пашет, выдаёт ошибку:
    checking for pkg-config... /usr/bin/pkg-config
    configure: error: Cannot find OpenSSL's libraries
    Кто подскажет как установить?

  • Аватар

    Ставил php7 на Debian 7 c VestaCP, сконфигурированную без Апача (nginx+fpm). Оно ругнулось в конце (см.ниже).
    В opt/php/ - 650Мбайт этого самого php есть. А как его заставить работать на сайте и добавить в Весту - не знаю. 🙁
    Подскажите, пожалуйста.

    mgrvphp: line 152: apachectl: command not found
    mgrvphp: line 155: a2enmod: command not found
    apache2: unrecognized service
    mgrvphp: line 164: apachectl: command not found

  • Аватар

    Ребят, подскажите как в 2к17 поставить memcache для php5.
    P.S. спасибо за скрипт, очень помогло

    • Аватар

      может?

      apt-get install memcached php5-memcache
      • Аватар

        Я конечно тупой, но не на столько.
        Unable to locate package php5-memcache
        ubuntu 16
        Поэтому и спрашиваю, в стандартных репозиториях php 5 нету уже давно.

  • Аватар

    Насколько велик риск что-то сломать? Стоит ли запускать данный скрипт на боевой машине?

    • Аватар

      Небольшой риск есть всегда, советую поставить стразу на тестовую машину, если есть какая-то неуверенность. У меня проблем не возникало.

  • Аватар

    Здравствуйте.
    Спасибо за статью. Очень помогла!
    А можете подсказать, где найти файлы php.ini каждой из версий?
    Заранее благодарен!

    • Аватар

      В phpinfo должно быть написано. Вот пример:
      Phpinfo

  • Аватар

    Статья отличная, однако подобная уже есть.
    https://anikin.pw/all/menedzher-versiy-php/
    В целом в блоге много тематической инфы, в том числе достаточно редкой. Автору спасибо!

    • Аватар

      Аникин - является создателем этого менеджера, но мне не нравится как он пишет. На счет редкой инфы - это зачастую придуманное мною решение проблемы. Сюда можно отнести вторую часть статьи про активацию файлового менеджера и статью про персонализацию панели.

Оставить комментарий

* Возможна анонимная отправка комментария.

Согласен с политикой конфиденциальности *