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):
Категория: Заметки
Добрый! Делал по твоему ману, все норм только почта не шлется. Напиши, как сделать?
Привет, нужно смотреть лог ошибок сервера, чтобы понять, какую функцию использует скрипт отправки почты. Возможно эта функция запрещена в php.ini в disable_functions.
Привет. Спасибо за статью.
BrainyCP в итоге попробовал?
На чем остановился BrainyCP или VestaCP?
VestaCP уже года два нормально не разрабатывается …
Юзайте форк hestiacp