Verification: a143cc29221c9be0

Opencart 3 nginx php fpm

Opencart 3 nginx php fpm

Установка PHP 7.4 с Apache

Если вы используете Apache в качестве веб-сервера, выполните следующие команды для установки PHP и модуля Apache PHP:

sudo apt updatesudo apt install php libapache2-mod-php

После установки пакетов перезапустите Apache, чтобы модуль PHP загрузился:

sudo systemctl restart apache2

Установка PHP 7.4 с Nginx

В отличие от Apache, Nginx не имеет встроенной поддержки обработки файлов PHP. Мы будем использовать PHP-FPM («менеджер процессов fastCGI») для обработки файлов PHP.

Выполните следующие команды, чтобы установить пакеты PHP и PHP FPM:

sudo apt updatesudo apt install php-fpm

После завершения установки служба FPM запустится автоматически. Чтобы проверить статус службы, запустите

systemctl status php7.4-fpm
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-06-09 19:07:05 UTC; 37s ago

Теперь вы можете отредактировать блок сервера Nginx и добавить следующие строки, чтобы Nginx мог обрабатывать файлы PHP:

server {

    # . . . other code

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }
}

Не забудьте перезапустить службу Nginx, чтобы новая конфигурация вступила в силу:

sudo systemctl restart nginx

Установка расширений PHP

Расширения PHP — это скомпилированные библиотеки, которые расширяют основные функции PHP. Расширения доступны в виде пакетов и могут быть легко установлены с помощью apt :

sudo apt install php-[extname]

Например, чтобы установить расширения MySQL и GD, вы должны выполнить следующую команду:

sudo apt install php-mysql php-gd

После установки нового расширения PHP, в зависимости от ваших настроек, не забудьте перезапустить службу Apache или PHP FPM.

Тестирование обработки PHP

Чтобы проверить, правильно ли настроен веб-сервер для обработки PHP, создайте новый файл с именем info.php внутри каталога /var/www/html со следующим кодом:

/var/www/html/info.php

Сохраните файл, откройте браузер и посетите: http://your_server_ip/info.php .

Вы увидите информацию о своей конфигурации PHP, как показано на изображении ниже:

Установка предыдущих версий PHP

Ондржей Сури, разработчик Debian, поддерживает репозиторий, включающий несколько версий PHP. Чтобы включить репозиторий , запустите:

sudo apt install software-properties-commonsudo add-apt-repository ppa:ondrej/php

Теперь вы можете установить любую нужную версию PHP, добавив номер версии к имени пакета:

sudo apt install php[version]

Например, чтобы установить PHP 7.1 и несколько распространенных модулей PHP, вы должны запустить:

sudo apt install php7.1 php7.1-common php7.1-opcache php7.1-mcrypt php7.1-cli php7.1-gd php7.1-curl php7.1-mysql

На что смотреть, принимая решение о покупке расширения?


Качество кода

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

Хороший плагин должен быть написан в соотвествии со стандартами W3C, а также быть аккуратным и чистым, чтобы не грузить сервер. Еще один признак качественного плагина — подробная документация про установку и использования.

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

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

Стоимость

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

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

Даже если вы работаете с фиксированным бюджетом, а покупка плагина освободит ваше время для следующих проектов и вы заработаете больше за меньшее время — покупать готовое расширение получается выгоднее.

Возможность использования плагина в будущем

Прежде чем покупать расширение, подумайте:

  • Можно ли его использовать в других проектах повторно?
  • Идет ли он в связке с каким-то другим плагином или может работать солоо?
  • Обновляется ли плагин регулярно?

Если проект, который вы сейчас пишете будет качественно поддерживаться в будущем, плагины в нем должны обновляться вместе с версией CMS. Не только ради безопасности, но ради эффективности — в них будут появляться новые фишки и удобства.

Многие бесплатные расширения хорошо поддерживаются, а многие платные — нет.

Есть разные схемы, кто платит за платное расширение: заказчик или разработчик. Чаще всего, если разработчик использует какие-то расширениям постоянно и во многих проектах, то платит он сам, а за специфичные расширения конкретно под свой сайт уже покупает клиент. Объяснить затраты клиенту просто: сообщаете, что написать такой плагин с нуля будет куда дороже, чем купить готовый и клиент, обычно, соглашается.

Но вернемся к OpenCart.

Как мы создавали образ для OpenCart в нашем маркетплейсе

Готовый образ в нашем Маркетплейс

Требования к серверу

Для использования Opencart 3 рекомендуется использовать 2 Гб RAM и 2 ядра CPU.

Основные файлы Opencart занимают около 50 Мб, дополнительно вам понадобится место для хранения базы данных, резервных копий, и данных сайта, которое будет зависить от объема опубликованной информации.

Opencart может использовать Apache или Nginx с PHP 7.3+, а в качестве базы данных MySQL.
Мы будем создавать образ с использованием Nginx и MySQL.

Подготовка образа

Обновим установленные пакеты до последней версии:

dnf update -y

Добавим постоянное разрешение для входящего трафика на http/80 и https/443 порты:

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

Применим новые правила файрвола:

systemctl reload firewalld

Установим Nginx:

dnf install nginx -y

Запустим и включим сервер Nginx:

systemctl start nginx
systemctl enable nginx

Так как на данный момент в основном репозитории Centos используется версия PHP 7.2, добавим репозиторий REMI с PHP 7.4.

Для этого добавим репозиторий EPEL (требуется репозиторием REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Добавим репозиторий REMI:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Включим модуль php:remi-7.4 для установки php 7.4:

sudo dnf module enable php:remi-7.4 -y

Установим php-fpm и php-cli:

sudo dnf install -y php-fpm php-cli

Установим модули PHP требуемые для Opencart:

dnf install php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml php-zip -y

Так же установим модули PHP mbstring, opcache:

dnf install php-mbstring php-opcache -y

Установим сервер MySQL:

dnf install mysql-server -y

Включим и запустим сервер MySQL:

systemctl start mysqld
systemctl enable mysqld

Так как мы делаем шаблон для VDS, а они могут быть медленными, добавим задержку старта mysqld 30 секунд, иначе могут быть проблемы со стартом сервера при первоначальной загрузке системы:

sudo sed -i '/Group=mysql/a \
ExecStartPre=/bin/sleep 30
' /usr/lib/systemd/system/mysqld.service

Изменим группу и пользователя из под которого будет работать nginx внеся изменения в /etc/php-fpm.d/www.conf:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

Изменим владельца каталога сессий PHP так же соответственно на nginx:

sudo chown -R nginx. /var/lib/php/session

Удалим строки с коментариями из файла конфигурации /etc/nginx/nginx.conf (что бы не было двойных срабатываний для sed):

sudo sed -i -e '/^[ \t]*#/d'  /etc/nginx/nginx.conf

Добавим в /etc/nginx/nginx.conf настройки компрессии gzip

sudo sed -i '/types_hash_max_size 2048;/a \
\
    gzip on;\
    gzip_static on;\
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;\
    gzip_comp_level 9;\
    gzip_proxied any;\
    gzip_min_length 1000;\
    gzip_disable "msie6";\
    gzip_vary on; \
' /etc/nginx/nginx.conf

Добавим в /etc/nginx/nginx.conf настройки индексного файла index.php:

sudo sed -i '/        root         \/usr\/share\/nginx\/html;/a \
        index index.php index.html index.htm;\
' /etc/nginx/nginx.conf

Добавим настройки для дефолтного сервера обработку php через сокет php-fpm, отключим лог для статических файлов, увеличим время expire, отключим лог доступа и ошибок для favicon.ico и robots.txt и запретим доступ к файлам .ht для всех:

sudo sed -i '/        location \/ {/a \
		try_files $uri $uri/ /index.php?q=$uri&$args;\
        }\
    \
        location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {\
        access_log off;\
        expires max;\
        }\
    \
        location ~ \.php$ {\
        try_files  $uri =404;\
        fastcgi_pass   unix:/run/php-fpm/www.sock;\
        fastcgi_index index.php;\
        include fastcgi_params;\
        fastcgi_intercept_errors on;\
        fastcgi_ignore_client_abort off;\
        fastcgi_connect_timeout 60;\
        fastcgi_send_timeout 180;\
        fastcgi_read_timeout 180;\
        fastcgi_buffer_size 128k;\
        fastcgi_buffers 4 256k;\
        fastcgi_busy_buffers_size 256k;\
        fastcgi_temp_file_write_size 256k;\
        }\
    \
        location = /favicon.ico {\
        log_not_found off;\
        access_log off;\
        }\
    \
        location = /robots.txt {\
        allow all;\
        log_not_found off;\
        access_log off;\
        }\
    \
        location ~ /\.ht {\
        deny all;' /etc/nginx/nginx.conf

Установим wget требуемый для установки certbot:

sudo dnf install wget -y

Скачаем исполняемый файл certbot с оффсайта:

cd ~
wget https://dl.eff.org/certbot-auto

Переместим certbot в /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

И назначим права и владельцем root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Установим зависимости certbot, ответ Y в конвеер на вопрос установки зависимостей, и --install-only, что бы не инициировать установку сертификатов на данном этапе:

yes | certbot-auto --install-only

Удалим файл в каталоге веб-сервера по умолчанию:

rm -f /usr/share/nginx/html/index.html

Скачаем архив с установочными файлами Opencart:

cd ~
wget https://opencart.ru/opencart-3.0.3.2-ru.zip

Распакуем архив в настроенный каталог веб-сервера:

unzip opencart-3.0.3.2-ru.zip "upload-3032-ru/*" -d /usr/share/nginx/html/

Переместим файлы из подкаталога upload-3032-ru в корневой каталог:

mv /usr/share/nginx/html/upload-3032-ru/* /usr/share/nginx/html/

И удалим подкаталог upload-3032-ru:

rm -rf /usr/share/nginx/html/upload-3032-ru/

Так же удалим скачанный архив:

rm -f ~/opencart-3.0.3.2-ru.zip

Создим пустые файлы конфигурации:

touch /usr/share/nginx/html/config.php
touch /usr/share/nginx/html/admin/config.php

Удалим строку $db->query(«SET @@session.sql_mode = 'MYSQL40'»); из install.php, т.к. данный режим не поддерживается в MySQL 8:

sed -i -e '/MYSQL40/d' /usr/share/nginx/html/install/model/install/install.php

Назначим владельцем файлов nginx выше уровнем, т.к. opencart потребуются соответсвующие разрешения для автоматического переноса хранилища за пределы каталога веб-сервера:

chown -R nginx. /usr/share/nginx

Создадим базу данных opencart:

mysql -uroot -e "CREATE DATABASE opencart;"

Создадим пользователя mysql opencart с пустым паролем:

mysql -uroot -e "CREATE USER 'opencart'@'localhost' IDENTIFIED BY '';"

Дадим все привелегии пользователю opencart на базу opencart:

mysql -uroot -e "GRANT ALL PRIVILEGES ON opencart.* TO 'opencart'@'localhost';"

Перезапустим и включим PHP-FPM:

systemctl restart nginx php-fpm
systemctl enable php-fpm

Далее создадим скрипт в домашнем каталоге root который по запросу пользователя сгенерирует и установит пароли для root и zabbix и скорректирует их в файлах конфигурации Opencart.

Воспользуемся перенаправлением heredoc с делимитером POSTINSTALL, что бы записать скрипт «как есть», без раскрытия специальных символов:

cat  /usr/local/bin/secure_mysql
#!/bin/bash
OPENCARTPASS="$(openssl rand -base64 29 | tr -d "=+/" | cut -c1-25)"
ROOTPASS="$(openssl rand -base64 29 | tr -d "=+/" | cut -c1-25)"
mysql -uroot -e "ALTER USER 'opencart'@'localhost' IDENTIFIED BY '$OPENCARTPASS';"
mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$ROOTPASS';"
echo "New password for opencart@localhost: $OPENCARTPASS"
echo "New password for root@localhost: $ROOTPASS"
sed -i --follow-symlinks "s/define('DB_PASSWORD', '');/define('DB_PASSWORD', '${OPENCARTPASS}');/g" /usr/share/nginx/html/config.php
sed -i --follow-symlinks "s/define('DB_PASSWORD', '');/define('DB_PASSWORD', '${OPENCARTPASS}');/g" /usr/share/nginx/html/admin/config.php
systemctl restart nginx php-fpm
OPENCARTPASS=
ROOTPASS=
rm -rf /usr/share/nginx/html/install
rm -f /usr/local/bin/secure_mysql
POSTINSTALL

Сделаем скрипт исполняемым:

chmod +x /usr/local/bin/secure_mysql

На данном этапе все настройки выполнены, остается выключить сервер и сделать снапшот:

shutdown -h now

Развертывание Opencart из образа

Развернув новый сервер из образа, мы, в роли пользователя, можем перейти по ссылке с адресом сервера, например: http://vps_ip_address/

На первом экране установки — выбрать требуемый язык (English/Russian).

На странице конфигурации базы данных, нужно указать пользователя базы данных opencart, пароль оставьте пустым (пароли MySQL будут сгенерированы и настроены чуть позже), имя базы данных укажем opencart (так как мы создали ее ранее), зададим логин, пароль и email учетной записи администратора Opencart.

После завершения установки, мы перейдем в административную часть, и на сообщение «Выберите как вы хотите перенести директорию storage», выберем вариант «Автоматическое перемещение» и нажмем «Переместить».

Opencart переместит свое хранилище автоматически и после сообщения «Хранилище storage успешно изменено!» это сообщение можно закрыть. На этом основная настройка Opencart завершена.

Генерация паролей MySQL

Для того что бы обезопасить сервер, нам осталось подключиться к серверу по SSH и выполнить скрипт, что мы написали ранее на этапе подготовки образа:

secure_mysql

Скрипт сгенерирует пароли для MySQL пользователей root, opencart, выведет их в консоль и пропишет их в конфигурационных файлах opencart.

А так же удалит каталог с установочными файлами opencart: /usr/share/nginx/html/install.
На этом этапе нужно сохранить пароли в надежном месте, так как они выводятся в консоль один раз и нигде больше не сохраняются.

Настройка HTTPS и сертификатов Let's Encrypt

Для настройки HTTPS у VDS должно быть действующее DNS имя, которое мы должны указать в /etc/nginx/nginx.conf в разделе server, например:

server_name domainname.ru;

Перезапустим nginx:

service nginx restart

Запустим certbot:

sudo /usr/local/bin/certbot-auto --nginx

Введем свой e-mail, cогласимся с условиями сервиса (A), Подписка на рассылку (опционально) (N), выберем доменные имена для которых нужно издать сертификат (Enter для всех).

В случае, если все прошло без ошибок, мы увидим сообщение об успешной выдаче сертификатов и настройке сервера:

Congratulations! You have successfully enabled ...

После этого подключения на 80 порт будут перенаправляться на 443 (https).

Добавим в /etc/crontab для автоматического обновления сертификатов:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"

Готово, теперь у нас есть готовый сервер Opencart с настроенными сертификатами Let's Encrypt!

Часть 1: Создание VPS-сервера на AWS Lightsail

Amazon Lightsail — популярная облачная платформа, которая позволяет создавать виртуальные частные серверы (instance) с выбранными характеристиками и ОС по фиксированной цене (от 3,50 USD в месяц).  Платформа конкурирует с другими популярными решениями, такими как DigitalOcean, Hetzner Cloud, Linode.

VPS на Amazon Lightsail

Особенности Amazon Lightsail:

  • 12 доступных локаций расположения сервера: US East (Ohio) (us-east-2), US East (N. Virginia) (us-east-1), US West (Oregon) (us-west-2), Asia Pacific (Mumbai) (ap-south-1), Asia Pacific (Seoul) (ap-northeast-2), Asia Pacific (Singapore) (ap-southeast-1), Asia Pacific (Sydney) (ap-southeast-2), Asia Pacific (Tokyo) (ap-northeast-1), Canada (Central) (ca-central-1), EU (Frankfurt) (eu-central-1), EU (Ireland) (eu-west-1), EU (London) (eu-west-2), EU (Paris) (eu-west-3)
  • Поддержка операционных систем: Windows Server 2019/2016/2012 R2, Amazon Linux, Amazon Linux 2, Debian (8.7/9.5/10.8), Ubuntu (20.04/18.04/16.04 LTS), FreeBSD 12.2, openSUSE 15.1, CentOS 7.
  • Автоустановка приложений: WordPress, WordPress Multisite, LAMP (PHP 7), Node.js, Joomla, Magento, MEAN, Drupal, GitLab CE, Redmine, Nginx, Ghost, Django, Plesk Hosting Stack on Ubuntu, cPanel & WHM for Linux, SQL Server 2016 Express.
  • Встроенный фаервол Amazon Lightsail Networking
  • Статический IPv4 адрес (возможности получить до 5-ти таких IP)
  • Поддержка IPv6
  • Бесплатный DNS-сервис
  • Встроенная SSH-консоль
  • Мониторинг производительности с различными метриками и поддержкой оповещений
  • SSD диски

Регистрация в сервисе AWS Lightsail

Перейдите на официальную страницу VPS Amazon Lightsail и нажмите «Начать работу с Lightsail бесплатно»:

Amazon Lightsail VPS

Заполните регистрационную форму и затем пройдите валидацию:

AWS Registration form

В персональном кабинете (AWS Management Console) в списке сервисов найдите Lightsail и перейдите по ссылке:

amazon Manangement Console

В появившимся окне кликаем по оранжевой кнопке «Create instance»:

Amazon Lightsail - Create instance

Определяем конфигурацию будущего сервера:

  • Локация. Выбираем географическое расположение сервера. Желательно брать страну поближе к себе. Например, если вы находитесь в Европе, то выбирайте Frankfurt (eu-central). Расположение сервера влияет на доступность веб-сайта для пользователей в других странах. Если дата-центр расположен в США, а ваша аудтитория находится, допустим, в Украине — пользователи будут испытывать задержку в загрузке страниц. Чем ближе находится сервер к пользователю — тем меньшая задержка.
  • Операционная система. Здесь я советую выбирать только Ubuntu 18.04. Это самый простой путь получить «чистый» и стабильный сервер без глюков, полностью готовый к установке хостинг-панели HestiaCP.  На гибриде Amazon Linux 2 ни Hestia, ни Vesta не хотели устанавливаться, на Debian 9/10 — возникали проблемы с репозиториями и сложно было установить старые версии PHP. Ну а CentOS Hestia не поддерживает, хотя это самая стабильная операционная система для развертывания хостинга, имхо.
  • SSH-ключи (key pair). Необходимо добавить пару public и secret SSH-key для доступа к серверу. Можно воспользоваться уже готовыми ключами Amazon, или сгенерировать самостоятельно с помощью PuTTy (или команда ssh-keygenв Linux) и добавить их.
  • Указываем технические характеристики сервера. HestiaCP отлично работает даже на сервере с одноядерным процессором и 512 Мб оперативной памяти, поэтому минимального тарифного пакета Amazom Lightsail хватит, тем более еще дают первый месяц бесплатного использования.

Остальные настройки (например выполнение скрипта после первой загрузке) — оставляем по умолчанию, или на свое усмотрение.

Create new instance in Amazon Loghtsail

Нажимаем «Create instance». Подождите, пока система завершит процесс создания виртуальной машины. На дашборде появится ваш VPS с технической информацией и кнопками управления:

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Переходим на вкладку «Networking» и создаем статический адрес для своего сервера «Create static IP»:

Static IP in AWS Lightsail

В настройках привязываем его к существующей виртуальной машине.

Статический IP — это постоянный выделенный для вашего сервера IP адрес, который не изменится после перезагрузки сервера, как бывает с динамическими IP.

Создание нового пользователя в Linux

Теперь можно подключаться к виртуальной машине по SSH ключу и указанным на дашборде доступам (IP-адрес/Имя пользователя). В целях безопасности лучше создать себе нового пользователя, а пользователя по умолчанию, которого создал Amazon удалить.

Для этого необходимо выполнить следующие команды терминала Linux:

ssh имя_пользователя@IP_адресс_VPS #подключаемся к серверу по SSH
sudo su - #переходим в режим root’а
sudo adduser newuser #создаем нового пользователя в системе Linux, вместо newuser подставляем свое имя. Придумайте сложное имя, чтобы его никто не смог подобрать.
sudo passwd newuser #указываем пароль для перехода в режим sudo. В некоторых версиях Linux пароль могут запросить сразу при создании пользователя, поэтому если вы это сделали пункт пропускаем
nano /etc/sudoers #добавляем нового пользователя в список пользователей, которые могут выполнять команды суперадминистратора, добавляем строчку в самом конце: newuser ALL=(ALL) NOPASSWD:ALL
sudo su - newuser #переходим в аккаунт нового пользователя
mkdir .ssh #создаем папку с ключами от имени нового пользователя
chmod 700 .ssh #выставляем права доступа к папке
stat .ssh #проверяем выставленные права доступа
sudo su - #возвращаемся в «рута»
sudo cp /home/имя_пользователя_amazon/.ssh/authorized_keys /home/newuser/.ssh/ #копируем файл с ключем из папки пользователя по умолчанию в директорию нового созданного вами пользователя
cd /home/newuser/.ssh/ #переходим в папку нового пользователя
chown newuser:newuser authorized_keys #меняем владельца на нового пользователя
sudo killall -u пользователь_по_умолчанию #убиваем все операции пользователя по умолчанию
sudo userdel пользователь_по_умолчанию #удаляем пользователя по умолчанию из системы
sudo cat /etc/passwd и cat /etc/shadow #смотрим список всех пользователей в системе, чтобы убедиться что нужный был удален

Изменение порта SSH

В целях безопасности рекомендую сразу же изменить порт SSH, чтобы исключить будущие атаки на стандартный 22-й порт.

Выполняем команды:

sudo nano /etc/ssh/sshd_config #найти и раскомментировать строку Port, заменить в ней число 22 на пятизначное (в пределах 0 — 65535), сохраняемся CTRL+O.
sudo systemctl restart ssh.service #пепезапускаем SSH-сервер, если у вас Ubuntu/Debian
sudo systemctl restart sshd.service #перезапускаем SSH-сервер, если у вас RHEL/CentOS

Учтите, что стандартный SSH порт теперь работать не будет и онлайн SSH-клиент Amazon тоже (можете его удалить в настройках сетевых портов).

Направляемся в Amazon Lightsail консоль, переходим в настройки сервера и на вкладке Networking, в разделе IPv4 Firewall удаляем 22-й порт и добавляем новый (не забудьте потом добавить этот же порт в настройках фаервола хостинг-панели).

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Часть 2: Установка хостинг-панели HestiaCP на VPS с Ubuntu 18.04

Я долго думал, что ставить. Если брать качество и скорость — то лучшим вариантом будет конечно CyberPanel. Но CyberPanel требовательна к оперативной памяти и ее новая версия не поддерживает старые PHP. А у меня стояла задача перенести сайт с относительно небольшим трафиком на старом движке Apache и устаревшими CMS/PHP. Чтобы временно где-то просуществовал перед генеральным обновлением так сказать. Долго не думая, вспомнил о VestaCP. Но тут поспешил, так как у Весты куча проблем и основная — это отсутствие мультиверсионности PHP c коробки, а разные скрипты которые якобы добавляют multi PHP оказались не рабочими. Поэтому, я удалил Весту и начал искать другие варианты. Таким образом нашел HestiaСP — «родная сестра» российской «Весты» из Швейцарии. Другими словами — форк. По функционалу — та же Vesta, только доработанная, например есть поддержка мульти-PHP с коробки, Ubuntu 20.04 и много других фишек, упрощающих работу пользователя.

Hestia control panel for Linux server

Короткая справка: HestiaCP — это Open Source панель управления веб-сервером на базе Linux с поддержкой графического веб-интерфейса. Распостраняется по лицензии GPLv3. Проект основан швейцарцем Рафаэлем Шнибергером.

Особенности HestiaCP

  • Поддержка веб-серверов Apache/NGINX
  • Поддержка связки NGINX + PHP-FPM
  • Поддержка мультиверсий PHP (5.6 — 7.3)
  • DNS сервер (Bind)
  • FTP сервер
  • SSH сервер
  • Mail сервер (Exim/Dovecot) с установленными модулями ClamAV (антивирус-модуль) и SpamAssassin (антиспам-фильтр)
  • Поддержка SQL-баз данных (MariaDB/PostgreSQL)
  • Поддержка Let’s Encrypt SSL
  • Поддержка HTTP/2, HSTS
  • Встроенные фаерволы (IPtables + Fail2ban)
  • Мониторы производительности сервера и модуль аналитики (webstats)
  • Резервное копирование
  • Поддерка Cron
  • Файловый менеджер от FileGator
  • Почтовый клиент от Roundcube
  • Автоустановщик WordPress
  • Поддержка двухфакторной авторизации (2FA)
  • Форум с техподдержкой, которая активно отвечает вопросы
  • Поддержка локализаций для разных стран (UA/RU/PL etc.)

Из минусов — нет поддержки Perl.

Установка HestiaCP

Команды установки контроль-панели Hestia на Ubuntu:

sudo apt-get update && sudo apt-get upgrade #устанавливая что-нибудь новое неплохо обновится
reboot#перезапускаем сервер
sudo su -#все важные команды необходимо выполнять из учетной записи рута, поэтому переключаемся в sudo
wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh #скачиваем скрипт установки HestiaCP
bash hst-install.sh#запускаем скрипт установки

* Можете также воспользоваться скрипт-генератором для установки нужной конфигурации HestiaCP.

Если появится ошибка о том, что нужно удалить группу admin, выполните команду (Vesta и Hestia резервируют за собой пользователя и группу «admin», поэтому чтобы избежать наложения учетных записей требуют удалить их из системы):

sudo groupdel admin

Менеджер установки Hestia также прост, как и Vesta, следуйте его инструкциям. В отличие от Весты, «Хестя» все делает сама: если возникнет ошибка — она предложит их исправить. Нажмите просто Yes. Далее пойдет выбор стандартной конфигурации со всей начинкой (Nginx, PHP, Apache2, MariaDB) — нажмите тоже Y, после чего вас попросят ввести email администратора и имя хоста (введите домен своего сайта, если оставите пустым — в качестве хоста будет использован длинный reverseDNS от Amazon).

Hestia CP install on Ubuntu

В конфигурации HestiaCP по умолчанию используется некая гибридная установка NGINX-Apache. В результате все изменения я вносил в nginx.conf, а не .htaccess, что создало дополнительные трудности при переезде сайта.

Hestia устанавливается тихо и спокойно, не так буйно как Vesta. На своем мониторе вы не увидите куча бегущих строк. Просто дождитесь финального экрана об успешной установке:

HestiaCP finish install

Согласитесь на перезагрузку — нажмите Y.

Разблокируйте необходимые порты в настройках VPS-сервера в консоли AWS Lightsail -> Networking:

Порт Протокол Сервис
22 TCP SSH
25 TCP SMTP
53 TCP DNS (TCP)
80 TCP HTTP
110 TCP POP3
143 TCP IMAP
443 TCP HTTPS
465 TCP SMTP
587 TCP SMTP
993 TCP IMAP
3306 TCP MySQL
8083 TCP HestiaCP
53 UDP DNS (UDP)

В дальнейшем перенесите все настройки фаервола HestiaCP в Amazon и контролируйте порты из панели управления. Получится двойной слой защиты.

Часть 3: Настройка хостинг-панели HestiaCP

Знакомство с веб-интерфейсом Hestia

Открываем URL-адрес Hestia-панели:http://IP_адресс_сервера:8083. Уведомление о незащищенном соединении игнорируем (установим потом SSL). Вводим логин и пароль в форме авторизации и входим в панель управления:

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Веб-интерфейс Hestia намного стильнее, чем Vesta и это сразу кидается в глаза — мягкая темная тема (в настройках можно изменить) с простым, удобным и понятным дизайном:

HestiaCP web interface

Веб-интерфейс Hestia состоит из таких блоков:

Топ-меню:

  • Records — здесь хранятся учетные записи хостинга
  • Files — файловый менеджер
  • Logs — управление журналами
  • Уведомления — значок уведомлений в системе
  • Сервер — значок шестеренки, управление, настройка и конфигурация сервера, фаервола и т.д.
  • Настройки пользователя — значок юзера
  • Сообщения о багах — значок знака внимания
  • Техническая поддержка — значок знака вопроса
  • Выход — значок дверей, выйти из своей учетной записи

Панель инструментов:

  • USERS — работа с учетными записями
  • WEB — работа с веб-сайтами
  • DNS — работа с DNS-серверами
  • MAIL — работа с MAIL-сервером и почтовыми ящиками
  • DB — работа с SQL-базами данных и доступ к PhpMyAdmin
  • CRON — работа с планировщиком заданий
  • BACKUPS — управление резервным копированием

На листинге отображаются:

  • Учетные записи/домены
  • Навигация
  • Операции
  • Дополнительные настройки

Если давать первую оценку Hestia CP — то я скажу, что она шустрее и мудрее Vesta CP. Хотя архитектура та же.

Создание домена и настройка DNS сервера

Так как HestiaCP позволяем использовать свой собственный DNS-сервер, я воспользуюсь опцией и создам свои собственные NS-сервера, чтобы управлять DNS-зоной прямо в хостинг-панели (можно также бесплатно создать DNS-зону и в настройках Amazon, но тогда будут использоваться «амазоновские» NS).

В первую очередь нужно создать новый домен в панели, для этого просто кликаем по разделу Web и дальше по кнопке «Add Web Domain»:

HestiaCP add new domain

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

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

И мы послушаемся ее. Переходим в раздел USERS и создаем там нового пользователя — «Add User»:

Add nerw user in HestiaCP

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Заполняем форму и кликаем по кнопке «Save». Пользователь создан. Теперь можно сразу в него залогиниться с помощью иконки «Login as», которая появится на листинге в разделе USERS:

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Переходим в раздел WEB и добавляем новый домен — «Add Web Domain», включаем обязательно опции «Create DNS zone» и «Enable mail for this domain»:

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Нажимаем «Save». Домен и DNS-сервер (со всеми необходимыми DNS records) будут созданы.

Алгоритм настройки DNS-сервера в HestiaCP

  1. В настройках пакетов ресурсов Package прописать дочерние NS-серверы: ns1.vashdomen.com, ns2.vashdomen.com
  2. В настройках пользователя Edit User прописать дочерние NS-серверы
  3. В настройках Edit DNS Zone изменить шаблон «Template BIND9» на «child-ns» (дочерние NS)
  4. В DNS зоне в панели Hestia проверить, чтобы было создано 4 записи для NS:

Настройка дочерних NS в HestiaCP

Остается перейти к регистратору своего доменного имени и:

  1. Создать дочерние Child NS-сервера (отдельная опция), к примеру: ns1.vashdomen.com и ns2.vashdomen.com;
  2. Указать дочерние NS как основные Primary DNS для домена.

Ждем 24-48 часов (смотрите значение TTL в настройках DNS). Периодически проверяем с помощью VPN. Если домен все еще недоступен — проверьте порт DNS-сервера — он должен быть открытым. Если делегирование прошло успешно, то при открытии домена появится прикольная заглушка «Coming Soon» от «Хести» с сообщением, что сайт на обслуживании:

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Установка SSL сертификата

Переходим в настройки домена в разделе WEB — попадаем в «Edit Web Domain«. Включаем «Enable SSL for this domain» и дополнительные настройки: проставляем галочки возле опций «Use Lets Encrypt to obtain SSL certificate«, «Automatic HTTPS Redirection» и «Enable HSTS» (форсированный http to https редирект, полезно для безопасности). Сохраняемся кнопкой «Save»:

Установка SSL сертификата в HestiaCP

Ждем пока страница обновится и появится сообщение «Changes have been saved«.

Проверяем SSL: переходим в режим инкогнито браузера и вводим URL-адрес http://mojdomen.com — вас должно перенаправить на HTTPS-протокол. Теперь установим плагин для проверки HTTP/2 соединения:

HTTP/2 and SPDY indicator

Еще раз проверяем. Значок молнии загорелся синим. Режим HTTP/2 включен. Отлично.

Теперь необходимо перевести на SSL саму панель. Алгоритм:

  1. Переходим в аккаунт пользователя и создаем технический субдомен, например cp.vashdomen.com, SSL пока не включаем, просто жмем сохранить.
  2. В настройках DNS-сервера добавляем A запись для cp.vashdomen.com и направляем на IP адрес сервера, в поле TTL cтавим 60 (чтобы побыстрее обновилось).
  3. Подключаемся по SSH к серверу, переходим в режим root и выполняем команды:

v-change-sys-hostname cp.vashdomen.com #переводим контроль-панель на работу с этого домена.
v-add-letsencrypt-host #получаем сертификат для панели.

Проверяем в режиме инкогнито браузера, вводим https://cp.vashdomen.com:8083 — должна появится форма авторизации. Готово.

* Если не панель открылась или возникает ошибка HSTS — значит сертификат не выдан. На сайте Certificate Search проверяем выдачу SSL для вашего субдомена. Если там его нет — пробуем сгенерировать SSL еще раз, например уже в веб-интерфейсе (или наоборот). Если не срабатывает — значит есть лимит на выдачу SSL для одного и того же домена. Повторите операцию через 24-48 часов. У меня все получилось с первого раза и могу сказать, что Хестя не такая капризная, как Веста. Проблем с получением SSL не заметил (генерировал по 2-3 раза для разных доменов/субдоменов).

Далее ограничиваем доступ к субдомену контроль-панели из интернета — для этого перейдите в папку /home/username/web и установите права доступа 660 для субдомена панели cp.vashdomen.com (или 700, воспользуйтесь для удобства CHMOD-калькулятором). Теперь при переходе на этот субдомен пользователи интернета будут получать ошибку 403 — Доступ запрещен.

Дополнительно советую ограничить прямой доступ к серверу по IP (restrict direct IP access), например доступ к https://IP_server_address. Нужно открыть файл конфигурации Nginx:

nano /etc/nginx/conf.d/IP_adress_server.conf и изменить содержание директивы server:

server {
listen IP_адрес_сервера:80 default;
server_name _;
access_log /dev/null;
error_log /dev/null;
return 444;
}

Сохранить CTRL+O. Перезагрузить Nginx — сделать это можно в панели, в разделе Server (иконка шестеренки):

Restart Nginx in HestiaCP

Или выполнить команду терминала Linux: sudo systemctl restart nginx

Мультиверсийность PHP

Если вам необходима поддержка разных версий PHP — больше не придется копаться в скриптах. Достаточно из учетной записи админа перейти в раздел Server -> Configure Server, в опциях Web Server включить галочки для требуемых версий PHP и сохраниться:

How setup multiple PHP in HestiaCP

Дождитесь пока система установит выбранные вами версии и обновит страницу. Теперь в настройках нужного домена вы можете легко изменить версию PHP:

How change PHP for domain in HestiaCP

Файловый менеджер

В HestiaCP интегрирован компактный файловый менеджер FileGator со всеми стандартными функциями (скачивание, загрузка, копирование, перемещение, нет только редактора кода):

File manager in HestiaCP

Если у вас после установки ошибка и Файловый менеджер не установился, выполните в терминале одну команду:

v-add-sys-filemanager

Настройка почтового сервера

В HestiaCP сразу после добавления нового домена и создания DNS-зоны, пользователь получает уже полностью готовый к работе почтовый сервер со всеми DNS-записями (DKIM, DMARC, SPF) и модулями (Roundcube, СlamAv, SpamAssasin). Осталось выполнить несколько важных настроек:

  • Переходим в раздел Mail и в настройках домена — включаем SSL. Теперь на листинге у вас должны загореться зеленым все опции, а сам сервер будет работать по защищенным TLS-портам.
  • Нажимаем на иконку «Add Mail Account» и создаем email-ящик.
  • Перейдите в настройки DNS сервера (для своего домена) и измените приоритет для MX-записи с 0 на 20 например.

Можете теперь тестировать отправку и прием электронной почты.

Внимание: На Amazon в целях безопасности заблокирован 25-й порт для отправки email и вы не сможете сами снять эти ограничения, вам небоходимо перейти в https://console.aws.amazon.com/support/contacts?#/rdns-limits и сделать запрос на снятие этого лимита и за одно указать требуемую PTR запись. Подробности: https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-configuring-reverse-dns

Как настроить PGP-шифрование в Roundcube?

Roundcube — почтовый клиент для работы с электронной почты, аналог другого популярного email-клиента — Rainloop. В HestiaCP именно Roundcube является почтовым клиентом по умолчанию. Мало кто знает, что в нем есть така важная функция как PGP-ключи шифрования. Но она по умолчанию скрыта разработчиками Roundcube, поэтому хочу поделиться с вами способом как можно добавить эту опцию.

Первым делом нужно подключиться по SSH к серверу и создать папку для хранения PGP-ключей:

sudo su -
sudo mkdir /home/user-data/pgpkeys

Устанавливаем необходимые права доступа к этой папке:

sudo chown www-data /home/user-data/pgpkeys
sudo chgrp www-data /home/user-data/pgpkeys
sudo chmod 700 /home/user-data/pgpkeys

Шифрование/дешифровка в Roundcube по умолчанию происходит с помощью плагина Enigma. Он есть в пакете программы, нужно только прописать конфигурацию:

sudo cp /var/lib/roundcube/plugins/enigma/config.inc.php.dist  /var/lib/roundcube/plugins/enigma/config.inc.php#создаем файл конфигурации Enigma из файла по умолчанию

nano /var/lib/roundcube/plugins/enigma/config.inc.php#теперь просто редактируем этот файл с помощью редактора Nano

$config['enigma_pgp_homedir'] = '/home/user-data/pgpkeys'; #указываем расположение папки с PGP-ключами, по умолчанию там стоял null

sudo nano /var/lib/roundcube/config/config.inc.php#редактируем файл конфигурации самого Roundcube

$config['plugins'] = array('html5_notifier', 'archive', 'zipdownload', 'password', 'managesieve', 'jqueryui', 'persistent_login', 'carddav', 'enigma');#добавляем в список плагинов — enigma и сохраняемся CTRL+O

Перезапускаем VPS-сервер. Входим в Roundcube. В разделе «Настройки» (Settings) появится новый пункт «Шифрование» (PGP Keys). Здесь можно включить PGP-шифрование, сгенерировать, импортировать или экспортировать ключи, управлять настройками и многое другое:

Как настроить PGP в Roundcube

Как работает PGP и как его использовать?

После генерации PGP вы получите — public и secret key. Публичный ключ вы можете разместить в свободном доступе — с его помощью вам смогут отправлять зашифрованные сообщения. Проверить как это все работает на практике очень просто. Создайте себе почтовый ящик, например, на Gmail и установите расширение для Google Chrome — Mailvelope, импортируйте или скопируйте копипастом public PGP-ключ (его можно открыть в обычном блокноте) и создайте новое сообщение в Gmail, кликнув по иконке Mailvelope (она появится в веб-интерфейсе Gmail) — появится окно для создания и отправки письма. Введите email, на котором у вас установлен Roundcube и отправьте ему сообщение. Mailvelope автоматически подтянет PGP-ключ сам и зашифрует письмо. Через несколько секунд проверьте свою электронную почту — придет новое сообщение. Откройте его и введите пароль для ключа, который вы устанавливали при создании. Roundcube дешифрует сообщение, и вы увидите текст:

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Установка панели HestiaCP на VPS Amazon Lightsail с Ubuntu

Вывод

HestiaCP — лучшее бесплатное решение для проектов с ограниченными ресурсами, возможностями и мощностями. Панель хорошо оптимизирована и работает как «швейцарские часы». На ней можно разворачивать собственный бюджетный хостинг, который по качеству не будет уступать другим. «Хесте», конечно, не сравнится с CyberPanel, но для NGINX — лучшего не придумаешь. Приятно, что отрасль VPS/Cloud активно развивается и у пользователя появляется широкий выбор.