Установка панели
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