Искать в Базе знаний

Панель управления Vesta

Установка панели

Vesta — популярная бесплатная панель управления сервером. Стандартная комплектация её ПО достаточно требовательна к ресурсам: рекомендуем выбрать бокс как минимум с 2 Гб RAM.
Vesta устанавливается двумя командами – скачиванием скрипта панели Vesta и его выполнением на VDS. А ещё у нас есть готовый образ с другой сборкой этой панели — Hestia. В ней больше возможностей, а её разработчики выпускают обновления чаще, чем разработчики Vesta.
Нам понадобится SSH-клиент и данные для доступа к боксу: IP-адрес, root и его пароль.
Менеджер пакетов может отличаться в зависимости от ОС. В примере показана установка на Ubuntu, поэтому используется apt-get.
  • Скачиваем скрипт установки:
curl -O http://vestacp.com/pub/vst-install.sh
  • Обновляем индекс пакетов
apt-get update
  • Запускаем установщик Vesta
bash vst-install.sh
  • Если по умолчанию cURL в сборке отсутствует, его необходимо установить
apt-get install curl
При удачном завершении установки в консоли будет
=======================================================

_|      _|  _|_|_|_|    _|_|_|  _|_|_|_|_|    _|_|   
_|      _|  _|        _|            _|      _|    _| 
_|      _|  _|_|_|      _|_|        _|      _|_|_|_| 
_|  _|    _|              _|      _|      _|    _| 
_|      _|_|_|_|  _|_|_|        _|      _|    _| 

Congratulations, you have just successfully installed Vesta Control Panel

https://test.domain.ru:8083
username: admin
password: bN7YnOBNmc

We hope that you enjoy your installation of Vesta. Please feel free to contact us anytime if you have any questions.
Thank you.

--
Sincerely yours
vestacp.com team

Базовые операции в веб-интерфейсе

Создание почтового ящика

Для создания почтового ящика переходим в раздел «MAIL», нажимаем на кнопку «ADD ACCOUNT» рядом с именем почтового домена, далее в полях формы указываем имя ящика и пароль. При необходимости данные для авторизации можно отправить на желаемый почтовый адрес.
После нажимаем на кнопку «ADD».

Создание FTP-аккаунта

Для создания FTP-аккаунта переходим в раздел «WEB», нажимаем на кнопку «EDIT» рядом с именем домена, для которого требуется создать аккаунт, пролистываем открывшуюся страницу вниз, отмечаем галочкой «Additional FTP» и вводим данные для нового аккаунта.
После нажимаем на кнопку «SAVE».

Работа с заданиями Cron

Редактирование заданий производится в разделе «CRON».
Добавить задание можно с помощью кнопки «+» (ADD CRON JOB). Поля для времени выполнения задания могут быть заполнены автоматически, если выбрать периодичность в форме справа в нижней части раздела.
Для изменения уже добавленного задания нажимаем на кнопку «EDIT» рядом с ним.

Работа с резервными копиями

Для создания резервной копии переходим в раздел «BACKUP», нажимаем на «+» (CREATE BACKUP). Когда операция будет завершена, на адрес администратора поступит уведомление.
Созданный бекап можно скачать, восстановить или удалить. С помощью кнопки «CONFIGURE RESTORE SETTINGS» рядом с именем копии можно изменить параметры восстановления.
Изменить количество максимально возможных резервных копий можно в разделе «PACKAGES», кликнув на «EDIT» рядом с шаблоном (по умолчанию DEFAULT) и изменив значение поля «Backups». Как правило, по умолчанию данное значение равно 3.

Создание базы данных

Для создания базы данных переходим в раздел «DB», нажимаем на «+» (ADD DATABASE), заполняем необходимые поля. Данные для авторизации можно отправить на желаемый почтовый адрес.
После нажимаем на кнопку «ADD».

Изменение параметров PHP

Для изменения параметров PHP в разделе «SERVER» нажимаем на «CONFIGURE» рядом с любым веб-сервером, а затем нажимаем на «CONFIGURE PHP.INI». Можно открыть по прямой ссылке: https://IP-БОКСА:8083/edit/server/php/
Сперва отображается форма с полями для изменения следующих параметров:
max_execution_time
max_input_time
memory_limit
error_reporting
display_errors
post_max_size
upload_max_filesize
Чтобы отредактировать файл php.ini напрямую, нажимаем на ссылку «ADVANCED OPTIONS» под полями формы.
Вернуться обратно можно с помощью кнопки «BASIC OPTIONS».
Для сохранения изменений нажимаем кнопку «SAVE».

Работа с PhpMyAdmin

Перейти в PhpMyAdmin можно из раздела «DB» с помощью кнопки «PHPMYADMIN» или по прямой ссылке: https://IP-БОКСА:8083/phpmyadmin/
По умолчанию размер загружаемого дампа базы данных не может превышать 2Мб, чего недостаточно большинству дампов.
Чтобы это исправить, необходимо изменить параметры post_max_size и upload_max_filesize в настройках панели по инструкции из предыдущего пункта.
Если при работе с PhpMyAdmin возникают ошибки или у пользователя базы данных не работают некоторые функции, то можно воспользоваться патчем от разработчиков. Вносимые исправления и принцип работы скрипта описаны в теме.

Установка произвольного SSL-сертификата

В веб-интерфейсе Vesta заходим в раздел «WEB», нажимаем на кнопку «EDIT» рядом с именем домена, прокручиваем вниз, отмечаем галочками «SSL support» и вводим необходимые данные о сертификате:
SSL Certificate — поле для сертификата домена.
SSL Key — поле для приватного ключа сертификата.
SSL Certificate Authority/Intermediate — поле для bundle (корневого сертификата и промежуточной цепочки), не является обязательным.

Установка сертификата Let's Encrypt

Важно: Установка сертификата Let's Encrypt возможна только при условии, если домен и его поддомен www резолвятся в IP-адрес бокса.

В веб-интерфейсе

Заходим в раздел «WEB», нажимаем «EDIT» рядом с именем домена, прокручиваем вниз, отмечаем галочками «SSL support» → «Let's Encrypt support» и сохраняем настройки(кнопка «SAVE»).
В актуальной версии панели это достаточно для автоматической установки SSL-сертификата.
Если панель не обновлена или автоматическая установка завершилась ошибкой, либо требуется задать специфические параметры сертификата, SSL-сертификат необходимо установить вручную из консоли.

В консоли

SSL-сертификат Let's Encrypt можно установить на комбинацию любой ОС и веб-сервера с помощью certbot. После выбора параметров в выпадающем списке произойдет перенаправление на страницу с конкретными рекомендациями по установке.
Для упрощения взаимодействия Vesta и Let's Encrypt существует утилита letsencrypt-vesta.
Автоматизировать процесс установки можно, запустив на аккаунте следующий скрипт ssl.sh (приложен к статье), его код:
#!/bin/bash
# How to Install Let’s Encrypt Certificate on VestaCP

# Go to folder
cd /usr/local

# Clone git repositories
git clone https://github.com/letsencrypt/letsencrypt.git
git clone https://github.com/interbrite/letsencrypt-vesta.git
git clone https://github.com/certbot/certbot.git

# Create the “webroot” directory where Let’s Encrypt will write the files needed for domain verification.
mkdir -p /etc/letsencrypt/webroot

# Now also symlink the Apache conf file in your Apache conf.d directory.
ln -s /usr/local/letsencrypt-vesta/letsencrypt.conf /etc/apache2/conf.d/letsencrypt.conf

# Symlink letsencrypt-auto and letsencrypt-vesta in /usr/local/bin for easier access. 
ln -s /usr/local/letsencrypt/letsencrypt-auto /usr/local/bin/letsencrypt-auto
ln -s /usr/local/letsencrypt-vesta/letsencrypt-vesta /usr/local/bin/letsencrypt-vesta

# Restart server
service apache2 restart

# Install at
apt-get install at

# Command for get SSL certificate and automatic Renewals every 60 days
letsencrypt-vesta -a 60 ‘USERNAME’ ‘DOMAIN’
Путь /etc/apache2/conf.d может отличаться в зависимости от сборки и иметь вид /etc/httpd/conf.d
Вместо ‘USERNAME’ и ‘DOMAIN’ нужно указывать имя пользователя панели Vesta и имя домена, для которого будет выпущен сертификат.
Ключ -a сообщает о необходимости обновления сертификата каждые N дней (в примере — 60).
Удачное завершение установки выдаст:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/test.moodle.pzdk.ru/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/test.moodle.pzdk.ru/privkey.pem
Your cert will expire on 2018-04-10. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew" 
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate
Donating to EFF:                    https://eff.org/donate-le

Error: SSL=no doesn’t exist
warning: commands will be executed using /bin/sh
job 1 at Sun Mar 11 16:47:00 2018
Renewal scheduled for 60 days.
Error и warning в данном случае можно проигнорировать. Запись "Renewal scheduled for 60 days." означает, что обновление сертификата запланировано через 60 дней.
Для завершения настройки в веб-интерфейсе Vesta заходим в раздел «WEB», нажимаем кнопку «EDIT» рядом с именем домена, прокручиваем вниз, отмечаем галочками «SSL support» → «Let's Encrypt support» и сохраняем настройки (кнопка «SAVE»).
Когда letsencrypt-vesta уже установлена и настроена, для добавления сертификата к новому домену newdomain.ru достаточно выполнить в консоли
letsencrypt-vesta -a 60 ‘username’ ‘newdomain.ru’

Изменение правил iptables

В веб-интерфейсе панели переходим в раздел «FIREWALL»: https://IP-БОКСА:8083/list/firewall/.
Здесь можно редактировать и удалять существующие правила, а также добавлять новые.
Форма для добавления новых правил имеет 2 выпадающих списка: первый позволяет выбрать действие (DROP или ACCEPT), второй — протокол (TCP, ICMP, UDP).
Далее идут формы для ввода номера порта и IP-адреса (можно использовать маски; чтобы задать правило для всех, надо указывать 0.0.0.0/0). Комментарий — необязательное поле.
Таким образом можно добавлять правила только для входящих соединений. Кроме того, это могут быть только простые правила.
Например, можно разрешить обращения к порту 25 для всех. Выбираем действие ACCEPT, протокол TCP, в поле порт вводим 25, в поле IP — 0.0.0.0/0. В итоге в iptables запись будет иметь вид:
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
Чтобы новые правила сохранились после перезагрузки, в консоли выполняем:
v-update-firewall

Изменение конфигурационных файлов сервисов

В веб-интерфейсе переходим в раздел «SERVER»: https://IP-БОКСА:8083/list/server/.
Здесь выбираем сервис, в конфигурацию которого необходимо внести изменения. Нажимаем на кнопку «CONFIGURE» рядом с именем сервиса, перед нами открывается файл с его настройками.
После внесения изменений, чтобы они применились сразу, отмечаем галочкой «RESTART» перед кликом на кнопку «SAVE».
Если что-то было внесено неправильно, панель сообщит о невозможности перезапустить сервис, и вернет конфиг к прежнему виду.
Поэтому такой метод внесения изменений для опытных пользователей является более оптимальным, чем редактирование файлов на сервере напрямую.

Конфигурационные файлы веб-серверов для сайта

Панель Vesta позволяет использовать разные настройки веб-сервера для каждого сайта.
Для этого существуют конфигурационные файлы, которые хранятся в директории /home/admin/conf/web/ и имеют вид:
/home/admin/conf/web/domain.ru.nginx.conf
/home/admin/conf/web/domain.ru.apache.conf

Настройка open_basedir для Nginx+PHP-FPM

По умолчанию связка Nginx+PHP-FPM в VestaCP не позволяет включить директиву open_basedir.
Сделать это можно с помощью шаблонов, которые для php-fpm хранятся в директории /usr/local/vesta/data/templates/web/.
Для включения open_basedir необходимо:
  • Создаём новый файл-шаблон с произвольным именем, например, socket.tpl.
  • Открываем файл socket.tpl и разрешаем доступ к директории с файлами доменов и к директории для временных файлов следующим образом:
php_admin_value[open_basedir] = /home/%user%/web/:/home/%user%/tmp/
  • Если требуется, можно аналогичным образом добавить другие директории в список разрешенных.
  • В веб-интерфейсе переходим к настройкам доменного имени и для Backend Template выбираем созданный шаблон.
  • Сохраняем изменения.

Использование нескольких версий PHP на сервере с VestaCP

Вместе с панелью управления Vesta по умолчанию устанавливается PHP 7.0. Если требуется использовать более старую версию PHP, сделать это можно следующим образом.
В качестве примера установим версию PHP 5.4.
Создаем каталог для исходников:
mkdir /etc/php/src
Загружаем и распаковываем архив с исходниками:
wget -O /etc/php/src/php-5.4.45.tar.bz2 http://de1.php.net/get/php-5.4.45.tar.bz2/from/this/mirror
cd /etc/php/src/
tar -xjf php-5.4.45.tar.bz2
cd php-5.4.45
Создаем каталог, где будет находится наша версия PHP 5.4:
mkdir /etc/php/php54
Конфигурация перед компиляцией (обратите внимание на переменную —prefix=, она указывает на каталог, куда будет скопмпилирована PHP):
./configure --prefix=/etc/php/php54 --with-config-file-path=/etc --with-regex=php --disable-rpath --disable-static --with-pic --with-layout=GNU --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-cdb --with-iconv --enable-exif --enable-ftp --with-gettext --enable-mbstring --with-onig=/usr --with-pcre-regex=/usr --enable-shmop --enable-sockets --enable-wddx --with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --with-openssl --enable-soap --enable-zip --with-mhash=yes --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysql=mysqlnd --with-mysqli=mysqlnd --enable-pdo --with-pdo-mysql=mysqlnd --enable-exif --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --with-zlib-dir=/usr --with-mcrypt=/usr --with-mhash --with-xsl=/usr --enable-zip --enable-cgi --with-curl --with-gd --enable-pcntl --enable-mbregex --enable-gd-native-ttf --enable-dba=shared --enable-intl --with-readline=/usr --enable-simplexml --with-libdir=/lib/x86_64-linux-gnu --with-config-file-scan-dir="$instdir"/etc --with-pspell
Выполняем компиляцию:
make
make install
Включаем CGI для Apache:
a2enmod cgi
Переключение версий будет осуществляться с помощью шаблонов apache. Скопируем существующий шаблон phpcgi:
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.sh /usr/local/vesta/data/templates/web/apache2/php54.sh
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.stpl /usr/local/vesta/data/templates/web/apache2/php54.stpl
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.tpl  /usr/local/vesta/data/templates/web/apache2/php54.tpl
После чего открываем файл /usr/local/vesta/data/templates/web/apache2/php54.sh и заменяем:
wrapper_script='#!/usr/bin/php-cgi -cphp5-cgi.ini'
на
wrapper_script='#!/etc/php/php54/bin/php-cgi -cphp5-cgi.ini'
Последним пунктом потребуется перезагрузить Vesta:
service vesta restart
Теперь в разделе «Web» → «Domain.ru» → «EDIT» с помощью пункта «Web Template» мы можем установить нужную версию PHP.

Изменение основной версии PHP CentOS

Для изменения основной версии PHP операционной системы:
  • Останавливаем работу веб-сервера:
$ service httpd stop
  • Удаляем текущую версию PHP:
$ yum remove php -y
  • Добавляем репозиторий, содержащий PHP 5.6:
$ wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
  • Устанавливаем новую версию PHP:
$ yum install php php-bcmath php-cli php-common php-gd php-imap php-mbstring php-mcrypt php-mysql php-pdo php-soap php-tidy php-xml php-xmlrpc php-pecl-apc phpMyAdmin roundcubemail php-opcache php-xdebug -y
  • Запускаем веб-сервер:
$ service httpd start

Блокировка IP-адресов, с которых поступает более 100 запросов к сайту в секунду

Реализация настройки сделана на основное nginx+fail2ban.
Порядок действий по настройке блокировки:
  • Подключаемся к боксу по SSH под пользователем root.
  • Вносим изменения в /etc/nginx/nginx.conf (внутри http):
limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s;
  • В конфигурационный файл сайта (/home/admin/conf/web/ДОМЕН.nginx.conf) указываем (внутри раздела server):
limit_req zone=one burst=1 nodelay;
  • Выполняем перезагрузку nginx:
service nginx restart
  • В директории /etc/fail2ban/filter.d/ создаем файл с именем nginx-req-limit.conf, добавляем в него содержимое:
[Definition]
failregex = ^\s*\[error\] \d+#\d+: \*\d+ limiting requests, excess: [\d\.]+ by zone "[^"]+", client: 
ignoreregex =
  • В файл /etc/fail2ban/jail.local добавляем:
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = vesta[name=WEB]
port = http,https
logpath = /var/log/apache2/domains/*error.log
findtime = 600
bantime = 7200
maxretry = 10
  • Выполняем перезагрузку fail2ban:
service fail2ban restart
  • Сохраняем новые настройки:
v-update-firewall