Я экспортировал довольно старую версию контейнера Discourse и файлы Docker с работающего экземпляра и импортировал их на другой сервер.
Мне нужно изменить имя хоста Discourse, чтобы оно соответствовало новому серверу.
Можно ли применить новое значение DISCOURSE_HOSTNAME: без пересборки?
Если пересборка необходима, загрузит ли она последнюю версию из ветки main и заменит ли текущую версию, которая у меня есть? Мне нужно запустить именно текущую версию.
Вам потребуется изменить настройки в конфигурации Let’s Encrypt, и именно поэтому (по крайней мере частично) необходимо выполнить пересборку.
Почему бы не обновиться? Это именно то, что вам действительно нужно сделать. Как давно вы не обновлялись?
Однако вы можете искусственно зафиксировать версию discourse_docker (то есть /var/discourse и версию Discourse, на которой вы работаете). Возможно, также потребуется зафиксировать все плагины.
Если у вас есть другое решение для обработки HTTPS, вы, возможно, сможете избежать пересборки и просто выполнить остальные действия, описанные здесь: Change the domain name or rename your Discourse.
Мне нужно установить ту же версию на этот инстанс, чтобы протестировать обновление до последней версии; если тест пройдет успешно, я выполню обновление на продакшене.
Если у вас есть другой сервис, обрабатывающий разрешение HTTPS, возможно, вам удастся избежать пересборки и выполнить только остальные действия в статье Изменение имени домена или переименование вашего Discourse.
HTTPS обрабатывается балансировщиком нагрузки, но в той ссылке указано, что после изменения app.yml необходимо выполнить пересборку.
Если я зафиксирую версии, то для discourse_docker мне следует выбрать текущий хэш коммита?
А для приложения Discourse внутри контейнера мне тоже нужно указать его текущий хэш коммита, используя version: <commit_hash> в app.yml?
Скорее всего, если вы установите текущую версию на тестовый сервер и восстановите на нём базу данных, вы сможете обновить и продакшен-сервер.
То, что вы предлагаете, вероятно, займёт несколько часов работы, включает множество запутанных деталей, которые будет очень сложно описать на форуме, и не докажет ничего такого, чего не доказала бы реставрация базы данных продакшена на новый сервер.
Просто укажите, что и стейджинг-сервер, и продакшен-сервер используют один и тот же бакет резервных копий в S3. Создайте резервную копию продакшена и восстановите её на стейджинг-сервере. В дальнейшем они будут синхронизированы, и вы сможете обновлять стейджинг и продакшен практически одновременно.
I, [2023-04-07T19:17:58.707365 #1] INFO -- : > cd /var/www/discourse && gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)
ERROR: Could not find a valid gem 'bundler' (= 2.3.4), here is why:
Unable to download data from https://rubygems.org/ - Net::OpenTimeout: execution expired (https://rubygems.org/specs.4.8.gz)
Однако с хоста я могу выполнить curl к rubygems.org.
Да, команда rebuild, а также инициированное через GUI обновление выдают одну и ту же ошибку.
Повторная попытка работы с фетчером из-за ошибки (4/4): Bundler::HTTPError Не удалось получить спецификации с https://rubygems.org/ из-за внутренней ошибки <Net::OpenTimeout: время выполнения истекло (https://rubygems.org/specs.4.8.gz)>
Произошла ошибка при установке зафиксированной версии bundler (2.4.4). Повторите запуск с флагом `--verbose` для получения подробной информации. Продолжаем работу с bundler 2.3.6.
Получение индекса исходных кодов с https://rubygems.org/
Не удалось получить спецификации с https://rubygems.org/ из-за внутренней ошибки
<Net::OpenTimeout: время выполнения истекло (https://rubygems.org/specs.4.8.gz)>
Docker Manager: НЕ УДАЛОСЬ ОБНОВИТЬСЯ