Обновление Linux сервера для поддержки PHP 7.0

Обложка от PONTIER

Вступление

В прошлом декабре состоялся релиз PHP 7. Пора обновлять продакшн-сервер, чтобы перенести туда уже протестированный код. Если говорить обобщённо, то мои сайты на новой конфигурации работают отлично.

Несмотря на это у меня есть подозрение, что далеко не все обновили начинку своих серверов. Зачастую проще остаться на более стабильном релизе. Именно поэтому статистика работы сайтов на WordPress показывает следующие цифры:

"По состоянию на Ноябрь 2016, 52.9% WordPress проектов работают на PHP 5.5 и ниже. И только 3.4% сайтов из указанной категории переехали на PHP 7, текущую версия языка." Информация со страницы плагина PHP Compatibility Checker.

Всё это при том, что с момента выхода PHP 7 уже прошло больше года.

В этом уроке я бы хотел поделиться своими рекомендациями по обновлению до PHP 7 на Ubuntu 14.x, а также рассказать о том как наладить работу PHPMyAdmin.

Если вы работаете с WordPress, установите плагин PHP Compatibility Checker чтобы убедиться, что все ваши плагины полностью совместимы с новой версией языка, и дополнительных проблем не возникнет.

Также вы можете связаться со мной напрямую через Twitter по логину @reifman. Таким образом мы всегда сможем поддерживать актуальность информации.

Обновление вашего сервера

В процессе обновления до PHP 7, я столкнулся с несколькими трудностями. Именно поэтому сценарий действий, который я сформировал, прогонялся раз за разом пока не стал стабильным.

В очередной раз хотел бы отметить отличную работу Digital Ocean, которая позволяет сделать резервную копию сервера и добавить тестовые машины для организации процесса обновления с нуля.

Итак, начнём.

Сделайте копии специальных настроек PHP 5

В первую очередь вам необходимо выписать все директивы, которые были добавлены в PHP .ini. Впоследствии подключим их к PHP 7.

Следующая команда поможет найти местоположение .ini файла:

$ php --ini

Результат работы команды:


$ php --ini 
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20121212/newrelic.so' - /usr/lib/php5/20121212/newrelic.so: cannot open shared object file: No such file or directory in Unknown on line 0
Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File: /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
...

В случае работы с Apache, путь на моей машине такой: /etc/php5/apache2.

Удаление PHP5 и связных пакетов

Для начала давайте почистим систему от PHP пакетов. Опираясь на свой опыт сразу скажу, что сделать это лучше не только для PHP5, но и для 5.5 и 5.6.


$ sudo apt-get -y purge php php-common php-mcrypt php-mbstring
$ sudo apt-get -y purge php5 php5-common php5-cli libapache2-mod-php5 php5-curl php5-gd php5-imap php5-intl php5-json php5-mcrypt php5-mysql php5-pspell php5-readline php5-sqlite
$ sudo apt-get -y purge php5.5 php5.5-common php5.5-mcrypt php5.5-mbstring
$ sudo apt-get -y purge php5.6 php5.6-common
$ sudo apt-get autoremove

Подготовка к установке PHP7 и PHPMyAdmin


$ sudo add-apt-repository ppa:ondrej/php
Co-installable PHP versions: PHP 5.5, 5.6, PHP 7.0 and batteries included.

You can get more information about the packages at https://deb.sury.org

For PHP 5.4 on Ubuntu 12.04 use: ppa:ondrej/php5-oldstable

BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/#bug-reporting

PLEASE READ: If you like my work and want to give me a little motivation, please consider donating regularly: https://donate.sury.org/

WARNING: add-apt-repository is broken with non-UTF-8 locales, see https://github.com/oerdnj/deb.sury.org/issues/56 for workaround:

# LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php
More info: https://launchpad.net/~ondrej/+archive/ubuntu/php
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmpj6czswxr/secring.gpg' created
gpg: keyring `/tmp/tmpj6czswxr/pubring.gpg' created
gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmpj6czswxr/trustdb.gpg: trustdb created
gpg: key E5267A6C: public key "Launchpad PPA for Ond?ej Surý" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

После этого запускаем обновление пакетов и дистрибутивов. Затем подчищаем оставшиеся файлы:


$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get autoremove

Вы можете столкнуться с подобной ошибкой:


The link /vmlinuz.old is a damaged link
Removing symbolic link vmlinuz.old
you may need to re-run your boot loader[grub]

После выполнения подобных действия я предпочитаю перезагрузить систему:

$ sudo reboot

Установка PHP7

Теперь давайте установим PHP7 и все зависимые пакеты:

sudo apt-get install php7.0 php7.0-mysql libapache2-mod-php7.0 php-apcu php7.0-gd php7.0-mcrypt php-memcache php7.0-curl php7.0-tidy php-xml php-json php7.0-mbstring php-gettext libmcrypt-dev mcrypt php-gd libmcrypt4 libmhash2 libtidy5 libxslt1.1 php-apcu-bc php-pear php7.0-mbstring php7.0-xml

На данном этапе нам нужно переместить все наши настройки в новый файл конфигурации /etc/php/7.0/apache2/php.ini.

Также добавим запись extension=apc.so в php.ini:

$ sudo nano /etc/php/7.0/apache2/php.ini

Я добавил следующий текст:


;extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_shmop.dll
extension=apc.so

Отключение PHPMyAdmin

Для того чтобы завести PHPMyAdmin, нужно перезапустить Apache. Отключить на время PHPMyAdmin:

$ sudo nano /etc/apache2/apache2.conf

Закомментируйте последнюю строчку:


 # Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
# Include /etc/phpmyadmin/apache.conf

Далее я активирую mcrypt и mbstring и перезапускаю Apache:


$ sudo phpenmod mcrypt
$ sudo phpenmod mbstring
$ sudo service apache2 restart

Я тестировал эту конфигурацию на сайтах, созданных на HTML, PHP и Yii1.x. Всё работало хорошо.

Переустановка PHPMyAdmin

Следующим шагом будет “оживление” PHPMyAdmin. Множество людей наступали на эти грабли.

Для начала добавим репозиторий пакетов от nijel:


$ sudo add-apt-repository ppa:nijel/phpmyadmin
Latest phpMyAdmin packages - https://www.phpmyadmin.net/. Based on packages available in Debian.

There are some notable changes:

* it currently requires updated PHP packages, you can get packages from https://launchpad.net/~ondrej/+archive/ubuntu/php/
* it does include embedded copies of PHP libraries

If you like phpMyAdmin, you can support it's further development at https://www.phpmyadmin.net/donate/ or https://www.phpmyadmin.net/sponsors/, thanks!
More info: https://launchpad.net/~nijel/+archive/ubuntu/phpmyadmin
Press [ENTER] to continue or ctrl-c to cancel adding it

gpg: keyring `/tmp/tmp6zix40vr/secring.gpg' created
gpg: keyring `/tmp/tmp6zix40vr/pubring.gpg' created
gpg: requesting key 06ED541C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp6zix40vr/trustdb.gpg: trustdb created
gpg: key 06ED541C: public key "Launchpad PPA for Michal ?iha?" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

Далее обновляем пакеты и устанавливаем PHPMyAdmin:


$ sudo apt-get update
$ sudo apt-get install phpmyadmin

Заметка: данный процесс затронет несколько пакетов PHP 5.x, но работе PHPMyAdmin это не помешает.

Теперь раскомментируем строчку, затронутую ранее.

$ sudo nano /etc/apache2/apache2.conf

Вот так:


 # Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Include /etc/phpmyadmin/apache.conf

Перезапускаем Apache:

$ sudo service apache2 restart

Проверяем работу PHP 7

Создайте файл и поместите туда вызов phpinfo(); чтобы проверить активность PHP 7:

Завершение

В моём случае обновление PHP до седьмой версии на Ubuntu 14.x проходило не очень гладко. Именно поэтому я решил собрать и записать список последовательных действий. Надеюсь, что сегодняшний урок оказался полезен.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://code.tutsplus.com/tutorials/upgrading-your-linux-server-to-php-7--cms-27583
Перевел: Станислав Протасевич
Урок создан: 14 Апреля 2017
Просмотров: 1165
Правила перепечатки


5 последних уроков рубрики "PHP"

^ Наверх ^