Файлы базы данных несовместимы с сервером (обновление внутри Linode)

У меня наблюдаются симптомы, описанные по адресу Error Updating from 3.4.0.beta3-dev to 3.4.0.beta3. Единственное отличие — в ошибке.

Я не могу процитировать ваше изображение.

Но похоже, вам нужно удалить старую директорию postgres_data_old. Если у вас есть место и вы хотите перестраховаться, можете переименовать её.

Не могу понять, как скопировать вывод экрана на веб-английском

Это ключевая часть моего сообщения.

Сначала, возможно, стоит проверить, что она действительно старая:

 ls -l /var/discourse/shared/standalone/

и убедиться, что эта резервная директория не имеет сегодняшней даты.

Если у вас достаточно места на диске, можно сделать примерно так:

cd /var/discourse
cd shared/standalone
mv postgres_data_old postgres_data_delete_me

а затем попробовать снова.

Не удалось.
Кажется, я дублирую Upgrade failed spectacularily

Можете ли вы поделиться содержимым вашего файла app.yml? Перед публикацией удалите любую конфиденциальную информацию.

от root@localhost: /var/discourse/containers

## Это шаблон контейнера Docker Discourse «все-в-одном» для автономной работы
##
## После внесения изменений в этот файл ВЫ ДОЛЖНЫ выполнить пересборку:
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ И ВЫРАВНИВАНИИ!
## при необходимости проверяйте этот файл на сайте http://www.yamllint.com/

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

## Какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал один порт с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для подробностей
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум на 25% от общего объема памяти.
  ## будет установлено автоматически при загрузке в зависимости от обнаруженного объема ОЗУ, либо вы можете переопределить
  db_shared_buffers: "256MB"

  ## может улучшить производительность сортировки, но увеличивает использование памяти на соединение
  #db_work_mem: "40MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Сколько одновременных веб-запросов поддерживается? Зависит от объема памяти и количества ядер процессора.
  ## будет установлено автоматически при загрузке в зависимости от обнаруженных процессоров, либо вы можете переопределить
  UNICORN_WORKERS: 4

  ## TODO: Доменное имя, на которое будет реагировать этот экземпляр Discourse
  DISCOURSE_HOSTNAME: <mydomain>

  ## Раскомментируйте, если хотите, чтобы контейнер запускался с тем же
  ## именем хоста (опция -h), что указано выше (по умолчанию "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: Список адресов электронной почты через запятую, которые станут администраторами и разработчиками
  ## при первой регистрации, например 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: <myemail>

  ## TODO: SMTP-сервер, используемый для проверки новых учетных записей и отправки уведомлений
  DISCOURSE_SMTP_ADDRESS: <mymailorg>
  DISCOURSE_SMTP_PORT: <myport>
  DISCOURSE_SMTP_USER_NAME: <mysmpremail>
  DISCOURSE_SMTP_PASSWORD: <mypassword>
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (опционально, по умолчанию true)

  ## Если вы добавили шаблон Lets Encrypt, раскомментируйте ниже, чтобы получить бесплатный SSL-сертификат
  LETSENCRYPT_ACCOUNT_EMAIL: <myemail>

  ## Адрес CDN для этого экземпляра Discourse (настроен на извлечение)
  ## см. https://meta.discourse.org/t/14857 для подробностей
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## Контейнер Docker не имеет состояния; все данные хранятся в /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## Плагины размещаются здесь
## см. https://meta.discourse.org/t/19157 для подробностей
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-math.git

## Любые пользовательские команды для запуска после сборки
run:
  - exec: echo "Начало пользовательских команд"
  ## Если вы хотите установить адрес электронной почты в поле 'От' для первой регистрации, раскомментируйте и измените:
  ## После получения первого письма о регистрации закомментируйте строку обратно. Она должна выполниться только один раз.
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "Конец пользовательских команд"
 

Не могли бы вы подтвердить версию вашего Docker? Если у вас установлена версия старше рекомендуемой 24.0.7, мы рекомендуем обновить Docker и повторить попытку.

В отдельной теме сообщалось о схожих проблемах, и похоже, что обновление Docker решило их.

Версия Docker 20.10.7, сборка f0df350

cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.7 LTS (Xenial Xerus)"

Похоже, у вас возникла проблема с Docker, аналогичная той, о которой сообщалось в другой теме.

Я рекомендую обновить Ubuntu и Docker до более новых версий, а затем попытаться собрать заново.

Если ваш старый контейнер app всё ещё существует и вы не изменяли существующие файлы данных в shared/standalone/postgres_data, вы можете попробовать запустить ./launcher start app, чтобы запустить сайт на старом контейнере на время.

Я выполнил шаги для обновления Ubuntu и наконец нажал на этом.


Однако экран завис на:

После переподключения я вижу, что у меня Ubuntu 18.04.6 LTS (Bionic Beaver)

Это будет намного проще, если вы создадите новую виртуальную машину с актуальной операционной системой. Версия 18.04 уже не поддерживается, а поддержка 20.04 закончится в апреле.

Если у вас есть актуальная резервная копия, создайте новый сервер и восстановите из неё, полностью избежав проблем с обновлением PostgreSQL.

Для Discourse не требуется установка PostgreSQL непосредственно в операционную систему. Это ещё одна причина начать с чистой ОС.

Спасибо, Джей.
Мне удалось восстановить резервную копию с одного Linode на другой (linode2).
Теперь мне нужно открыть Discourse на linode2, чтобы он мог отправить мне резервную копию по электронной почте.
Я создал новую настройку DNS для linode2, но при переходе по адресу получаю ошибку 502 Bad Gateway.
Возможно, нужно немного подождать?
Странно, что discbak.softwarebydesign.com.au (linode2) в данный момент перенаправляет на discourse.softwarebydesign.com.au (на исходном Linode).

Вы можете скопировать резервную копию с помощью scp/rsync. Это проще и быстрее (если вы не знаете, что это такое).

Вам действительно стоит создать новую виртуальную машину с новой ОС (не резервную копию сервера с устаревшей ОС) и перенести данные на неё, как описано в статье Перенос сайта Discourse на другой VPS с помощью rsync. Тот сервер, который я только что скопировал, тоже имел проблемы с правами владельца. У вас, скорее всего, возникнут они же.

Если discbak использует тот же образ, что и другой сервер, я бы ожидал ошибки сертификата (если только вы не заходили по http://), после чего перенаправление должно произойти на то, что указано в HOSTNAME.

Можно честно сказать, что я не совсем понимаю, что делаю.
Я создал новый VPS с Ubuntu 24.0.1 LTS и дошёл до инструкции:

rsync -rvz example.com:/var/discourse /var

Из-за неудачного обновления example.com возвращает ошибку 502 Bad Gateway.
Я сейчас на этапе обучения и пытаюсь разобраться, как всё же предоставить доступ.