1. Руководство пользователя › 1.5 Проектирование › Сервер

Окно «Сервер» управляет сервером магазина напрямую по 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.