Skip to content

Обновление

Copula поддерживает self-update, запускаемый из UI, а также ручной путь обновления на хосте. Миграции базы данных применяются автоматически при каждом обновлении через init-задачу copula-migrate.

Self-update из UI

Бэкенд предоставляет API self-update, которым управляет UI:

  • GET /api/system/update/status — проверить, доступно ли обновление, и отслеживать состояние запуска.
  • POST /api/system/update с телом {"force": false} — запустить обновление.

Проверка доступности основана на digest: бэкенд сравнивает digest образа работающего контейнера с тегом latest в реестре через примонтированный /var/run/docker.sock. Переменная окружения SELF_UPDATE_IMAGE переопределяет ссылку на образ, используемую в этой проверке.

Состояния запуска:

idle → pulling → migrating → recreating → restarting → completed / failed

Защитные ограничения при force равном false:

  • 400 no_update_available — образ работающего контейнера уже совпадает с digest в реестре.
  • 409 active_jobs_running — выполняются задачи пайплайна; в теле ответа перечислены блокирующие задачи. Дождитесь их завершения или повторите с force: true.

Автоматического отката нет

Если замена контейнера завершается ошибкой, предыдущий контейнер остаётся остановленным под переименованным именем-предшественником. Восстановите его вручную — см. Устранение неполадок.

Ручное обновление

На сервере скачайте новые образы и пересоздайте стек:

bash
# Автоматическая установка (мастер)
cd /root/copula
docker compose pull
docker compose up -d
bash
# Ручная установка (из опубликованного образа)
cd <директория с вашим docker-compose.yml>  # создана при ручной установке
docker compose pull
docker compose up -d

docker compose pull скачивает актуальный образ njoy14/copula-api:latest вместе с остальными образами стека.

Миграции базы данных применяются автоматически при каждом up через init-задачу copula-migrate, которая запускается до старта бэкенда.

INFO

Монтирование /var/run/docker.sock в контейнер бэкенда обязательно — без него не работают ни self-update, ни интеграция с cocoindex.