Руководство Melbis Shop: оглавление
Окно «Сервер» управляет сервером магазина напрямую по SSH: устанавливает и обновляет его, показывает состояние, выполняет команды и правит файлы настройки. Все действия выполняются от имени root, поэтому раздел доступен владельцу магазина и предназначен для разовых работ, а не для повседневной эксплуатации.
Ход любой операции виден в журнале в нижней части окна; кнопка «Сохранить журнал» выгружает его в текстовый файл. Соединение открывается на время операции и закрывается по её завершении.
Закладка «Подключение» — общие для всего окна параметры: IP-адрес сервера, пароль root и имя домена магазина. Пароль не сохраняется: при закрытии окна поле очищается.
Закладка «Установка», кнопка «Установить сервер» — полная автоматическая установка: программа скачивает установочный сценарий проекта и разворачивает сервер под указанный домен и текущую версию платформы.
Внимание! Установка удаляет все текущие настройки и данные магазина. Программа переспрашивает подтверждение, но отменить операцию после запуска уже нельзя.
Закладка «Обслуживание»:
Закладка «Консоль» выполняет произвольные команды: команда вводится в поле «Выполнить команду» и отправляется кнопкой «Отправить» или клавишей Enter, ответ идёт в журнал.
Флажок «Внутри веб-контейнера» выполняет команду не на самом сервере, а внутри контейнера магазина, от имени пользователя веб-сервера — так проверяют окружение движка (версии, права на файлы, доступность расширений PHP).
Осторожно! Без этого флажка команда выполняется на сервере от имени root.
Закладка «Настройки» редактирует файлы настройки сервера: Nginx, СУБД MySQL и контейнеров Docker. Порядок работы: выбрать файл, нажать «Загрузить с сервера», отредактировать текст, нажать «Сохранить на сервер».
Сохранить можно только тот файл, который был загружен в этом же окне,
— так исключается запись правок в чужой файл. Предыдущее содержимое
сервер сохраняет рядом, с расширением .bak, то есть один
шаг назад всегда доступен.
Кнопка «Перезапустить сервер» останавливает и заново запускает контейнеры магазина — этим применяются сделанные правки. Магазин на это время недоступен.
Осторожно! Ошибка в файле настройки может остановить работу магазина.
Так выглядит сервер сразу после установки из программы. Настоящий сервер магазина может быть устроен иначе: другие версии, свои правки файлов настройки, внешняя база, несколько сайтов на одной машине. Поэтому любое значение ниже — образец, а не факт о вашем сервере, пока не проверено на закладке «Настройки».
Сценарии установки, обновления и отчёта программа не хранит. По
кнопке она отправляет серверу одну команду, и сервер сам скачивает
setup.sh, update.sh или verify.sh
из ветки своей версии (v<версия>) публичного
репозитория melbis/melbis-shop. Там
же Dockerfile — из чего собран образ магазина. Если у
сервера нет выхода на GitHub, ни одна из этих кнопок не сработает.
Всё хозяйство магазина лежит в /var/melbis:
| Путь | Что это |
|---|---|
www/ |
корень сайта: index.php, units/,
templates/, files/,
config.json |
db/ |
файлы базы данных MySQL |
cache/ |
диск в оперативной памяти (1 ГБ) для файлового кеша; после перезагрузки сервера пуст, и это нормально |
trick/, log/ |
папки core/trick и core/log движка;
журналы apache и nginx пишутся туда же |
certs/, certbot/ |
сертификат Let’s Encrypt и папка для его проверки |
docker-compose.yml, nginx.conf,
my.cnf |
три файла, которые правятся на закладке «Настройки» |
| Контейнер | Образ | Что внутри |
|---|---|---|
melbis_db |
mysql:8.4 |
база и пользователь melbis, кодировка
utf8mb4 |
melbis_shop |
melbis/melbis-shop:v<версия> |
php:8.3-apache с расширениями curl, mysqli, xml, zip,
iconv, gd, intl, APCu и ionCube Loader; ядро движка в образе
закодировано |
melbis_proxy |
nginx:latest |
порты 80 и 443, шифрование, передача запросов в apache |
Журналов у контейнеров нет: всё пишется файлами в
/var/melbis/log.
На самой машине — файл подкачки на 4 ГБ, ежедневная ротация журналов
с хранением семи копий, fail2ban, брандмауэр
ufw с открытыми SSH, 80 и 443 и два задания cron:
обновление сертификата в 3:00 и cron.php магазина раз в
минуту (см. «Планировщик задач»).
| Ограничение | Значение | Где задано | Что при превышении |
|---|---|---|---|
| размер запроса | 64 МБ | client_max_body_size в nginx.conf |
nginx отвечает 413, запрос не доходит до PHP |
| размер загрузки в PHP | 100 МБ | post_max_size, upload_max_filesize
образа |
недостижим: раньше срабатывает предел nginx |
| файлов в одном запросе | 100 | max_file_uploads образа |
запрос отклоняется целиком |
| время работы скрипта | 30 с | max_execution_time образа |
долгий импорт обрывается, хотя прокси ждёт 300 с |
| память скрипта | 512 МБ | memory_limit образа |
скрипт останавливается с ошибкой |
| APCu | 64 МБ | apc.shm_size образа |
здесь живут статический кеш запросов и статистика Smart; после перезапуска контейнера пуст |
| файловый кеш | 1 ГБ | диск в памяти /var/melbis/cache |
|
| буфер индексов MySQL | 512 МБ | key_buffer_size в my.cnf |
основной буфер таблиц MyISAM; innodb_buffer_pool_size
(128 МБ) здесь почти не работает |
Память минимального сервера уже распределена, а запас держит
подкачка. Поднять буферы MySQL «для скорости» на такой машине — прямой
путь к тому, что система начнёт останавливать процессы. Ресурсы
добавляют сменой тарифа у хостинга, а не правкой
my.cnf.