Обновление
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.
Автоматического отката нет
Если замена контейнера завершается ошибкой, предыдущий контейнер остаётся остановленным под переименованным именем-предшественником. Восстановите его вручную — см. Устранение неполадок.
Ручное обновление
На сервере скачайте новые образы и пересоздайте стек:
# Автоматическая установка (мастер)
cd /root/copula
docker compose pull
docker compose up -d# Ручная установка (из опубликованного образа)
cd <директория с вашим docker-compose.yml> # создана при ручной установке
docker compose pull
docker compose up -ddocker compose pull скачивает актуальный образ njoy14/copula-api:latest вместе с остальными образами стека.
Миграции базы данных применяются автоматически при каждом up через init-задачу copula-migrate, которая запускается до старта бэкенда.
INFO
Монтирование /var/run/docker.sock в контейнер бэкенда обязательно — без него не работают ни self-update, ни интеграция с cocoindex.