Skip to content

Эксплуатация

Все команды выполняются из каталога установки. В текущем описании указан /opt/l1-support.

Проверка состояния

bash
cd /opt/l1-support
docker compose ps -a
docker compose logs --tail=200

Постоянные сервисы postgres, redis, minio, backend и frontend должны быть Up и healthy. Состояние Exited (0) для одноразовых сервисов migrate и minio-mc является штатным.

Проверка локальных endpoint:

bash
curl -f http://127.0.0.1:9100/api/v1/system/bootstrap/status
curl -fI http://127.0.0.1:9090
curl -f http://127.0.0.1:9104/minio/health/live

Журналы

bash
docker compose logs --tail=200
docker compose logs -f backend
docker compose logs -f postgres redis minio
docker compose logs --since=30m backend

Не передавайте .env, токены, cookies, пароли и полные диагностические архивы третьим лицам без проверки содержимого.

Остановка и запуск

Остановить и запустить существующие контейнеры:

bash
docker compose stop
docker compose start

Применить изменённую конфигурацию или пересоздать необходимые контейнеры:

bash
ENVFILE=.env docker compose --env-file .env config --quiet
docker compose up -d

Не используйте docker compose down -v: параметр -v удаляет volumes PostgreSQL и MinIO вместе с данными.

Резервное копирование

В резервную копию должны входить:

  • дамп PostgreSQL;
  • содержимое бакета MinIO;
  • .env и неизменяемый APP_SECRETS_KEY;
  • каталог config;
  • номера версий backend и frontend.

Redis содержит временные данные и отдельно не резервируется.

PostgreSQL

bash
docker compose exec -T postgres sh -c \
  'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" --format=custom' \
  > l1-support-postgres-$(date +%F-%H%M%S).dump

Команда должна завершиться с кодом 0, а полученный файл — иметь ненулевой размер.

MinIO

Данные находятся в volume minio_data. Настройте регулярное копирование бакета во внешнее S3-совместимое или файловое хранилище, например средствами mc mirror или корпоративной системы резервного копирования.

Не ограничивайтесь копированием файлов активного Docker volume без остановки MinIO: такая копия может быть несогласованной.

Требования к резервным копиям

  • PostgreSQL и MinIO должны относиться к одному согласованному периоду.
  • Копии должны храниться за пределами Docker-сервера.
  • Доступ к .env и APP_SECRETS_KEY должен быть ограничен.
  • Срок хранения и допустимая потеря данных должны соответствовать принятым RPO/RTO.
  • Восстановление необходимо регулярно проверять на отдельном стенде.

Для строгой согласованности остановите запись данных на время создания обеих копий:

bash
docker compose stop backend frontend
# Создайте дамп PostgreSQL и копию бакета MinIO.
docker compose start backend frontend

Восстановление

Перед восстановлением сохраните текущее состояние и убедитесь, что выбраны согласованные копии PostgreSQL и MinIO.

Остановите приложение:

bash
docker compose stop backend frontend

Восстановите PostgreSQL:

bash
docker compose exec -T postgres sh -c \
  'pg_restore -U "$POSTGRES_USER" -d "$POSTGRES_DB" --clean --if-exists' \
  < l1-support-postgres-YYYY-MM-DD-HHMMSS.dump

Восстановите бакет MinIO из соответствующей копии принятой в организации процедурой, затем запустите и проверьте систему:

bash
docker compose start backend frontend
docker compose ps -a

Проверьте API, веб-интерфейс, открытие существующего вложения и загрузку нового файла.

Обновление

Перед обновлением:

  1. Зафиксируйте текущие BACKEND_VERSION и FRONTEND_VERSION.
  2. Создайте согласованные резервные копии PostgreSQL и MinIO.
  3. Сравните новый .env.example с действующим .env.
  4. Проверьте примечания к релизу и совместимость отката схемы БД.

После переноса новых файлов поставки:

bash
cd /opt/l1-support
sudo chown -R 10001:10001 config logs
ENVFILE=.env docker compose --env-file .env config --quiet

В контуре с registry загрузите новые образы:

bash
docker compose pull backend frontend migrate

В закрытом контуре вместо pull загрузите переданные архивы через docker load и проверьте теги командой docker compose config --images.

Примените обновление:

bash
docker compose up -d
docker compose ps -a

Compose применит миграции до запуска новой версии backend. После обновления проверьте API, веб-интерфейс, загрузку и скачивание файлов, почтовые обработчики и используемые провайдеры аутентификации.

Откат

Откат только образов допустим, если предыдущая версия приложения совместима с уже применённой схемой базы данных.

Если схема совместима, верните предыдущие версии в .env, обеспечьте наличие образов на сервере и выполните:

bash
docker compose up -d --no-deps backend frontend
docker compose ps -a

В контуре с registry отсутствующие предыдущие образы можно предварительно получить командой docker compose pull backend frontend.

Если предыдущая версия несовместима с новой схемой, остановите приложение и восстановите согласованные резервные копии PostgreSQL и MinIO. Не запускайте down-миграции без явно предусмотренной для релиза процедуры.

Диагностика

ПроблемаЧто проверитьКоманда или действие
pull access denied или manifest unknownПуть к образу, точную версию и авторизацию в registry.docker compose config --images, docker login <registry>.
В закрытом контуре выполняется обращение к registryНа сервер загружены не все образы или не совпадают теги.docker image ls, docker compose config --images.
migrate завершился с Exited (1)Параметры PostgreSQL, готовность БД и журнал миграций.docker compose logs --tail=200 migrate postgres.
Backend имеет состояние unhealthyPostgreSQL, Redis, MinIO, завершение миграций и значения .env.docker compose ps -a, docker compose logs --tail=200 backend.
Интерфейс работает, файлы не загружаютсяS3_PUBLIC_ENDPOINT, DNS, TLS, лимит reverse proxy и доступ рабочих мест к S3.Открыть ${S3_PUBLIC_ENDPOINT}/minio/health/live с рабочего места.
Система работает локально, но недоступна пользователямDNS, firewall, reverse proxy и совпадение публичных URL.Сравнить .env с конфигурацией reverse proxy.
LDAP не подключаетсяКорпоративный DNS, маршрутизацию, сертификат и порты 389/636.Проверить разрешение имени и TCP-доступ из сети Docker-сервера.
Письма не приходят или не отправляютсяIMAP/SMTP, DNS, TLS и журналы почтовых обработчиков.docker compose logs --since=30m backend.
После перезагрузки сервисы не запустилисьАвтозапуск Docker и состояние контейнеров.systemctl status docker, docker compose ps -a.
На диске заканчивается местоDocker Root Dir, volumes, журналы и незавершённые загрузки.df -h, docker system df, docker volume inspect ....

Если проблема сохраняется, соберите версии образов, вывод docker compose ps -a, относящийся к ошибке фрагмент журналов и время возникновения. Перед передачей материалов удалите секреты и персональные данные.

Логотип ЛЕГИОНЛЕГИОН