Решение проблем
Диагностические команды
Перед началом диагностики выполните базовый набор проверок:
# Общее состояние системы
citeck health
# Статус всех приложений
citeck status
# Логи конкретного приложения
citeck logs <app>
# Логи демона
citeck logs
# Логи демона через journald
journalctl -u citeck -f
# Состояние контейнеров Docker
docker ps -a --filter label=citeck.launcher=true
# Автоматическая диагностика с исправлением
citeck diagnose --fix
Примечание
Метки Docker, используемые лончером. Все контейнеры, создаваемые
citeck, помечаются набором меток для фильтрации и трассировки:
citeck.launcher=true– признак того, что контейнер управляется лончером (используется для--filter)citeck.launcher.workspace– идентификатор workspaceciteck.launcher.namespace– идентификатор namespaceciteck.launcher.app.name– логическое имя приложенияciteck.launcher.app.hash– deployment hash (используется reload-ом для определения изменений)citeck.launcher.original-name– исходное имя до нормализации
Приложение зависло в статусе STARTING
Симптомы: приложение долго находится в состоянии STARTING и не переходит в RUNNING.
Причины и решения:
Недостаточно памяти. Проверьте доступную память:
free -h citeck describe <app> # посмотрите memoryLimit
Увеличьте heapSize через
citeck setup resourcesили добавьте оперативную память.Зависимость не готова. Приложение может ждать другой сервис:
citeck status # проверьте статус зависимостей citeck logs <dependency-app>
Ошибка в конфигурации. Проверьте логи приложения:
citeck logs <app> --tail 200
Перезапуск приложения:
citeck restart <app>
Keycloak не запускается
Симптомы: Keycloak в статусе START_FAILED или STARTING.
Причины:
PostgreSQL недоступен. Keycloak зависит от базы данных:
citeck status | grep postgres citeck logs postgres --tail 50
Нехватка памяти. Keycloak требует значительный объём памяти:
citeck describe keycloak # проверьте heapSize citeck setup resources # увеличьте heapSize для keycloak
Повреждённая база данных. Если Keycloak сообщает об ошибках миграции:
citeck logs keycloak --tail 500 | grep -i "migration\|liquibase"
Проблемы с TLS-сертификатами
Самоподписанный сертификат – предупреждение в браузере
Это ожидаемое поведение. Добавьте исключение в браузере для продолжения работы.
Let’s Encrypt не может получить сертификат
Проверьте, что порты 80 и 443 доступны из интернета:
curl -v http://<your-host>
Проверьте DNS-записи (если используется доменное имя):
dig <your-domain>Переключитесь на другой режим TLS:
citeck setup tls # Выберите "Self-signed HTTPS" или "Auto HTTPS"
Сертификат истёк
Let’s Encrypt-сертификаты обновляются автоматически. Если обновление не произошло:
# Перезапуск демона обычно решает проблему
systemctl restart citeck
Забытый пароль администратора
Пароль администратора можно сменить в любой момент:
citeck setup admin-password
Команда применяет новый пароль ко всем компонентам (Keycloak, RabbitMQ, PgAdmin) без перезапуска контейнеров.
Демон не отвечает
Симптомы: команды citeck status, citeck start не работают.
Проверьте systemd-сервис:
systemctl status citeck
Проверьте наличие сокета:
ls -la /run/citeck/daemon.sock
Stale-сокет (сокет есть, но демон не работает):
# Автоматическое исправление citeck diagnose --fix # Или вручную rm /run/citeck/daemon.sock citeck start
Примечание
citeck diagnose --fixтолько удаляет stale-сокет, но не перезапускает демон. После автоисправления обязательно запустите демон заново –systemctl start citeck(если установлен systemd-сервис) илиciteck start -d(если запуск не через systemd).Логи демона:
journalctl -u citeck --no-pager -n 100 # или cat /opt/citeck/log/daemon.log
Перезапуск через systemd:
systemctl restart citeck
Совет
Когда установлен systemd-сервис, предпочитайте systemctl start citeck над citeck start -d. Первый вариант запускает демон как systemd-unit и пишет лог в journald, что упрощает отладку и обеспечивает корректный автозапуск. citeck start -d остаётся полезным, когда systemd недоступен (например, в контейнерах) или нужен ручной запуск вне service manager.
Примечание
Расположение логов демона:
Файл:
/opt/citeck/log/daemon.log(с автоматической ротацией)systemd/journald:
journalctl -u citeck -f
Автовосстановление реконсилером
Демон запускает реконсилер, который непрерывно следит за состоянием контейнеров и автоматически восстанавливает упавшие приложения:
Отсутствующие контейнеры пересоздаются.
Неуспешные liveness-проверки (3 промаха подряд) приводят к перезапуску контейнера.
Для повторных попыток запуска используется экспоненциальный backoff: от 1 минуты до 30 минут максимум.
Перед тем как вручную перезапускать проблемное приложение, подождите 1–2 минуты и проверьте citeck status – реконсилер может самостоятельно вернуть сервис в строй. Ручной citeck restart <app> имеет смысл, если приложение не восстанавливается автоматически (например, проблема в конфигурации, а не в транзиентном сбое).
Отключённые через citeck stop <app> приложения реконсилер не трогает – они сохраняют статус STOPPED до ручного citeck start <app>.
Нехватка дискового пространства
Симптомы: ошибки no space left on device, приложения не могут запуститься.
Проверьте дисковое пространство:
df -h /opt/citeck du -sh /opt/citeck/*
Очистите неиспользуемые Docker-ресурсы:
# Показать, что будет удалено citeck clean --volumes --images # Выполнить очистку citeck clean --force --volumes --images
Обрежьте логи конкретного контейнера (сохраняя файл, но обнуляя его содержимое):
# Найти путь к лог-файлу контейнера и обнулить его: docker inspect --format='{{.LogPath}}' <container-name> | xargs sudo truncate -s 0
Либо настройте автоматическую ротацию логов глобально – в
/etc/docker/daemon.jsonзадайте лимиты драйвера логирования:{ "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" } }
После изменения файла:
systemctl restart docker. Настройки применяются к новым контейнерам, существующие надо пересоздать (черезciteck reload– hash не изменится, но если вы хотите форсировать пересоздание, можно сделатьciteck restart <app>).Предупреждение
Не используйте
docker system prune -fна сервере с работающим Citeck: команда удалит все неиспользуемые контейнеры, сети и dangling-образы, что может затронуть инфраструктуру за пределами лончера. Для безопасной очистки используйтеciteck clean --force --volumes --images– она удаляет только осиротевшие ресурсы лончера.Ротация логов демона происходит автоматически. Проверьте размер:
ls -lh /opt/citeck/log/
Конфликт портов
Симптомы: демон или прокси не могут запуститься, ошибка bind: address already in use.
Проверьте, что использует порты:
ss -tlnp | grep -E ':80|:443'
Остановите конфликтующий сервис:
# Например, если nginx занимает порт systemctl stop nginx systemctl disable nginx
Если порт занят Docker-контейнером (например, случайно оставшийся
nginx,apache,traefikв контейнере), найдите и удалите его:docker ps # найдите контейнер с нужным портом docker rm -f <container> # остановит и удалит контейнер
Или измените порт платформы:
citeck setup port
Восстановление после сбоя демона
Systemd автоматически перезапускает демон при сбое (Restart=on-failure). Контейнеры Docker продолжают работать независимо от демона.
После перезапуска новый экземпляр демона подхватывает работающие контейнеры через сравнение deployment hash – данные и состояние приложений не теряются.
Если автоматический перезапуск не помог:
# Проверить логи
journalctl -u citeck --no-pager -n 200
# Ручной перезапуск
systemctl restart citeck
# Проверить, что контейнеры всё ещё работают
docker ps --filter label=citeck.launcher=true
Откат неудачного обновления
Если после обновления бинарного файла платформа работает некорректно:
citeck install --rollback
Эта команда:
Восстанавливает предыдущую версию бинарного файла из
/usr/local/bin/citeck.bakПерезапускает демон
Контейнеры Docker не затрагиваются – они продолжают работать с прежними образами.
Проверка здоровья в скриптах мониторинга
Для интеграции с системами мониторинга (Zabbix, Nagios, Prometheus) используйте:
# Простая проверка (exit code: 0=OK, 8=unhealthy)
citeck health
echo $?
# JSON-вывод для парсинга
citeck health --format json
# Проверка конкретного приложения
citeck status --format json | jq '.apps[] | select(.name=="eapps") | .status'
Приложение в статусе PULL_FAILED
Симптомы: Docker-образ не может быть загружен.
Проверьте подключение к интернету:
curl -v https://registry.citeck.ru/v2/
Проверьте учётные данные реестра (для Enterprise):
docker login registry.citeck.ru
Повторите загрузку:
citeck restart <app>
При оффлайн-установке убедитесь, что все образы загружены:
docker images | grep citeck
Обращение в поддержку
Для сбора полной диагностики одной командой запустите:
citeck dump-system-info
Команда создаст архив citeck-dump-<timestamp>.zip в текущей директории. В архиве:
Информация о системе (uname, OS, памяти, диске)
Версия
citeckи статус платформы (status,health,diagnose)Конфигурация:
namespace.yml,daemon.yml, историяsetupЛоги демона (последние 5000 строк) + journalctl
Docker:
ps -a,inspectкаждого citeck-контейнера, логи контейнеров (head 1000 + tail 2000 строк)Любые ошибки выполнения отдельных шагов – в
errors.json
Отправьте полученный ZIP-архив в службу поддержки или приложите к issue в GitHub-репозитории (обычно < 5 MB).
Примечание
Опция --full включает полные логи контейнеров без обрезки. Используйте
только если команда поддержки попросила (архив может стать существенно больше).
Если dump-system-info недоступен (старая версия лончера или команда не работает), соберите диагностику вручную:
# Версия лончера
citeck version
# Состояние системы
citeck health --format json > health.json
# Статус приложений
citeck status --format json > status.json
# Логи демона
citeck logs --tail 5000 > daemon.log
# Логи проблемного приложения
citeck logs <app> --tail 5000 > app.log
# Информация о системе
uname -a > system.txt
docker version >> system.txt
free -h >> system.txt
df -h >> system.txt
Отправьте собранные файлы в службу поддержки или создайте issue в GitHub-репозитории.
Нехватка памяти (Enterprise)
Enterprise-бандл включает более 20 Java-приложений и требует 24–32 ГБ ОЗУ. На сервере с 16 ГБ платформа может работать нестабильно: OOM Killer завершает приложения, сервер становится недоступным.
Решения:
Отключите необязательные приложения для экономии памяти:
# Отключить приложения, которые не нужны (освобождает 4–5 ГБ) citeck stop onlyoffice citeck stop attorneys citeck stop ai citeck stop edi
Отключённые приложения не будут запускаться при перезагрузке. Для повторного включения:
citeck start <app>.Увеличьте RAM сервера до 24–32 ГБ (рекомендуется для Enterprise).
Уменьшите heap отдельных приложений:
citeck setup resources