Устранение неполадок
В этом руководстве рассмотрены распространенные проблемы и их решения. Для получения диагностической информации всегда начинайте с:
docplatform doctor
Запуск сервера
Сервер не запускается: “address already in use”
Причина: Другой процесс использует настроенный порт.
Решение:
# Find what's using port 3000
lsof -i :3000 # macOS/Linux
ss -tlnp | grep 3000 # Linux
# Option 1: Stop the other process
# Option 2: Use a different port
docplatform serve --port 8080
Сервер не запускается: “permission denied”
Причина: Процесс не имеет прав чтения/записи к директории данных.
Решение:
# Check ownership
ls -la .docplatform/
# Fix ownership (if running as docplatform user)
sudo chown -R docplatform:docplatform .docplatform/
# Fix permissions
chmod 700 .docplatform/
Сервер не запускается: “database is locked”
Причина: Запущен другой процесс DocPlatform, или предыдущий процесс не завершился корректно.
Решение:
# Check for other docplatform processes
ps aux | grep docplatform
# If a process is stuck, kill it
kill -SIGTERM <pid>
# If the lock file persists after no processes are running
# SQLite WAL mode handles this automatically on restart
docplatform serve
Синхронизация git
“Permission denied (publickey)” при синхронизации git
Причина: SSH-ключ не настроен или не имеет доступа к репозиторию.
Решение:
-
Проверьте наличие ключа:
ls -la $GIT_SSH_KEY_PATH -
Проверьте, что ключ добавлен в deploy keys репозитория:
ssh -T -i $GIT_SSH_KEY_PATH [email protected] -
Убедитесь, что для deploy key включен доступ на запись (необходим для push)
Синхронизация git показывает “no changes”, хотя файлы были обновлены
Причина: Изменения были внесены в файлы вне директории docs/, которую DocPlatform не индексирует.
Решение: Убедитесь, что ваши Markdown-файлы находятся в директории docs/ workspace. Файлы в других директориях сохраняются в git, но не отслеживаются DocPlatform.
Конфликт: HTTP 409 при сохранении
Причина: Страница была изменена другим пользователем или через git push между загрузкой и сохранением.
Решение:
- Веб-интерфейс показывает баннер конфликта с обеими версиями
- Нажмите Download both, чтобы получить оба файла
- Вручную объедините изменения
- Сохраните объединенную версию
Предотвращение:
- Включите webhooks для более быстрой синхронизации (уменьшает окно конфликта)
- Используйте индикаторы присутствия, чтобы видеть, кто что редактирует
- Назначайте владельцев страниц для предотвращения одновременного редактирования
Git push не проходит: “remote rejected”
Причина: Deploy key не имеет доступа на запись, или правила защиты ветки запрещают прямые push.
Решение:
- Проверьте, что deploy key имеет доступ на запись в настройках репозитория
- Проверьте правила защиты ветки — DocPlatform пушит напрямую в настроенную ветку
- Если защита ветки необходима, настройте DocPlatform на push в незащищенную ветку
Аутентификация
“401 Unauthorized” на каждый запрос
Причина: JWT access token истек (по умолчанию срок жизни 15 минут).
Решение: Веб-редактор обрабатывает обновление токена автоматически. При прямом использовании API вызовите endpoint обновления:
curl -X POST http://localhost:3000/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refresh_token": "your-refresh-token"}'
Невозможно войти после ротации JWT-ключа
Причина: Все токены были инвалидированы при удалении и регенерации JWT-ключа.
Решение: Это ожидаемое поведение. Все пользователи должны войти заново после ротации ключа. Очистите cookies/хранилище браузера и войдите с паролем.
OIDC-вход перенаправляет на страницу ошибки
Причина: URL обратного вызова OAuth не совпадает с настроенным в Google/GitHub.
Решение:
- Проверьте URL обратного вызова в настройках провайдера OAuth
- Он должен быть:
https://your-domain.com/api/v1/auth/callback/google(или/github) - Убедитесь, что переменные окружения
OIDC_*_CLIENT_IDиOIDC_*_CLIENT_SECRETустановлены правильно - Перезапустите сервер после изменения переменных окружения OIDC
Первый пользователь не является Super Admin
Причина: База данных уже содержала записи пользователей от предыдущей установки.
Решение:
# WARNING: This deletes all data
docplatform serve # stop first
rm .docplatform/data.db
docplatform serve
# Register your admin account
Делайте это только на новой установке. Для существующих установок используйте базу данных для прямого обновления ролей пользователей (продвинутый уровень).
Поиск
Поиск не возвращает результатов
Причина: Поисковый индекс может быть пустым или рассинхронизирован.
Решение:
# Check search health
docplatform doctor
# If the index is out of sync, rebuild
docplatform rebuild
Результаты поиска устарели (не отражают недавние правки)
Причина: Асинхронная задача индексации еще не обработана (обычно задержка < 1 секунды).
Решение: Подождите момент и повторите попытку. Если проблема сохраняется:
- Проверьте логи сервера на ошибки индексации
- Выполните
docplatform rebuildдля принудительной полной переиндексации
Поиск работает медленно
Причина: Очень большие workspaces (1 000+ страниц) со сложными запросами.
Решение:
- Используйте более конкретные поисковые запросы
- Используйте фильтры по тегам для сужения области
- В будущих версиях будет поддержка Meilisearch для высокопроизводительного поиска
Восстановление данных
Случайно удалена страница
Вариант 1: История git (если включена синхронизация git)
cd .docplatform/workspaces/{id}/docs/
git log --all — path/to/deleted-page.md
git checkout <commit-hash> — path/to/deleted-page.md
Затем выполните docplatform rebuild для переиндексации.
Вариант 2: Резервная копия базы данных
# List backups
ls .docplatform/backups/
# Restore from backup (stops the server first)
cp .docplatform/backups/{latest}.db .docplatform/data.db
docplatform serve
База данных повреждена
Решение:
- Остановите сервер
- Проверьте наличие свежей резервной копии:
ls -la .docplatform/backups/ - Восстановите из резервной копии:
cp .docplatform/backups/{latest}.db .docplatform/data.db - Если резервная копия недоступна, перестройте из файловой системы:
rm .docplatform/data.db docplatform rebuild - Запустите сервер
Файловая система (файлы .md) является источником истины. Даже при потере базы данных rebuild воссоздает ее из ваших файлов.
Потерян JWT-ключ
Причина: Файл jwt-key.pem был удален.
Последствия: Все пользовательские сессии инвалидированы. Пользователи должны войти заново.
Решение: Запустите сервер — новый ключ генерируется автоматически. Данные не теряются, но все пользователи должны пройти повторную аутентификацию.
Ошибки frontmatter
Страница стала недоступна после редактирования frontmatter
Причина: Невалидный YAML в блоке frontmatter. DocPlatform по умолчанию использует строгий режим — при ошибке парсинга frontmatter доступ к странице ограничивается только ролью Admin, чтобы опечатка в YAML не привела к случайному раскрытию приватной страницы.
Симптомы:
- Страница исчезает из результатов поиска
- Страница исключена из опубликованной документации
- Пользователи без роли admin получают 403 Forbidden
- Администратор видит предупреждающий баннер на странице
Решение:
- Войдите как Admin или Super Admin
- Откройте затронутую страницу в веб-редакторе
- Переключитесь в режим raw Markdown (переключатель
</>) - Исправьте YAML frontmatter (частые проблемы: отсутствующие кавычки вокруг значений с двоеточиями, неправильный отступ, незакрытые скобки)
- Сохраните — страница будет переиндексирована и доступ восстановлен
Если нет доступа к веб-редактору, исправьте файл напрямую на диске:
# Edit the Markdown file
nano .docplatform/workspaces/{id}/docs/{path-to-page}.md
# Rebuild to re-index
docplatform rebuild
Режимы обработки ошибок frontmatter
| Режим | Поведение при невалидном YAML | Когда использовать |
|---|---|---|
| Strict (по умолчанию) | Страница ограничена до Admin, исключена из поиска и публикации | Production — предотвращает случайное раскрытие |
| Lenient | Сохраняет последний корректный frontmatter из базы данных, показывает предупреждение | Разработка — меньше прерываний при редактировании |
Строгий режим гарантирует, что опечатка в YAML никогда случайно не сделает ограниченную страницу публичной. Это намеренное решение по безопасности.
Дисковое пространство
Предупреждение “Low disk space” от doctor
Причина: DocPlatform предупреждает, когда свободное дисковое пространство падает ниже 1 ГБ.
Последствия: SQLite требует свободное дисковое пространство для операций WAL (write-ahead log). Если диск заполнится полностью, запись не удается, и данные могут быть повреждены.
Решение:
- Проверьте использование диска:
df -h - Очистите старые резервные копии: уменьшите
BACKUP_RETENTION_DAYSили вручную удалите старые файлы в{DATA_DIR}/backups/ - Переместите директорию данных на более емкий диск: обновите
DATA_DIRи переместите директорию - При использовании Docker увеличьте размер volume
Производительность
Высокое потребление памяти
Ожидаемое: < 80 МБ в простое, < 200 МБ под нагрузкой.
Если потребление памяти превышает 200 МБ:
- Проверьте количество активных WebSocket-соединений
- Проверьте количество workspaces и общее количество страниц
- Большие git-репозитории (>5 000 файлов) используют больше памяти — гибридный движок автоматически переключается на native git CLI, когда RSS go-git превышает 512 МБ
Медленный рендеринг страниц
Ожидаемое: < 50 мс p99.
Если рендеринг страниц медленный:
- Проверьте дисковый I/O — производительность SQLite зависит от скорости диска
- Используйте SSD для директории данных
- Проверьте, находится ли файл базы данных на сетевой файловой системе (NFS/CIFS) — переместите на локальный диск
Получение помощи
Если не удается решить проблему:
- Выполните
docplatform doctor --bundleдля создания диагностического bundle - Проверьте логи сервера на сообщения об ошибках
- Откройте issue на GitHub с диагностическим bundle и соответствующими записями журнала
Диагностический bundle не содержит контент страниц, пароли или API-токены — только структурные метаданные и конфигурацию (с замаскированными секретами).