Мой блог - Установка OpenSource панели управления Web-хостингом VestaCP

Установка OpenSource панели управления Web-хостингом VestaCP

Предлагаю вашему внимаю описание проекта по подготовке внутренней тестовой стендовой среды для PHP-проектов, система при доработке напильником оказалась очень даже хороша. У нас давно назрел вопрос о внедрении небольшой панели управления хостингом для клиентских PHP-проектов. Плодить отдельный виртуальные машины или пусть даже и контейнеры под каждый запрос не хочется, а хранить, запускать и демонстрировать фиксы приходится достаточно часто. Мы протестировали несколько панелей управления и остановились на Vesta CP.

Фотография автора

Автор: Антон Черноусов
Опубликовано: 2 месяца, 2 недели (последние правки: 0 минут назад) - 0 комментариев
Категории записи: Linux, PHP, WEB, Системное администрирование, Хостинг


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

Базовая установка панели управления VestaCP на хостинг

Установку мы производим на операционную систему Ubuntu Server 16.04 и производится она достаточно просто (буквально в две команды):

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

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

Установка VestaCP в консоли Linux

Вы можете установить все компоненты или произвести выборочную установку, для выбора компонентов установки необходимо скрипту установки указать ключи скрипту установки:

  •   -a, --apache            Install Apache        [yes|no]  default: yes
  •   -n, --nginx             Install Nginx         [yes|no]  default: yes
  •   -w, --phpfpm            Install PHP-FPM       [yes|no]  default: no
  •   -v, --vsftpd            Install Vsftpd        [yes|no]  default: yes
  •   -j, --proftpd           Install ProFTPD       [yes|no]  default: no
  •   -k, --named             Install Bind          [yes|no]  default: yes
  •   -m, --mysql             Install MySQL         [yes|no]  default: yes
  •   -g, --postgresql        Install PostgreSQL    [yes|no]  default: no
  •   -d, --mongodb           Install MongoDB       [yes|no]  unsupported
  •   -x, --exim              Install Exim          [yes|no]  default: yes
  •   -z, --dovecot           Install Dovecot       [yes|no]  default: yes
  •   -c, --clamav            Install ClamAV        [yes|no]  default: yes
  •   -t, --spamassassin      Install SpamAssassin  [yes|no]  default: yes
  •   -i, --iptables          Install Iptables      [yes|no]  default: yes
  •   -b, --fail2ban          Install Fail2ban      [yes|no]  default: yes
  •   -q, --quota             Filesystem Quota      [yes|no]  default: no

Я производил установку ограниченного набора компонентов и в моем случае параметры установки выглядят следующим образом:

# ./vst-install-ubuntu.sh --iptables no --named no --postgresql yes --dovecot no --exim no --force

Обратите внимание, что вам требуется именно изменять набор типового ПО указывая ключи yes и no. Соответственно, после проведенных манипуляций, экран подтверждения состава устанавливаемых компонентов отличается от штатного:

Ограничение выбора компонентов при установке VestaCP

Следующим этапом настройки, мы задаем email адрес администратора системы и домен который будет обслуживать этот сервер, а дальнейшая установка (после указания необходимых параметров) будет проходить в автоматическом режиме.

Идет установка компонентов

По завершении установки вы увидите web-url на который необходимо подключаться, логин и пароль администратора (пароль генерируется автоматически и его необходимо в дальнейшем изменить в web-интерфейсе управления).

Web-URL Westa CP

Первый этап настройки прошел довольно просто, но вот дальнейшая настройка таит в себе несколько сюрпризов. Во первых, свежеустановленная система встречает нас самоподписанным сертификатом и доступом по ip-адресу, но это мелочи, так как первый вход в систему оказался неудачным и панель управления полноценно запустилась только после перезагрузки. Обратите на это внимание, лучше сразу после установки перезагрузить сервер и не рисковать.

Во вторых, на одной из инсталляций мы поймали ошибку:

2017/11/23 02:00:51 [error] 334#0: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 10.253.3.1, server: _, 
request: "GET /login/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/vesta-php.sock", host: "10.253.3.254:8083"

Как мы выяснили в процессе экспериментов, это было связано с тем, что правила iptables настроенные VestaCP запретили разрешение DNS-имен, но после внесения дополнительного правила для работы с внешним DNS-сервером панель управления стала работать корректно.

Для временной остановки Firewall вы можете использовать команду:

# /usr/local/vesta/bin/v-stop-firewall

Обратите внимание, что Vesta CP в своем составе содержит собственный DNS-сервер и в настройках определения DNS-имен (/etc/resolv.conf) лучше указать принудительное использование  локального DNS-сервера. В дополнение к настройкам разрешения имен убедитесь, что в файле /etc/hosts прописан домен который мы указывали на этапе установки в противном случае панель управления будет отсылать на почту администратора ошибки вида (sudo: unable to resolve host php.help-me-24.com):

127.0.0.1 localhost php.help-me-24.com

Подготовка инфраструктуры для обслуживания поддомена для php-разработки и тестирования

Прежде всего, нам необходимо настроить DNS-зону нашего домена таким образом, чтобы все DNS-адреса 4-го уровня домена *.php.help-me-24.com разрешались на один FrontEnd Nginx сервер который будет принимать входящие подключения для нашего субдомена php.help-me-24.com. Если DNS-сервер обслуживающий вашу зону принадлежит вам, то проблем с настройкой такого разрешения имен у вас не возникнет, но в случае когда DNS-сервер обслуживается сторонним хостинг-провайдером и вам предоставляется доступ к ограниченному web-интерфейсу управления DNS, тогда это может вызвать некоторые проблемы.

Мы используем Yandex DNS и Yandex почту для домена и как выяснилось Яндекс поддерживает такого рода настройки, а для настройки такого поведения, вам необходимо указать параметр A-записи в виде *.php:

Использование YandexDNS совместно с VestaCP

Теперь все "виртуальные домены" для PHP web-разработчиков разрешаются на один Nginx сервер который в свою очередь перенаправляет web-запросы в VPN-сеть к настроенному в прошлом пункте серверу с установленной VestaCP.

Следующим этапом, мы настраиваем обслуживание перенаправления запросов с Nginx frontend на Vesta-сервер, причем настраиваем таким образом, что запросы к домену php.help-me-24.com перенаправлялись на панель управления на порту 8083 (предварительно упаковываясь в ssl Let's Encrypt), а запросы к субдоменам перенаправляются напрямую на порт 80 того же сервера (ssl сертификат настраивается при необходимости на Nginx Frontend).

Для VestaCP потребуется отключить самоподписанный сертификат и защиту трафика, для чего в конфигурационный файл /usr/local/vesta/nginx/conf/nginx.conf необходимо внести некоторые изменения:

    server {
  
        ssl                  off;
        #ssl_certificate      /usr/local/vesta/ssl/certificate.crt;
        #ssl_certificate_key  /usr/local/vesta/ssl/certificate.key;
        #ssl_session_cache    shared:SSL:10m;
        #ssl_session_timeout  10m;

Перезапустите панель управления Vesta и попробуйте подключиться без префикса https. 

Переходим к настройке Frontend Nginx-сервера и я не буду подробно описывать файл конфигурации, так как решений такого плана я рассматривал уже множество и ничем уникальным этот конфигурационный файл не выделяется.

Конфигурационный файл содержит следующие записи:

server {
    listen 80;

    server_name *.php.help-me-24.com;
    access_log /var/log/nginx/vhost-php.help-me-24.com.log;
    error_log /var/log/nginx/vhost-php.help-me-24.com-error.log;

    client_max_body_size 10G;

    location / {
      proxy_pass http://10.253.3.200:80;                                                                                                                                   
      proxy_read_timeout    6h;                                                                                                                                            
      proxy_connect_timeout 600s;                                                                                                                                          
                                                                                                                                                                           
      proxy_set_header X-Real-IP $remote_addr;                                                                                                                             
                                                                                                                                                                           
      proxy_set_header X-Forwarded-Host $host;                                                                                                                             
      proxy_set_header X-Forwarded-Server $host;                                                                                                                           
                                                                                                                                                                           
      proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;                                                                                                         
      proxy_set_header Host $host:$server_port;                                                                                                                            
      proxy_set_header X-Forwarded-Proto $scheme;                                                                                                                          
    }                                                                                                                                                                      

}

server {
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/php.help-me-24.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/php.help-me-24.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    server_name *.php.help-me-24.com;
    access_log /var/log/nginx/php.help-me-24.com.log;
    error_log /var/log/nginx/php.help-me-24.com-error.log;

    add_header Strict-Transport-Security "max-age=63072000;";
    client_max_body_size 10G;

    location / {

      proxy_pass http://10.253.3.200:80;
      proxy_read_timeout    6h;
      proxy_connect_timeout 600s;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;

      proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
      proxy_set_header Host $host:$server_port;
      proxy_set_header X-Forwarded-Proto $scheme;

    }

}

server {
    listen 80;
    server_name php.help-me-24.com;
    return 301 https://php.help-me-24.com$request_uri;
}

server {
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/php.help-me-24.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/php.help-me-24.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    server_name php.help-me-24.com;
    access_log /var/log/nginx/php.help-me-24.com.log;
    error_log /var/log/nginx/php.help-me-24.com-error.log;

    add_header Strict-Transport-Security "max-age=63072000;";
    client_max_body_size 10G;

    location / {

      proxy_pass http://10.253.3.200:8083;
      proxy_read_timeout    6h;
      proxy_connect_timeout 600s;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;

      proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
      proxy_set_header Host $host:$server_port;
      proxy_set_header X-Forwarded-Proto $scheme;

    }

}

Единственное отличие от рассматриваемых ранее, это запись:

server_name *.php.help-me-24.com;

Она сообщает Nginx, что необходимо обрабатывать все субдомены (можно писать довольно сложные регулярные выражения).

Фактически, на данном этапе ферма для PHP разработчиков можно сказать, что запущена и можно создавать пользователей, домены и базы данных с использованием web-интерфейса.

Модифицированная VestaCP

Дополнительно было доработано

  • Отключен выбор по умолчанию опций DNS Support и Mail Supprt
  • Настроено проксирование FTP и защита FTP при помощи SSL
  • Интегрировали авторизацию с учетными записями Active Directory

Полезные команды администрирования VestaCP

Сброс пароля администратора web-панели:

# /usr/local/vesta/bin/v-change-user-password admin NewPassword
Пожалуйста, оцените мою статью (всего оценок 0, средняя оценка 4.00):

Комментарии к статье:

Пока комментариев нет

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

обязательно

обязательно (не публикуется)

необязательно

обязательно

обязательно