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


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat) Хостинг провайдеры (обзоры, бесплатный хостинг, облачный хостинг)
install mysql nginx php ubuntu vesta хостинг
 
 

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


(последние правки 3 недели, 5 дней)

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

Предлагаю вашему внимаю описание проекта по подготовке внутренней тестовой стендовой среды для 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
Моя официальная страница на FaceBook
Мой микроблог в твиттер

Установка облачного хранилища NextCloud в окружение Nginx+PHP-FPM

Установка облачного хранилища NextCloud в окружение Nginx+PHP-FPM

Представляем вашему вниманию подробную инструкцию по настройке NextCloud (с установкой плагинов и ssl-сертификатов для реализации защищенного https-протокола). Nextcloud - пакет клиент-серверного программного обеспечения для создания облачного хранилища. Фактически, программное обеспечение аналогично DropBox, Яндекс.Диск и GoogleDrive, но при этом является отрытым ПО и может быть установлено на вашем сервере и интегрироваться с сервисами компании, такими как Active Directory. Функционал облачного хранилища может быть расширен при помощи плагинов и при некотором желании из облачного хранилища можно построить небольшую CRM.


Обновление PHP до версии 7.2 в Debian Jessie (Debian GNU/Linux 8.11)

Обновление PHP до версии 7.2 в Debian Jessie (Debian GNU/Linux 8.11)

Сегодня рассмотрим довольно типовую задачу которую приходится решать довольно часто последнее время и я решил ее задокументировать, чтобы в дальнейшем просто следовать подготовленному плану. Как вы наверное поняли, я буду обновлять PHP в Debian Jessie до текущей стабильной версии.


Подготовка Nginx и PHP-FPM окружения для запуска Wordpress-сайта

Подготовка Nginx и PHP-FPM окружения для запуска Wordpress-сайта

И это видимо самая типовая задача из тех с которыми мне приходится сталкиваться, но я на всякий случай ее опишу.


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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .