Files
ave-cms/help/modules/repository.md
T
2026-07-27 12:58:44 +03:00

8.9 KiB
Raw Blame History

Удалённый каталог модулей

К разделу «Модули»

AVE.cms может получать список модулей с сайта владельца системы. Сервер каталога остаётся обычным статическим HTTPS-каталогом: ему не нужны PHP, база данных или отдельный API.

Подключение для владельца сайта

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

Если официальный источник был изменён, откройте Модули → Каталог → Источник и нажмите Восстановить. Для другого издателя вставьте полученный от него JSON-профиль при установке либо заполните URL и ключ вручную в этой панели. Публичный ключ не является секретом.

Подключение в панели

  1. Откройте Система → Модули → Управление.
  2. Нажмите Источник.
  3. Включите удалённый каталог.
  4. Укажите полный HTTPS URL файла index.json.
  5. Вставьте публичный RSA-ключ издателя и сохраните настройки.

После проверки в блоке «Каталог модулей» появится отметка Подпись проверена. Кнопка обновления повторно получает список, а кнопка установки скачивает выбранный пакет и передаёт его штатному ZIP-установщику.

Публичный ключ не является секретом. Закрытый ключ в панель не загружается и на web-сервер AVE.cms попадать не должен.

Что проверяется

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

  • HTTPS и публичный адрес источника;
  • RSA-SHA256 подпись всего каталога;
  • совместимость версии PHP и AVE.cms;
  • размер и SHA-256 скачанного ZIP;
  • одинаковый хост каталога и архива;
  • официальный AVE-MODULE.json и SHA-256 каждого файла внутри пакета;
  • безопасную структуру ZIP и ограничения распаковки.

Установка требует прав Управление модулями и Установка кода модулей. Событие записывается в аудит.

Публикация своего каталога

Команды выполняются в рабочей копии владельца, а не на production-сайте. Закрытый ключ создаётся один раз:

php tools/generate-module-repository-key.php

Соберите ZIP нужных модулей обычным сборщиком, затем сформируйте каталог:

php tools/build-module-package.php modules/comments
php tools/build-module-repository.php

Готовая статическая папка находится в storage/releases/module-repository/. Загрузите её содержимое на HTTPS-хост: сначала files/*.zip, после проверки файлов — index.json последним, например в /updates/modules/. URL для панели будет выглядеть так:

https://example.org/updates/modules/index.json

Рядом автоматически создаётся storage/releases/module-repository-host.zip с той же папкой, если удобнее загрузить и распаковать один архив через панель хостинга.

Публичный ключ находится в public-key.txt внутри готовой папки. В настройку вставляется содержимое файла, а не путь к нему. Закрытый ключ остаётся в storage/secrets/module-repository-private.pem и не входит в публикацию. Сохраните его в защищённой резервной копии: без него нельзя выпустить следующее обновление того же доверенного каталога.

Чтобы передать потребителю оба источника одной вставкой, сформируйте профиль:

php tools/build-distribution-profile.php \
  --name="Мой канал AVE.cms" \
  --core-url=https://example.org/updates/core/index.json \
  --module-url=https://example.org/updates/modules/index.json \
  --output=storage/releases/my-repository-profile.json

Передайте созданный JSON, но никогда не передавайте закрытые PEM-ключи.

Для следующей публикации пересоберите изменённые ZIP, повторно запустите build-module-repository.php и замените статические файлы на хосте. Генератор выбирает последнюю семантическую версию каждого code. В имени опубликованного ZIP есть часть SHA-256, поэтому разное содержимое одной версии получает разные URL и не сталкивается со старым кешем хостинга/CDN. Не переименовывайте ZIP вручную и не публикуйте новый index.json раньше указанных в нём файлов.

Проверка файлов на хостинге

Сборщик кладёт рядом с index.json страницу check.php. После загрузки репозитория откройте адрес папки или непосредственно:

https://example.org/updates/modules/check.php

Страница сначала проверит цифровую подпись каталога, затем браузер по очереди скачает каждый ZIP с обходом кеша и сравнит фактический размер и SHA-256 с подписанными значениями. Так обнаруживается как недогруженный FTP-файл, так и устаревшая копия CDN. Красную строку нужно повторно загрузить; index.json заменяйте последним и только после полностью зелёной проверки. Закрытый ключ странице не нужен и на хостинг не загружается. Новая сборка репозитория содержит только ZIP, перечисленные в её подписанном index.json. Поэтому в архив для хостинга не попадают устаревшие варианты одной версии модуля. Если на хостинге или CDN старый index.json кешируется надолго, его архивы можно временно сохранить отдельно на время жизни кеша. Новый index.json всегда загружайте последним.

Обновление установленного модуля

Если в каталоге опубликована более новая версия, одна операция заменяет папку модуля целиком и сразу выполняет его новые миграции. Сверять старые файлы на сервере не требуется: последняя подписанная версия пакета имеет приоритет. Старые файлы временно сохраняются в staging до успешной проверки нового module.php. Уже применённый ID миграции второй раз не запускается.

Патчи AVE.cms устанавливаются отдельной подсистемой обновлений. Модульный установщик не имеет права заменять файлы ядра.