3.4 KiB
3.4 KiB
Raiju CMS - Структура и Логика
Архитектура
Flat-file CMS без базы данных - всё хранится в JSON файлах:
content/pages/*.json- страницы с секциями контентаcontent/settings.json- глобальные настройкиcontent/users.json- пользователи (multi-user система)content/events.json- события/мероприятияcontent/analytics.json- локальная аналитика
Структура директорий
- admin/ - админ-панель и API эндпоинты
- includes/ - хелперы (content-loader, footer, header, ai, backup)
- api/ - публичные API (контакт, лайки, поиск)
- cli/ - CLI инструменты для бэкапов и обслуживания
- assets/ - медиа файлы (images, audio, video, documents)
- css/ - стили (локальные, без CDN)
- content/ - JSON контент
- backups/ - ZIP бэкапы
Модель контента
Каждая страница - JSON с массивом sections[]:
- heading, text, image, quote, list, card
- youtube, soundcloud (embed)
- divider, spacer (layout blocks)
Рендеринг через PHP хелперы из includes/content-loader.php.
Пользователи
Multi-user система в users.json:
id,username,passwordHash,role(admin/editor),email- Аутентификация через
admin/users.php - Сессии с CSRF защитой в
includes/session-helper.php
Настройки
settings.json содержит:
- branding (логотип, название)
- theme (цвета, шрифты)
- backup (удалённые цели, токены)
- modules (AI, новости, события)
- privacy (аналитика, email obfuscation)
Маршрутизация
.htaccess + route.php как front controller:
- Перенаправляет несуществующие файлы на route.php
- route.php загружает страницы по маппингу из
nav-config.php - Поддержка многоязычности (/en/, /de/ и т.д.)
Интеграции
- AI: OpenAI, Anthropic, KIE.ai, Fal.ai, Comet для чата и генерации изображений
- Бэкапы: Dropbox, Google Drive, OneDrive, S3, FTP, WebDAV
- Аналитика: полностью локальная, без внешних запросов
- Агент: AI-агент для контент-операций с sandboxed безопасностью
Безопасность
- CSRF токены для всех форм
- Password hash (bcrypt) для паролей
- Защита от SSRF в AI-агенте (raijuNetSafeFetch)
- Sanitization HTML для контента
- Dev login только с loopback
Что важно для сайта:
- JSON - источник истины для контента
- Не редактировать core файлы (admin/, includes/, css/) при адаптации сайта
- Использовать
css/website.cssдля кастомных стилей $basePathдля путей к ассетам$contentPageдля admin bar
Система хорошо продумана для локального self-hosted использования без внешних зависимостей.