Тема
Эксплуатация
Все команды выполняются из каталога установки. В текущем описании указан /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, веб-интерфейс, открытие существующего вложения и загрузку нового файла.
Обновление
Перед обновлением:
- Зафиксируйте текущие
BACKEND_VERSIONиFRONTEND_VERSION. - Создайте согласованные резервные копии PostgreSQL и MinIO.
- Сравните новый
.env.exampleс действующим.env. - Проверьте примечания к релизу и совместимость отката схемы БД.
После переноса новых файлов поставки:
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 -aCompose применит миграции до запуска новой версии 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 имеет состояние unhealthy | PostgreSQL, 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, относящийся к ошибке фрагмент журналов и время возникновения. Перед передачей материалов удалите секреты и персональные данные.