Skip to content

Обновление Docker all-in-one до Nextbox 1.12 ​

Инструкция предназначена для прежнего контейнера all-in-one. Для установки из нескольких контейнеров используйте переход Docker Compose с 1.11 до 1.12.

Образ nextbox-docker.ptnl.moscow/nextbox/nextbox-all-in-one:1.12.0 выпускается только для amd64 (x86_64). Обновление допускает остановку сервисов.

Переход с 1.11: автоматическая замена контейнера ​

Старый контейнер должен работать и иметь записываемый том или bind mount в /var/nextbox. Не удаляйте его перед переносом: ключи 1.11 находятся в /etc/nextbox/config.yml внутри старого контейнера, а не в томе данных.

Укажите имя старого контейнера вместо nextbox:

bash
docker run --rm --pull always --platform linux/amd64 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --entrypoint /usr/bin/nextbox-upgrade \
  nextbox-docker.ptnl.moscow/nextbox/nextbox-all-in-one:1.12.0 \
  docker-all-in-one nextbox

Помощник читает фактическую конфигурацию через старые бинарники и переносит ключи, DSN, настройки и пути данных в /var/nextbox/config/core.yml. Новый Core проверяет конфигурацию до остановки старого контейнера. Затем помощник заменяет контейнер, сохраняя его имя, порты, тома, окружение, сети и политику перезапуска. Старый контейнер удаляется после получения статуса healthy у нового. Основной контейнер работает без Docker socket.

Бэкапы и копии пользовательских данных не создаются. Очереди RabbitMQ не переносятся отдельно. Некорректные ключи, несовместимые общие подключения, нестандартные команды запуска и включённые старые security-адаптеры блокируют автоматическое обновление до остановки старого контейнера.

Если ошибка возникла после запуска нового Core, прежний контейнер остаётся остановленным. Автоматического отката миграций БД нет.

Если контейнером управлял Compose, обновите образ в его YAML, чтобы следующий запуск Compose использовал 1.12.

Переход с 1.11: перенос при обычном старте ​

Этот вариант не требует подключения Docker socket. Пока старый контейнер существует, сохраните его конфигурацию в том данных:

bash
docker exec --user root nextbox sh -ec '
  mkdir -p /var/nextbox/config
  chmod 0700 /var/nextbox/config
  cp /etc/nextbox/config.yml /var/nextbox/config/config.yml
  chmod 0600 /var/nextbox/config/config.yml
'

Затем остановите старый контейнер и замените его новым образом, сохранив прежние тома, порты, сети и окружение. Не запускайте старый и новый контейнеры одновременно на одном томе PostgreSQL.

При каждом старте entrypoint вызывает помощник без отдельного флага:

  • Если core.yml уже существует, помощник ничего не меняет.
  • Если core.yml отсутствует, но есть /var/nextbox/config/config.yml или /etc/nextbox/config.yml, помощник преобразует старые настройки, учитывает прежние переменные POTENTIAL_* и проверяет результат новым Core. После успешной проверки записывает core.yml и запускает службы.
  • Если нет обоих конфигов и существующей базы, выполняется новая установка. Существующая база без конфигурации блокирует запуск, чтобы не создать новые ключи для старых данных.

Старый конфиг также можно подключить read-only в /etc/nextbox/config.yml. При ошибке преобразования или проверки службы не запускаются, исходный конфиг сохраняется.

Последующие обновления 1.12 ​

Загрузите выбранный новый образ и пересоздайте контейнер с прежними томами, портами, сетями и окружением. Существующий /var/nextbox/config/core.yml сохраняется, повторный перенос не выполняется. Не заменяйте действующие ключи значениями из примеров и не удаляйте том данных при замене контейнера.

Проверка после обновления ​

bash
docker inspect --format '{{.State.Health.Status}}' nextbox
docker exec nextbox wget -q -O- http://127.0.0.1:6005/readyz
docker logs nextbox

Дождитесь healthy, затем проверьте вход со старой учётной записью, доступ к прежним файлам, загрузку нового файла и используемые расширения.