Сменить версию php vesta

Установка дополнительных версий PHP в VestaCP с помощью Docker

Наверное, многие сталкивались с ситуацией, когда среди проектов, работающих на современном ПО, остается пара полузабытых, а держать отдельную машину под них не хочется. Вариантов решения — масса, но в службе поддержки хостинг-компании данная проблема не теряет своей актуальности. Мои коллеги разработали скрипт, помогающий добавить нужную версию PHP в VestaCP буквально за пару минут. Данный метод уже зарекомендовал себя с хорошей стороны, и он продолжает радовать сотрудников поддержки. Самое время его опубликовать и помочь всем, кто столкнулся с подобной проблемой.

Для того чтобы воспользоваться решением, достаточно скопировать одну строчку в терминал, но мы рассмотрим чуть подробнее, как всё это работает.

Установка

Будет установлен (если не был установлен ранее) docker через унифицированный инсталлятор (проверялся на CentOS7 и Ubuntu).

Последний аргумент в команде — желаемая версия PHP. В настоящий момент доступны версии PHP: 5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2 и 7.3. Скрипт создаст шаблон для Vesta и два сервисных файла: docker.httpd и docker.php.56.

Все сервисы выполняют установку/обновление образов, в связи с чем первый запуск (например, подключение шаблона в “Весте”) либо перезапуск при наличии обновлений может занять некоторое время.

PHP запускается от имени www-data. На хосте будет создан (если еще нет) соответствующий пользователь. Владелец директории сайта будет изменен на www-data, группа останется прежняя. Также будет создана директория /opt/docker/ для хранения конфигурационных файлов.

В итоге мы потратим ~700 Мб на установку самого докера и около ~300Мб на образы, но получим прирост производительности. Результаты измерения производительности средствами Bitrix в 1.5-2 раза выше для связки VestaCP + Docker, чем при использовании аналогичной версии PHP в качестве модуля Apache.

Установка на одноядерный процессор

При установке докер-контейнера на сервер с одноядерным процессором (cpu=1) не будет автоматически запускаться контейнер PHP.
В таких случаях необходимо отредактировать файл /etc/systemd/system/docker.php.56.service (где 5.6 — установленная версия PHP):

Далее перезапустить докер:

systemctl stop docker
systemctl start docker

После чего переключить на нужную версию PHP в панели VestaCP. В случае если нужная версия уже выбрана, то необходимо переключить на дефолтную, сохранить и снова переключить на нужную версию PHP.

Схема работы

Схема работы выглядит следующим образом:

Nginx -> apache в контейнере -> php-fpm в контейнере.

Apache потребовалось запаковать в контейнер (~80mb) из-за различий версий между CentOS и Apache. Версия в Centos не позволяет корректно проксировать запросы на fpm.

Apache запускается на порту 9080, поэтому скрипт редактирует конфигурацию nginx. Переключение на стандартный шаблон Vesta (default) вернет прежний порт (8080).

PHP запускается на 9000+version, то есть 9056, 9070, 9072 и т.д.

HTTPD

httpd запускается следующим образом:

docker run —rm —network host
-v /home:/home
-v /var/log/httpd/domains:/var/log/apache2/domains
-v /opt/docker/conf/web:/usr/local/apache2/conf/vhosts
—name docker-httpd kotpoliglot/php:httpd

В /opt/docker/conf/web лежат хосты, httpd в контейнере с минимальным набором модулей из-за экономии ресурсов, хосты для контейнеров хранятся в /opt/docker/conf/web, в директории Vesta (/home/admin/conf/web/) создается пустой файл.

Читайте также:  Анаконда компилятор для питона

PHP

PHP запускается следующим образом:

docker run —rm —network host —cpus=2
-v /etc/passwd:/etc/passwd
-v /etc/group:/etc/group
-v /etc/hosts:/etc/hosts
-v /var/lib/mysql/mysql.sock:/var/run/mysqld/mysqld.sock
-v /opt/docker/conf/php/56/php.ini:/usr/local/etc/php/conf.d/docker.ini
-v /home:/home —name php-56 kotpoliglot/php:56

passwd и group передаются в контейнер из-за различных требований к uname и uid в CentOS и Ubuntu.

/etc/hosts — внешние адреса доменов Vesta, они нужны в контейнере для корректной работы сокетов в Bitrix, например. Файл обновляется при каждом переключении шаблонов в Vesta.
/opt/docker/conf/php/56/php.ini — файл, с помощью которого можно повлиять на параметры PHP в контейнере.

Добавление модулей и пакетов

При необходимости можно добавить тот или иной модуль или пакет в контейнер. Образы собраны на основе alpine для экономии ресурсов. Пакеты ставятся через apk, например, создаем Dockerfile cо следующим содержимым:

FROM kotpoliglot/php:56
RUN apk add —no-cache libpng-dev

Затем сохраняем файл и выполняем:

PHP

В случае, если требуется модуль для PHP, в контейнерах есть набор скриптов docker-php-ext-configure, docker-php-ext-install и docker-php-ext-enable (описание).

Установка будет выглядеть следующим образом: создаем Dockerfile в произвольной директории со следующим содержимым:

FROM kotpoliglot/php:56
RUN docker-php-ext-install zip

Будет создан новый образ с прежним именем и установленным модулем.

сервисном файле стоит удалить ExecStartPre=/usr/bin/docker pull kotpoliglot/php:56, чтобы запускался локальный образ, а не заново скачанный с DockerHub.

Сервисные файлы доступны по пути /etc/systemd/system/.

Если инструмент показался вам полезным — дайте знать, мы подготовим подобное решение, например, для панели ISPConfig.

Источник

Переключение версий php для домена (VestaCP) Print

По умолчанию домены работают на основной версии PHP это php-mod. Чтобы изменить php версию на другую существует несколько способов:

Переустановить текущую основную версию php на желаемую. Это может затронуть работу доменов уже работающих на основной версии PHP. Домен будет работать в режиме mod-php.

Сменить Web Template для домена.Для этого используется php-selector. Домен будет работать в режиме CGI/FastCGI. Для этого используется php-selector.

Первый способ применяется когда для работы домена нужен именно режим mod-php, но домен не хочет работать на текущей основной версии php и режим CGI ему не подходит. Второй способ является безболезненным его мы и рассмотрим.

Второй способ доступен только для ОС CentOS. Для Debian или Ubuntu не раелизован php-selector и нету возможности в панели управления выбирать разные версии PHP!

Для смены версии PHP нужно перейти в пункт меню WEB и напротив нужного домена выбрать EDIT . Дальше в настройках домена нас интересует поле Web Template , по умолчанию там установлено значение default — это и есть режим работы mod-php. Изменим его например на php-7.0, для этого выбираем sk-php70 и сохраняем.

Дальше чтобы убедиться что наши действия действительно применились, можно проверить информацию о PHP

По умолчанию для доменов доступны следующие версии PHP: php-5.5, php-5.6, php-7.0. Если нам хочеться версию PHP посвежее прийдется пошаманить немножко в консоли. Нужно залогиниться в консоль под пользователем root, скачать установочный скрипт и установить нужные нам версии PHP. После чего они станут доступны для доменов.

wget https://cdn.swiftcloud.ru/vestacp/sk-php-selector.sh bash sk-php-selector.sh php71 php72
[root@myservak ~]# wget https://cdn.swiftcloud.ru/vestacp/sk-php-selector.sh --2018-07-02 00:41:10-- https://cdn.swiftcloud.ru/vestacp/sk-php-selector.sh Распознаётся cdn.swiftcloud.ru (cdn.swiftcloud.ru). 81.177.140.54 Подключение к cdn.swiftcloud.ru (cdn.swiftcloud.ru)|81.177.140.54|:443. соединение установлено. HTTP-запрос отправлен. Ожидание ответа. 200 OK Длина: 5522 (5,4K) [application/x-sh] Сохранение в: «sk-php-selector.sh» 100%[================================================================================================================================================================================================>] 5.522 --.-K/s за 0s 2018-07-02 00:41:11 (370 MB/s) - «sk-php-selector.sh» сохранён [5522/5522] [root@myservak ~]# bash sk-php-selector.sh php71 php72 You have remi repo installed and run: CentOS Linux release 7.4.1708 (Core) ########## Start installing aditional php version ########## Actually you runing php 5.6, so I will skip it Installing PHP 7.1 . PHP 71 Ready! Actually you runing php 5.6, so I will skip it Installing PHP 7.2 . PHP 72 Ready! ################################ Aditional PHP versión installed! More info on skamasle.com or vestacp forums or twit your experience in @skamasle

Данным скриптом возможно доустановить следующие версии: php-5.4, php-5.5, php-5.6, php-7.0, php-7.1, php-7.2

Читайте также:  Знак новой строки python

Источник

How to upgrade the php version to php7.4 in VestaCP or Vesta on Ubuntu.

VestaCP or vesta is the most recommended, free, and open-source hosting application. Till this post, it uses a 7.2 version of PHP. In this post, I will install or upgrade php7.4 in vesta.
First, let’s check the current PHP version.

The output of the command will be looks like this.

PHP 7.2 on vesta

The second method to verify the PHP version is, create a phpinfo.php file in the root directory and add this line without quote “ “. Restart the apache2 service and refresh or browse the web page. Your URL will be http://example.com or IP_address/pfpinfo.php

PHP version check vesta GUI

We have tested and verified the PHP version. The current version is 7.2
Let’s install and configure the php7.4 on the vesta.
Install software common properties and PHP pap repository.

# apt install software-common-properties
# add-apt-repository ppa:ondrej/php

After installing the software common properties and php ppa repository. Install the php7.4 and common extensions.

# apt install php7.4
# apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl

PHP 7.4 is installed successfully. Let’s check again the PHP version from both methods. Running PHP -v command and refreshing or browsing the website. php -v command shows that the PHP version is upgraded to the 7.4 but the website or vesta does not acknowledge the up-gradation of PHP. It is still using php7.2.
Because of apache still bind to the php7.2. To fix this issue, we need to disable php7.2 and enable php7.4 with apache2. And restart the apache2 service.

# a2dismod php7.2
# a2enmod php7.4
# systemctl restart apache2

Now, Apache2 binds with php7.4, and vesta also working fine with it.

php7.4 gui vesta

Yes, we successfully upgrade to the php7.4. Now we can remove the php7.2 from the system and make sure that everything is working fine.

Читайте также:  Встраивание объектов в html

# apt remove php7.2*
# apt autoremove

Reboot your system. Everything should be fine now.
If you missed some common extensions of php7.4, the issue will be unable to access PHPMyAdmin and Roundcube email. Install those extensions and reboot the whole vesta system, or restart the php-fpm, Apache2, and vesta service. The link below is the troubleshooting of Roundcube if there is any database-related issue after upgrading to php7.4.
Fix roundcube database-related issue

If you have any questions regarding this topic, please leave the comment below.

35 Comments

Way cool! Some extremely valid points! I appreciate you writing this write-up plus the rest of the site is also very good.

Its not my first time to pay a quick visit this
web page, i am browsing this website dailly and get good
information from here every day.

I like what you guys are usually up too. This type of clever work
and exposure! Keep up the superb works guys I’ve added you guys to
my blogroll.

It’s really a cool and helpful piece of information. I’m happy that
you just shared this helpful info with us. Please keep us up to date like this. Thanks for sharing.

I absolutely love your blog.. Pleasant colors & theme. Did you make this website yourself?
Please reply back as I’m trying to create my own personal website and want to find out where you got this from or what the theme
is named. Many thanks!

you’re truly a excellent webmaster. The website
loading speed is incredible. It kind of feels that
you are doing any distinctive trick. In addition,
The contents are masterwork. you have done a great task on this topic!

While these tricks are easy to into your regular conversation routine, correctly practiced
often. Bring the fear right down to the tiny thing
around the globe. or, again, pick a different emotion altogether.

Thanks for this great tutorial. I was able to successfully upgrade from php7.2 to php7.4. I have one question though, I’m hoping someone can help answer. After I installed php7.4 and enabled it on apache. “php -v” showed that I had php7.4 installed. However, after I run the command “apt remove php7.2*”, the installer will remove php7.2 and then automatically install php8.0. When I check with “php -v” after I run the apt remove command, it shows that php8.0 has been installed. Why does this happen and how to avoid it? And does it matter? It seems that since I did not enable it, php7.4 is still running and shows when I do a phpinfo(); command in a php file, but I’m just concerned that php8.0 has been installed and may break something else. Any help would be appreciated!

Thanks for the tutorial, noticed one quick fix: # systemctl restart apoache2
should read:
# systemctl restart apache2

Источник

Оцените статью