VestaCP + Nginx + PHP-FPM + PHP 7.3

Данная статья рассматривает установку сервера на базе Centos 7, которая подойдет как для работы SEoDOR, так и других движков.

Устанавливать будем панель VestaCP в связке Nginx + PHP-FPM, а затем обновим PHP до версии 7.3. Также установим ionCube и PDO, активируем файловый менеджер в VestaCP, «ускорим» open_basedir и отключим опасные функции в php.ini.

Внимание! Временно не рекомендуется настраивать сервер по данному мануалу в связи с выходом PHP 7.4, который автоматически устанавливает VestaCP и на котором многое пока не работает! В данный момент идет доработка мануала — зайдите, пожалуйста, позже или попробуйте установить BrainyCP.

Примечание: в этой сборке .htaccess работать не будет! Вместо него все правила прописываются в шаблоне Web NGINX!

Содержание:

Установка CURL, ZIP
VestaCP + Nginx + PHP-FPM
Установка PHP 7.3
Установка ionCube
Установка PDO для работы SQLite3
Обновление SQLite3
Добавление nginx-шаблонов в панель Vesta
Активация SFTP Chroot и файлового менеджера в VestaCP
Ускорение open_basedir
Оптимизация PHP-FPM
Отключение опасных функций в /etc/php.ini

0. Установка CURL, ZIP

yum -y install curl unzip zip 2>/dev/null

1. VestaCP + Nginx + PHP-FPM

Скачаем скрипт инсталляции:

curl -O http://vestacp.com/pub/vst-install.sh

Далее переходим сюда. В конфигураторе выбираем nginx + php-fpm и другие настройки. Прописываем в пустых полях хостнейм, почту администратора панели и пароль к панели. Нажимаем Generate Install Command:


Полученную команду копируем в консоль и подтверждаем установку «y».

После установки панель будет доступна по адресу https://ip_сервера:8083/

Обновим все системное ПО до последней версии с помощью менеджера пакетов yum:

yum -y update

2. Установка PHP 7.3

Проверим, какая версия PHP установлена:

php -v

После выхода PHP 7.4 (28.10.2019) VestaCP начала автоматическую установку этой версии, но с ней пока что несовместимы некоторые вещи, такие как IonCube и др. Поэтому на придется понизить версию PHP до 7.3.

Установим yum-utils, если она еще не установлена. yum-utils будет использоваться для включения версий PHP:

yum -y install yum-utils

Включим репозитарий Remi PHP 7.3 и отключим остальные. Также удалим установленный PHP 7.4:

yum-config-manager --disable remi-php5*
yum-config-manager --disable remi-php74
yum-config-manager --disable remi-test
yum-config-manager --enable remi-php73
yum -y remove php php-*

После того, как репозиторий включен, установим PHP 7.3:

yum -y install php-fpm

Установим phpMyAdmin:

yum install phpmyadmin -y

Перезапустим nginx и php-fpm:

systemctl restart nginx
systemctl restart php-fpm

Убедимся, что PHP 7.3 установлен:

php -v

3. Установка ionCube

wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar zxf ioncube_loaders_lin_x86-64.tar.gz
rm -rf ioncube_loaders_lin_x86-64.tar.gz
mv ioncube /usr/local

Прописываем IonCube Loader в конфиг /etc/php.ini:

echo "" >> /etc/php.ini
echo "[Zend Modules]" >> /etc/php.ini
echo "zend_extension = /usr/local/ioncube/ioncube_loader_lin_7.3.so" >> /etc/php.ini
echo "zend_extension_ts = /usr/local/ioncube/ioncube_loader_lin_7.3_ts.so" >> /etc/php.ini

Перезапустим php-fpm:

systemctl restart php-fpm

Убедимся, что ionCube установлен:

php -m

4. Установка PDO для работы SQLite3

После выхода PHP 7.4 (28.10.2019) VestaCP начала автоматическую установку версии 7.4 с установленным PDO и SQLite. Поэтому пункты 4 и 4.1 можно пропустить и перейти сразу 5-му.

yum -y install php-pdo

4.1. Обновление SQLite3 до 3.28.0

Проверим текущую версию:

php -i | grep -Pzo 'SQLite3 support => .*?\s*SQLite Library => .*?$'

и если она старее чем 3.24 (например, 3.7), то обновим SQLite3:

yum -y install sqlite-devel php-devel
wget https://www.php.net/distributions/php-7.3.11.tar.gz && tar zxvf php-7.3.11.tar.gz
cd /root/php-7.3.11/ext/sqlite3/
cp config0.m4 config.m4
phpize
./configure
make
make install
cd ~
rm -r -f php-7.3.11
rm -r -f php-7.3.11.tar.gz

5. Добавление nginx-шаблонов в панель Vesta

Скачиваете nginx-шаблон seodor5 и копируете файлы в папку
/usr/local/vesta/data/templates/web/nginx/php-fpm/ :

cd /usr/local/vesta/data/templates/web/nginx/php-fpm
curl -O https://seodor.biz/public/vestacp_nginx_phpfpm.zip
unzip vestacp_nginx_phpfpm.zip
rm -r -f vestacp_nginx_phpfpm.zip
cd ~

Далее, при создании в панели нового домена или редактировании существующих, выбираем шаблон nginx соответствующий используемой вами CMS и сохраняем изменения. Этого всего достаточно, чтобы ваши сайты начали работать в связке nginx и php-fpm.

6. Активация SFTP Chroot и файлового менеджера в VestaCP

echo "FILEMANAGER_KEY='mykey'" >> /usr/local/vesta/conf/vesta.conf
echo "SFTPJAIL_KEY='mykey'" >> /usr/local/vesta/conf/vesta.conf
sed -i -e "s~.*checkout.*~#v_host='https://vestacp.com/checkout'~g" /usr/local/vesta/bin/v-activate-vesta-license
sed -i -e "s~.*curl.*~#answer=$(curl -s $v_host/activate.php?licence_key=$license;module=$module)~g" /usr/local/vesta/bin/v-activate-vesta-license
sed -i -e "s~.*check_result.*~check_result $? 'cant connect to vestacp.com ' $E_CONNECT\nanswer=0~g" /usr/local/vesta/bin/v-activate-vesta-license
sed -i -e "s~.*v-check-vesta-license.*~#$BIN/v-check-vesta-license >/dev/null~g" /usr/local/vesta/bin/v-backup-users

7. Ускорение open_basedir

Как известно, использование open_basedir значительно замедляет скорость загрузки сайта, но если вы не хотите отказываться от этой опции, то рекомендую установить realpath_turbo — данное расширение включит кеширование путей и ваши сайты будут работать с такой же скоростью, как если бы вы не использовали опцию open_basedir.

curl -o realpath_turbo.zip "https://seodor.biz/public/realpath_turbo.zip"
unzip realpath_turbo.zip
cd realpath_turbo
phpize
./configure
make
make install
echo "" >> /etc/php.ini
echo "extension=realpath_turbo.so" >> /etc/php.ini
echo "realpath_turbo.disable_dangerous_functions = 1" >> /etc/php.ini
cd ~
rm -r -f /root/realpath_turbo
rm -r -f realpath_turbo.zip

Также в /etc/php.ini не забудьте отключить опцию open_basedir, если она включена:
;open_basedir=
Вместо нее будет использоваться опция realpath_turbo.open_basedir.

Теперь один из двух вариантов (1-й подходит для Сеодора):
1) в шаблоне nginx seodor5 раскомментируйте строку (в 2-х файлах — tpl и stpl):

sed -i -e "s~.*realpath_turbo.*~\t\t\trealpath_turbo.open_basedir=/tmp/:/home/%user%/tmp/:/proc/meminfo:/proc/stat:%home%/%user%/web/%domain%/public_html/~g" /usr/local/vesta/data/templates/web/nginx/php-fpm/seodor5.tpl
sed -i -e "s~.*realpath_turbo.*~\t\t\trealpath_turbo.open_basedir=/tmp/:/home/%user%/tmp/:/proc/meminfo:/proc/stat:%home%/%user%/web/%domain%/public_html/~g" /usr/local/vesta/data/templates/web/nginx/php-fpm/seodor5.stpl

2) Шаблон PHP-FPM:

echo "php_admin_value[realpath_turbo.open_basedir] = /home/%user%/web/%domain%/public_html/" >> /usr/local/vesta/data/templates/web/php-fpm/default.tpl

8. Оптимизация PHP-FPM

Делаем фиксированным количество дочерних процессов. В pm.max_children укажем 30 — это число зависит от кол-ва свободной памяти на сервере:

sed -i -e "s~.*ondemand.*~pm = static~g" /usr/local/vesta/data/templates/web/php-fpm/default.tpl
sed -i -e "s~.*max_children.*~pm.max_children = 30~g" /usr/local/vesta/data/templates/web/php-fpm/default.tpl

9. Отключение опасных функций в /etc/php.ini


sed -i 's/disable_functions =/disable_functions = get_defined_constants, apache_get_modules, virtual, getmyinode, apache_get_version, apache_getenv, ini_restore, openlog, syslog, highlight_file, show_source, symlink, ini_get_all, phpinfo, pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, exec, shell_exec, system, passthru, popen, proc_close, proc_get_status, proc_nice, proc_terminate, leak, listen, chown, chgrp, apache_note, apache_setenv, closelog, debugger_off, debugger_on, define_sys, getmyuid, getmypid, diskfreespace, dl, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname/g' /etc/php.ini

Перезапустите php-fpm:

systemctl restart php-fpm

После настройки сервера в VestaCP добавляете новый домен и для него применяете шаблоны Web NGINX (seodor5) и Backend PHP-FPM (default):

Категория: Заметки

Комментари (4)

Trackback URL | Comments RSS Feed

  1. Viktor:

    Добрый! Делал по твоему ману, все норм только почта не шлется. Напиши, как сделать?

    • Sanchez:

      Привет, нужно смотреть лог ошибок сервера, чтобы понять, какую функцию использует скрипт отправки почты. Возможно эта функция запрещена в php.ini в disable_functions.

  2. AlektroNik:

    Привет. Спасибо за статью.
    BrainyCP в итоге попробовал?
    На чем остановился BrainyCP или VestaCP?
    VestaCP уже года два нормально не разрабатывается …

  3. blyatman:

    Юзайте форк hestiacp

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