Artisan и безопасность
Templite добавляет 16 artisan-команд под префиксом cms:. Все запускаются через docker exec templite-app php artisan <command> (или нативно php artisan ..., если работаете без Docker).
Полный список команд
| Команда | Назначение |
|---|---|
cms:install | Первичная установка CMS — миграции, сидеры, создание суперадмина |
cms:update | Обновление CMS после composer update — публикация ассетов и миграции |
cms:cache-clear | Очистка кэша CMS |
cms:check-security | Аудит безопасности — дефолтные пароли, debug-режим, APP_KEY |
cms:cleanup-expired-2fa-devices | Удаление истёкших доверенных устройств 2FA |
cms:cleanup-expired-sessions | Удаление истёкших сессий менеджеров |
cms:cleanup-exports | Удаление устаревших ZIP-архивов экспорта/импорта |
cms:cleanup-schedule-history | Очистка истории расписания старше 7 дней |
cms:compile-assets | Компиляция CSS/JS-ассетов блоков для страниц |
cms:make-action | Генерация PHP-класса Action |
cms:make-block | Генерация блока (template/style/script/block.json) |
cms:make-component | Генерация Blade-компонента |
cms:reset-password | Сброс пароля менеджера админки |
cms:resize-images | Пересоздание ресайзов изображений |
cms:run-action | Ручное выполнение Action по slug/ID |
cms:process-scheduled-pages | Публикация/депубликация страниц по publish_at / unpublish_at |
Команд cms:user:create, cms:user:password, cms:user:2fa, cms:install <package>, cms:publish, cms:cache:warm, cms:blocks:rebuild, cms:settings:export/import, cms:cities:import, cms:translations:export, cms:mcp:token, cms:images:regenerate не существует. Если нужна функциональность из этого списка — обычно она доступна через REST API или UI админки.
Установка и обновление
cms:install
Первичная установка CMS в Laravel-проекте.
docker exec -it templite-app php artisan cms:install| Опция | Назначение |
|---|---|
--fresh | Пересоздать все таблицы (migrate:fresh). Уничтожает существующие данные. |
--skip-migrate | Пропустить миграции (если БД уже накатана) |
Что делает:
- Чистит дефолтные Laravel-маршруты и
welcome.blade.php. - Публикует конфиг
config/cms.phpи pre-built ассеты админки. - Создаёт служебные директории.
- Накатывает миграции CMS.
- Интерактивно создаёт суперадмина.
- Создаёт
storage:link. - Прописывает
APP_INSTALLED=trueв.env. - Удаляет
install.php, если он был.
Подробнее — Установка.
cms:update
docker exec templite-app php artisan cms:update| Опция | Назначение |
|---|---|
--skip-migrate | Не запускать миграции |
Что делает:
- Публикует обновлённые ассеты (
vendor:publish --tag=cms-build+cms-assets). - Накатывает новые миграции.
Запускать после composer update templite/cms.
Менеджеры и безопасность
cms:reset-password
docker exec -it templite-app php artisan cms:reset-password adminСброс пароля менеджера по логину. Интерактивно запрашивает новый пароль. Если оставить ввод пустым — генерирует случайный 16-символьный пароль и показывает его один раз.
Только для менеджеров
Это команда только для менеджеров админки (Manager модель). Для frontend-пользователей (User) аналогичной команды нет — используйте REST API PUT /api/cms/users/{id} или UI.
cms:check-security
docker exec templite-app php artisan cms:check-securityПроверяет:
- Дефолтные пароли менеджеров — наличие паролей
admin123,password,123456,admin. - APP_DEBUG=true в production — недопустимо.
- APP_KEY — установлен ли.
При нахождении проблем возвращает exit-code 1. Можно использовать в health-check скриптах.
cms:cleanup-expired-2fa-devices
docker exec templite-app php artisan cms:cleanup-expired-2fa-devicesУдаляет истёкшие записи доверенных устройств 2FA (которые превысили CMS_TWO_FACTOR_TRUST_DAYS). Запускается через расписание автоматически.
cms:cleanup-expired-sessions
docker exec templite-app php artisan cms:cleanup-expired-sessionsУдаляет истёкшие сессии менеджеров из БД (для драйвера сессий database). Запускается через расписание.
Кэш и ассеты
cms:cache-clear
docker exec templite-app php artisan cms:cache-clear
docker exec templite-app php artisan cms:cache-clear --blocks| Опция | Назначение |
|---|---|
--blocks | Очистить только кэш блоков (без глобальных настроек и Blade) |
Без флагов — полная очистка кэша CMS (блоки, SCSS, глобальные настройки, файлы городов и языков).
Имя команды через дефис
Команда называется cms:cache-clear (через дефис), не cms:cache:clear (через двоеточие). Это распространённая опечатка.
cms:compile-assets
docker exec templite-app php artisan cms:compile-assets
docker exec templite-app php artisan cms:compile-assets --page=42| Опция | Назначение |
|---|---|
--page=ID | Скомпилировать ассеты только для конкретной страницы |
Собирает CSS/JS-ассеты блоков для всех (или одной) страниц. Результат сохраняется в PageAsset и попадает в $assets шаблона страницы при рендере.
cms:resize-images
docker exec templite-app php artisan cms:resize-images
docker exec templite-app php artisan cms:resize-images --all| Опция | Назначение |
|---|---|
--all | Пересоздать ресайзы для всех изображений (иначе только для тех, где они отсутствуют) |
Используется после изменения default_image_sizes в config/cms.php или после добавления новых форматов (WebP/AVIF).
Блоки, Actions, Компоненты
cms:make-block, cms:make-action, cms:make-component
Генераторы кода. См. соответствующие разделы — Блоки, Actions, Компоненты.
docker exec templite-app php artisan cms:make-block HeroBanner
docker exec templite-app php artisan cms:make-action SendContactForm
docker exec templite-app php artisan cms:make-component PriceTag| Опция | Назначение |
|---|---|
--storage | Создать в storage/cms/... вместо app/Cms/... |
--type= (только для make-block) | Slug типа блока |
Расхождение путей make-команд и runtime
Без флага --storage команды создают файлы в app/Cms/Blocks/, app/Cms/Actions/, app/Cms/Components/ — runtime-резолверы (BlockRegistry, ActionRegistry, ComponentRegistry) сканируют другие пути (app/Blocks/, app/Actions/, app/View/Components/Cms/). Используйте --storage или переносите файлы вручную в правильную папку.
cms:run-action
docker exec templite-app php artisan cms:run-action send-contact-form
docker exec templite-app php artisan cms:run-action 42Запускает action вручную (по slug или ID). Используется для отладки. В реальной работе actions выполняются автоматически в рендере страницы или через HTTP /action/{slug}.
Очистки и housekeeping
cms:cleanup-exports
docker exec templite-app php artisan cms:cleanup-exports
docker exec templite-app php artisan cms:cleanup-exports --days=14Удаляет ZIP-архивы экспорта/импорта старше N дней (по умолчанию — стандартное значение из реализации).
cms:cleanup-schedule-history
docker exec templite-app php artisan cms:cleanup-schedule-historyОчищает историю выполнения расписания (schedule_history) старше 7 дней.
cms:process-scheduled-pages
docker exec templite-app php artisan cms:process-scheduled-pagesОбрабатывает страницы с publish_at / unpublish_at — поднимает status в 1 для тех, у кого publish_at <= now(), и опускает в 0 для тех, у кого unpublish_at < now().
Подключается к расписанию Laravel и запускается через cron каждую минуту (cron-контейнер делает schedule:run).
Расписание (Schedule)
Команды очистки и обработки запускаются автоматически через Laravel scheduler. Конфигурация — стандартный app/Console/Kernel.php или (в новых проектах) bootstrap/app.php.
В production-контейнере templite-cron (см. Развёртывание) запускает php artisan schedule:run --no-interaction каждую минуту:
while true; do
php /var/www/artisan schedule:run --no-interaction
sleep 60
doneУправление расписанием через UI/API — раздел Настройки ядра → Расписание (/cms/core-settings). REST-эндпоинты — /api/cms/core-settings/schedule/... (см. REST API).
Production security checklist
Удаление install.php
После первой установки CMS обязательно удалить public/install.php. Этот файл предоставляет полный доступ к настройке БД и админам — оставлять на production опасно.
cms:install удаляет его автоматически в конце процесса. Если по какой-то причине файл остался — удалите вручную:
docker exec templite-app rm public/install.phpИли заблокируйте в Nginx:
location = /install.php {
return 404;
}Чек-лист перед запуском в production
Перед публикацией
- Удалён
install.phpвpublic/. cms:check-securityне выдаёт ошибок: нет дефолтных паролей,APP_DEBUG=false,APP_KEYустановлен.- Все пароли сменены с дефолтных (DB, Redis, ADMIN_PASSWORD).
APP_KEYуникальный, не из dev-окружения.SANCTUM_STATEFUL_DOMAINSсодержит реальный домен.- Swagger UI закрыт или
L5_SWAGGER_GENERATE_ALWAYS=false. - 2FA включена для всех менеджеров (
CMS_TWO_FACTOR_MODE=required). - Автобэкапы БД и
storage/настроены (см. Развёртывание). - SSL терминируется на NPM с
Force SSLиHTTP/2. - Файрвол открывает наружу только 80/443. Внутренние порты (
3306,6379) — только локально или через docker-сеть.
2FA для менеджеров
Настраивается через .env:
CMS_TWO_FACTOR_MODE=required # off | optional | required
CMS_TWO_FACTOR_TRUST_DAYS=0 # 0 = всегда спрашиватьПодробнее — Первый вход в админку.
Rate limiting
| Эндпоинт | Лимит |
|---|---|
POST /api/cms/auth/login | 5/min |
POST /api/cms/auth/two-factor/verify | 5/min |
POST /api/cms/user-auth/{guard}/login | 5/min |
POST /api/cms/user-auth/{guard}/register | 3/min |
Code-editing endpoints (*/code) | 10/min |
| Heavy ops (upload, compile, cache) | 10/min |
| Общий | через throttle:cms-api middleware |
Не настраивается через .env напрямую — конфигурируется в RouteServiceProvider / контейнере limiters Laravel.
Бэкапы
Минимум — ежедневный дамп MySQL и снапшот папки public_html/storage/. Не входит в поставку CMS, настраивается через cron хоста.
# Daily MySQL dump
0 2 * * * docker compose -f docker-compose.prod.yml exec -T db \
mysqldump -u root -p"$DB_ROOT_PASSWORD" templite_cms \
> /backups/db-$(date +\%F).sql
# Daily storage archive
30 2 * * * tar -czf /backups/storage-$(date +\%F).tar.gz public_html/storageПодводные камни
Подводные камни
- Имя команды очистки кэша —
cms:cache-clear(через дефис, неcms:cache:clear). - Команды
cms:make-*без--storageсоздают файлы вapp/Cms/..., runtime ищет в других папках. Используйте--storageили переносите вручную. cms:reset-passwordтолько для менеджеров. Для frontend-пользователей (User) нет аналогичной команды — используйте REST API или UI.- MCP-токены не выпускаются через artisan. Используйте REST
POST /api/cms/core-settings/mcp/generate-tokenили UI «Настройки ядра» → MCP. cms:install <package>не существует. Composer-пакеты устанавливаются обычнымcomposer require <vendor/package>. Если пакет требует публикации миграций —php artisan vendor:publish --tag=<package-name>-migrations+php artisan migrate.cms:cleanup-*команды запускаются автоматически через Laravel scheduler в production. Запускать вручную имеет смысл только при отладке.cms:check-securityне проверяет всё. Это базовый аудит (пароли, debug, APP_KEY). Полная проверка production — checklist выше плюс внешний security-audit.
Связанные разделы
- Установка —
cms:installиinstall.php - Развёртывание — production-стек, бэкапы, cron-контейнер
- Первый вход в админку — менеджеры и 2FA
- Блоки —
cms:make-blockи пути runtime - Actions —
cms:make-action,cms:run-action - Компоненты и библиотеки —
cms:make-component - Файлы и медиа —
cms:resize-images - REST API — эндпоинты для всех остальных операций