Поврежденный git при пересборке приложения лаунчера

После обновления docker_manager через интерфейс (что, казалось, прошло успешно), панель Администратора просто отобразила пустую страницу, хотя остальная часть форума, похоже, работала нормально.

Чтобы решить эту проблему, я попытался выполнить:

./launcher rebuild app

Однако в процессе выполнения возникли ошибки:

I, [2025-07-14T08:54:06.062789 #1]  INFO -- : > cd /var/www/discourse && sudo -H -E -u discourse bash -c '
  set -o errexit
  if [ $(git rev-parse --is-shallow-repository) == "true" ]; then
      git remote set-branches --add origin main
      git remote set-branches origin tests-passed
      git fetch --depth 1 origin tests-passed
  else
      git fetch --tags --prune-tags --prune --force origin
  fi
'
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index

… и ошибка error: packfile продолжает появляться до тех пор, пока процесс не будет прерван.

Судя по всему, репозиторий git повреждён. Но какой именно репозиторий?
У меня даже нет папки /var/www/discourse, поэтому я предполагаю, что это находится внутри тома контейнера?

Я немного растерян. Спасибо за помощь!

Что вы имеете в виду?

Обычно вы обновляете docker_manager через UI.

Ах! Моя ошибка. Я имел в виду UI, а не API. Я исправлю это прямо сейчас.

Я попытался решить проблему, запустив и войдя в контейнер приложения:

./launcher start app
./launcher enter app

Затем я проверил, что ошибка возникает при вызове команды git от имени пользователя discourse:

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

Что привело к следующему:

error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
error: packfile .git/objects/pack/pack-581fe47ace192793da04d01989a4d1a7f0e6103c.pack does not match index
и так далее..

Я попытался решить проблему, переименовав discourse и клонировав новый репозиторий:

cd /var/www
mv discourse discourse-old
git clone https://github.com/discourse/discourse.git
chown -R discourse:discourse discourse

После клонирования я снова попытался выполнить git fetch, и ошибок не возникло!

cd /var/www/discourse
sudo -H -E -u discourse bash -c 'git fetch --tags --prune-tags --prune --force origin'

Однако, как только я вышел из оболочки контейнера и попытался снова пересобрать приложение с помощью ./launcher rebuild app, ошибка повторилась.

Использует ли ./launcher rebuild app другой контейнер, чем тот, в который входит ./launcher enter app?

Да, есть два уровня Git: один снаружи (не включающий все клонированные плагины!) и один внутри.

Ваша ошибка действительно, похоже, возникает внутри контейнера… очень странно!

Наконец-то всё заработало!
Думаю, это было сочетание повреждённого git и последствий предыдущего обновления Docker. Я решил проблему, удалив все контейнеры и образы Docker:

cd /opt/discourse
./launcher stop app
docker container prune
docker image prune -a
./launcher rebuild app

В результате процесс завершился следующим сообщением:

Обновление завершено
----------------
Статистика оптимизатора не переносится утилитой pg_upgrade.
После запуска нового сервера рекомендуется выполнить:
    /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Выполнение этого скрипта приведёт к удалению файлов данных старого кластера:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ОБНОВЛЕНИЕ POSTGRES ЗАВЕРШЕНО

Старая база данных версии 13 хранится в /shared/postgres_data_old

Для завершения обновления выполните повторную сборку с помощью:

./launcher rebuild app
-------------------------------------------------------------------------------------

После повторного выполнения команды rebuild всё заработало в полном объёме:

./launcher rebuild app