Kladez
Описание
Высокопроизводительная система управления знаниями с веб-интерфейсом, поддержкой LaTeX/Markdown редактора и гранулярной системой ролей.
Языки
- JavaScript89,1%
- PLpgSQL6,9%
- Shell3,3%
- HTML0,6%
- Остальные0,1%
Поддержать проект через boosty
Кладезь - Система управления знаниями
Высокопроизводительная система управления знаниями с веб-интерфейсом, поддержкой LaTeX/Markdown редактора и гранулярной системой ролей.
Скриншоты
| Светлая тема | Тёмная тема |
|---|---|
![]() | ![]() |
Технологический стек
- База данных: PostgreSQL 15 Alpine
- Веб-сервер: Nginx с WebSocket поддержкой
- Контейнеризация: Docker Compose
- Backend: Node.js 18+ + Express.js
- Frontend: React 18 + Redux Toolkit
- WebSocket: Socket.IO (коллаборативное редактирование)
- Рендеринг формул: KaTeX
- Поиск: MeiliSearch v1.5 (полнотекстовый поиск с поддержкой опечаток)
- Кеширование: Redis (опционально)
Быстрый старт
Предварительные требования
- Docker и Docker Compose
- Git
Автоматическая установка и запуск
-
Клонирование репозитория
-
Запуск системы
Скрипт автоматически:
- Создаст
файл из примера.env - Соберёт все Docker образы
- Запустит все сервисы
- Проверит их готовность
- Создаст
Ручная установка
-
Настройка переменных окружения
-
Запуск контейнеров
-
Проверка статуса
Доступ к системе
- Веб-интерфейс: http://kladez.local (или согласно настройкам в .env)
- База данных: localhost:5432 (PostgreSQL)
- API: http://kladez.local:3001
Учетные данные по умолчанию
- Логин: admin
- Пароль: admin123
- Email: admin@kladez.local
⚠️ Важно: Смените пароль администратора после первого входа!
Структура проекта
kladez/
├── backend/ # Backend приложение
├── frontend/ # Frontend приложение
├── database/ # Схема БД и миграции
│ ├── schema.sql # Основная схема
│ └── seeds/ # Начальные данные
├── nginx/ # Конфигурация веб-сервера
├── scripts/ # Скрипты развертывания
├── docs/ # Документация
├── docker-compose.yml # Конфигурация Docker
├── .env.example # Пример переменных окружения
└── README.md # Этот файл
Основной функционал
MVP (Минимально жизнеспособный продукт)
- ✅ Структура БД: Полная схема PostgreSQL с миграциями
- ✅ Аутентификация: JWT-токены + система ролей и групп
- ✅ Пользователи: Управление пользователями, роли (admin), группы безопасности
- ✅ Статьи: CRUD операции, версионность, статусы (draft/published/needs_update/archived)
- ✅ Разделы: Иерархическая организация статей по разделам
- ✅ Права доступа: Гранулярные права на разделы и статьи для пользователей/групп
- ✅ Веб-интерфейс: React SPA с React Router
- ✅ Системные настройки: Настройки через админ-панель и
таблицуsystem_settings - ✅ Аудит: Полный журнал изменений в audit_log
Расширенный функционал
- ✅ LaTeX редактор: Редактор с KaTeX для рендеринга формул
- ✅ Markdown: Поддержка Markdown разметки в статьях
- ✅ Темы: Настраиваемые темы оформления (цвета, шрифты) через UI
- ✅ Файлы: Загрузка и прикрепление файлов к статьям
- ✅ Хранилище: Файловое хранилище для контента (конфигурируется через настройки)
- ✅ Версионность: История версий статей с возможностью просмотра и восстановления
- ✅ Версии документации: Управление версиями документации (v1.0, v2.0, и т.д.)
- ✅ Полнотекстовый поиск: MeiliSearch с поддержкой:
- Поиск с опечатками (typo tolerance)
- Подсветка найденных фрагментов
- Фильтрация и сортировка результатов
- Поиск по статьям, разделам и пользователям
- Настраиваемые правила ранжирования
- ✅ Коллаборативное редактирование: Real-time совместное редактирование через WebSocket
- ✅ LDAP: Интеграция с LDAP каталогом (ldapjs)
- ✅ Email: Email уведомления через Nodemailer
- ✅ Безопасность: Helmet, CORS, Rate Limiting, валидация данных
Управление системой
Команды управления
Разработка
Локальная разработка
-
Запуск в режиме разработки с Redis
-
Просмотр логов
-
Подключение к базе данных
Управление базой данных
Структура сервисов
- database (порт 5432) - PostgreSQL 15 Alpine
- backend (внутренний порт 3001) - Node.js API + WebSocket
- frontend (внутренний порт 3000) - React SPA
- webserver (порт 80/443) - Nginx reverse proxy с WebSocket поддержкой
- meilisearch (внутренний порт 7700) - Полнотекстовый поиск
- redis (порт 6379) - Кеширование (опционально)
Настройки
Переменные окружения
Основные переменные в файле:
- Доменное имя (по умолчанию: kladez.local)DOMAIN- Пароль базы данныхDB_PASSWORD- Секрет для JWT токеновJWT_SECRET- Мастер-ключ для MeiliSearch (обязательно изменить в продакшн)MEILI_MASTER_KEY- Окружение MeiliSearch (development/production)MEILI_ENV- Настройки почтового сервераSMTP_*- Настройки LDAP (опционально)LDAP_*
Системные настройки
Настройки хранятся в таблице и доступны через админ-панель:
- Регистрация пользователей
- Настройки темы оформления
- Ограничения на файлы
- SMTP настройки
Безопасность
- 🔒 Хеширование паролей (bcrypt)
- 🔒 JWT аутентификация
- 🔒 Защита от CSRF
- 🔒 Валидация входных данных
- 🔒 Ограничение прав доступа
Производительность
- ⚡ Индексы базы данных
- ⚡ Кеширование запросов
- ⚡ Сжатие статических файлов
- ⚡ Оптимизированные SQL запросы
Развертывание в продакшн
Первоначальное развертывание
-
Подготовка сервера
-
Клонирование и настройка
-
Настройка домена
-
Запуск в продакшн режиме
SSL сертификат (Let's Encrypt)
Обновление системы
Автоматическое обновление (рекомендуется)
Используйте скрипт автоматического обновления, который выполняет все необходимые шаги:
Что делает скрипт автоматического обновления:
- ✅ Создаёт резервную копию базы данных и файлов
- ✅ Сохраняет SSL сертификаты (если настроены)
- ✅ Останавливает текущие сервисы
- ✅ Обновляет код из Git репозитория
- ✅ Восстанавливает SSL конфигурацию
- ✅ Пересобирает и запускает обновлённые сервисы
- ✅ Применяет новые миграции базы данных
- ✅ Проверяет работоспособность всех сервисов
- ✅ Автоматически откатывается при обнаружении ошибок
Автоматический откат:
- При любой ошибке система автоматически откатится к предыдущей версии
- Восстановит базу данных из бэкапа
- Восстановит предыдущий Git коммит
- Восстановит SSL сертификаты
- Перезапустит сервисы на предыдущей версии
Ручное обновление
Если автоматическое обновление недоступно, выполните шаги вручную:
Важно: При ручном обновлении миграции применяются автоматически при запуске через
Мониторинг и устранение неполадок
Проверка состояния системы
Типичные проблемы
Проблема: Сервисы не запускаются
Проблема: База данных недоступна
Проблема: Frontend не загружается
Резервное копирование
API Documentation
Основные эндпоинты
- Проверка состояния APIGET /api/health- Аутентификация пользователяPOST /api/auth/login- Список статейGET /api/articles- Разделы знанийGET /api/sections- Публичные настройкиGET /api/settings/public
Endpoints поиска
- Поиск статей с фильтрами и сортировкойGET /api/search/articles- Поиск пользователей (только для администраторов)GET /api/search/users- Поиск разделовGET /api/search/sections- Универсальный поиск по всем сущностямGET /api/search/all- Полная переиндексация данных (только для администраторов)POST /api/search/reindex- Статистика индексов MeiliSearch (только для администраторов)GET /api/search/stats
Swagger документация
После запуска системы документация API доступна по адресу:
Поддержка
Получение помощи
- Логи системы: ./scripts/logs.sh
- Состояние сервисов: docker-compose ps
- Мониторинг: Проверьте
эндпоинты/health
Контакты
- Техническая поддержка: Создайте issue в репозитории проекта
- Документация:
директория в проекте/docs/
Лицензия
Этот проект распространяется под лицензией GNU General Public License v3.0 (GPLv3).
Подробности см. в файле LICENSE или на сайте GNU GPL v3.
Кладезь - Современная система управления знаниями для вашей команды
🚀 Быстрый запуск:
📚 Документация: Полная в
🔧 Поддержка: Health checks на всех уровнях
💾 Надёжность: Автоматическое резервное копирование
🎨 Гибкость: Настраиваемые темы и роли
Миграции базы данных Кладезь
Описание
Эта директория содержит SQL-миграции для базы данных PostgreSQL системы Кладезь.
Автоматическое применение миграций
Миграции автоматически проверяются и применяются при запуске системы через .
Ручное управление миграциями
Используйте скрипт :
Правила именования
Миграции должны именоваться по шаблону:
XXX-описание-миграции.sql
Где - трёхзначный порядковый номер (001, 002, 003 и т.д.)
Список миграций
| Файл | Описание |
|---|---|
| 001-role-section-permissions.sql | Начальная структура прав доступа |
| 002-init-section-permissions.sql | Инициализация прав разделов |
| 003-add-article-fields.sql | Дополнительные поля статей |
| 004-implement-groups-and-new-permissions.sql | Система групп и новые права |
| 005-create-system-settings.sql | Системные настройки |
| 006-migrate-content-to-storage.sql | Миграция контента в файловое хранилище |
| 007-cleanup-content-fields.sql | Очистка полей контента |
| 008-simplify-roles-system.sql | Упрощение системы ролей |
| 009-add-permissions-inheritance.sql | Наследование прав доступа |
| 010-fix-inheritance-permissions.sql | Исправление наследования прав |
| 011-fix-admin-user-role.sql | Исправление роли администратора |
| 012-add-documentation-versions.sql | Версии документации |
Создание новой миграции
- Создайте файл с правильным именем:
-
Добавьте SQL-команды для изменения схемы БД
-
При следующем запуске системы миграция будет применена автоматически
Откат миграций
Автоматический откат не реализован. Для отката:
- Вручную выполните обратные SQL-операции
- Удалите запись из таблицы
:applied_migrations
Отслеживание миграций
Система отслеживает применённые миграции в таблице:
Важные замечания
- Миграции применяются в алфавитном порядке
- Каждая миграция применяется только один раз
- При ошибке в миграции процесс запуска прерывается
- Всегда делайте резервную копию БД перед применением новых миграций

