Не удалось выполнить сборку из-за сбоя при обновлении PostgreSQL 12

Какой гайд?
Порт 2045 напоминает мне о чём-то, но я не могу точно вспомнить что именно :thinking:

После нескольких неудачных установок несколько месяцев назад я изменил значение на 2045, но это не имеет значения, так как оно закомментировано символом #. Проблема не в этом порте.

Я следовал этой инструкции: discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

Ну… Он был изменён, бывает, что пальцы скользят :sweat_smile:

Понимаю, но чтобы в какой-то момент прийти к 2045, вы, возможно, следовали чему-то, что привело вас сюда и сейчас.
Думаю, я последовал за тем же постом, потому что у меня тоже есть прокси 2045 в конфигурации nginx по какой-то причине, которую я не помню…

:лицо_с_безумным_выражением:

@Benjamin_D в моём файле nginx нет порта 2045, вы можете проверить это, прокрутив текст выше. Строка в app.yml закомментирована символом #, поэтому я не понимаю, почему вы указываете на неё. Проблема точно не в этом, иначе сообщение об ошибке указало бы на неё.

Я могу удалить эту строку из файла app.yml, если хотите, но результат будет таким же, как и раньше.

Кажется, когда я устанавливал это в первый раз, контейнер сообщал, что порты 80 или 443 уже заняты, поэтому я где-то прочитал, что можно просто добавить случайный порт. Но опять же, эта строка закомментирована символом #, и она не должна учитываться.

Совсем нет, мы просто пытаемся воспроизвести ваши шаги и сравнить нашу настройку с вашей

Эта ошибка, безусловно, связана со сбоем при обновлении PostgreSQL.

Обратитесь к теме на meta, чтобы решить проблему.

Я проверю тему обновления PostgreSQL. Если я столкнусь с другой ошибкой, я вернусь с сообщением.

Итак, после обновления PostgreSQL с версии 10 до 12 у меня всё ещё возникают проблемы после выполнения команды: ./launcher rebuild app

sudo ./launcher rebuild app
fatal: not a git repository (or any of the parent directories): .git
Остановка старого контейнера
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Уже актуально.
I, [2020-07-13T13:34:21.635079 #1]  INFO -- : Загрузка --stdin
I, [2020-07-13T13:34:21.643465 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-07-13T13:34:21.713536 #1]  INFO -- : Генерация локалей (это может занять некоторое время)...
Генерация завершена.

I, [2020-07-13T13:34:21.713917 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-07-13T13:34:21.720693 #1]  INFO -- :
I, [2020-07-13T13:34:21.721042 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-07-13T13:34:21.724919 #1]  INFO -- :
I, [2020-07-13T13:34:21.725387 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-07-13T13:34:21.728768 #1]  INFO -- :
I, [2020-07-13T13:34:21.729117 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-07-13T13:34:21.732712 #1]  INFO -- :
I, [2020-07-13T13:34:21.733008 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-07-13T13:34:21.735981 #1]  INFO -- :
I, [2020-07-13T13:34:21.736200 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres уже запущен, остановите контейнер ; exit 1
2020/07/13 13:34:21 socat[27] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Нет такого файла или каталога
I, [2020-07-13T13:34:21.751266 #1]  INFO -- :
I, [2020-07-13T13:34:21.752242 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-07-13T13:34:21.757300 #1]  INFO -- :
I, [2020-07-13T13:34:21.757817 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-07-13T13:34:21.761287 #1]  INFO -- :
I, [2020-07-13T13:34:21.761706 #1]  INFO -- : > mkdir -p /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.765114 #1]  INFO -- :
I, [2020-07-13T13:34:21.765725 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/10-main.pg_stat_tmp
I, [2020-07-13T13:34:21.770573 #1]  INFO -- :
I, [2020-07-13T13:34:21.781057 #1]  INFO -- : Файл > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.791681 #1]  INFO -- : Файл > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-07-13T13:34:21.800244 #1]  INFO -- : Файл > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.808363 #1]  INFO -- : Файл > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-07-13T13:34:21.809170 #1]  INFO -- : > chown -R root /var/lib/postgresql/10/main
chown: невозможно получить доступ к '/var/lib/postgresql/10/main': Нет такого файла или каталога
I, [2020-07-13T13:34:21.817357 #1]  INFO -- :


ОШИБКА
--------------------
Pups::ExecError: chown -R root /var/lib/postgresql/10/main завершилась с ошибкой, код возврата #<Process::Status: pid 42 exit 1>
Место ошибки: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec завершился с ошибкой с параметрами {"cmd"=>["chown -R root /var/lib/postgresql/10/main", "[ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/10/bin/initdb -D /shared/postgres_data || exit 0", "chown -R postgres:postgres /shared/postgres_data", "chown -R postgres:postgres /var/run/postgresql"]}
3e7af3d49be0616ae52ee03d6ee0867d25e5db96de40d92c7ec7abeded5d3262
** НЕ УДАЛОСЬ ЗАПУСТИТЬ ** пожалуйста, прокрутите вверх и поищите сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь диагностировать проблему.

Не понимаю, сдаюсь… ;/

Что означает "fatal: not a git repository (or any of the parent directories): .git "??

Также получаю следующее:

sudo ./discourse-setup
Файл конфигурации containers/app.yml уже существует!

. . . перенастройка . . .


Сохранение старого файла как app.yml.2020-07-13-153931.bak
Остановка существующего контейнера через 5 секунд или нажмите Control-C для отмены.
+ /usr/bin/docker stop -t 10 app
app

Обнаружено 4 ГБ памяти и 2 физических процессорных ядра
установка db_shared_buffers = 1024MB
установка UNICORN_WORKERS = 4
параметры памяти containers/app.yml обновлены.

Имя хоста для вашего Discourse? [cp2077.eu]:

Проверка доменного имени . . .
ВНИМАНИЕ: Порт 443 компьютера, по-видимому, недоступен по имени хоста:    cp2077.eu.
ВНИМАНИЕ: Подключение к http://cp2077.eu (порт 80) также не удаётся.

Это означает, что cp2077.eu разрешается в какой-то IP-адрес, который не ведёт к этой машине, на которой вы устанавливаете Discourse.

Первое, что нужно сделать, — убедиться, что cp2077.eu разрешается в IP-адрес этого сервера.
Обычно это делается в том же месте, где вы покупали домен.

Если вы уверены, что IP-адрес разрешается правильно, проблема может быть в брандмауэре.
Поиск в интернете по запросу "открыть порты ВАШЕ ОБЛАЧНОЕ ОБСЛУЖИВАНИЕ" может помочь.

Этот инструмент предназначен только для самых стандартных установок. Если вы не сможете решить
вышеуказанную проблему, вам придётся самостоятельно отредактировать containers/app.yml, а затем ввести

./launcher rebuild app

Сайт работает и защищён с использованием порта 443 (SSL), не понимаю, почему система сообщает, что не может достичь сайта. Не знаю, что ещё делать. Пожалуйста, помогите.

У вас есть обратный прокси, поэтому вы не можете использовать discourse-setup. Кроме того, вам, скорее всего, нужно удалить шаблон let’s encrypt из вашего конфигурационного файла.

Я не знаю, в чём может быть проблема с postgres.

Вы имеете в виду те строки про прокси в моём файле nginx?

Разве вы не пытаетесь переустановить Discourse «поверх» предыдущей установки (от февраля), поэтому в скриншоте из первого сообщения отображается существующий файл app.yml, и требуется обновление PostgreSQL с версии 10 до 12 (что, судя по сообщению об ошибке, вы, вероятно, не сделали — возможно, вы обновили его на хосте, но не в контейнере с данными, который мог уже не существовать; я не знаю текущего состояния вашей предыдущей установки)?
Есть ли у вас резервная копия? Хотите ли вы чистую установку?

Я думаю, что @pfaffman имеет в виду, что из-за использования обратного прокси-сервера (nginx) скрипт discourse-setup может не работать (я никогда не запускал Discourse с обратным прокси, поэтому не знаю, так ли это). Если вы правильно определите app.yml, всё должно работать и без запуска discourse-setup.

Похоже, что код пытается выполниться в контейнере, в котором нет PostgreSQL 10 (вы, вероятно, используете версию 12). Если это так, и ваш шаблон — templates/postgres.template.yml, как указано в вашем первом сообщении, возможно, репозиторий discourse_docker на вашем компьютере (в /var/discourse) устарел.

Ваш установленный Discourse новый или старый? Возможно, проблема решится при обновлении репозитория:

cd /var/discourse
git pull

а затем выполните шаг пересборки.

Также убедитесь, что контейнер Discourse уничтожен и создан заново (а не просто остановлен и запущен), чтобы не использовать старый контейнер (я думаю, что пересборка Discourse уже делает это, но на всякий случай…).

Если это не сработает и у вас есть резервная копия, рекомендуется попробовать установить систему на новый чистый экземпляр, как сказал @Benjamin_D.

@Benjamin_D,

Я пытаюсь установить Discourse для другого домена «поверх» моей предыдущей установки. Точнее, два домена на одном сервере. Прошу прощения за мою неосведомлённость, в какой части файла app.yml можно найти настройки PostgreSQL? Я просмотрел свой app.yml, но ничего связанного с этим не нашёл.

У меня есть резервные копии старых файлов; я как-то скопировал некоторые данные из моей предыдущей установки в новый app.yml для нового сервера.

@lucasbasquerotto

Здесь также прошу прощения за неосведомлённость: когда вы говорите «прокси» nginx, вы имеете в виду эту строку?

location / {
        proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Real-IP $remote_addr;

Ранее я использовал PostgreSQL 10, но вчера обновил его до версии 12.

Я очень хотел бы в этом случае запустить новый экземпляр. Как мне удалить старые, чтобы убедиться, что всё будет установлено заново? Большое спасибо.

Два экземпляра Discourse на одном сервере — это мультисайтовая конфигурация, совсем другая история :smile:
На данный момент я думаю, что лучше всего убедиться, что у вас есть резервная копия первого сайта, что он работает и обновлён до PostgreSQL 12, а затем попробовать приключение с мультисайтом, для которого я совершенно не квалифицирован :sweat_smile:

Спасибо, Бенджамин.

Я бы начал заново. У меня есть резервная копия первого сайта, но это была лишь пробная версия, и она больше не нужна. Я хотел бы начать всё с чистого листа.

Как удалить старый контейнер и всё остальное, чтобы начать с чистого листа?

Вы пробовали сначала обновить репозиторий discourse_docker локально (в /var/discourse)? Это не сработало?

Что касается обратного прокси, то это связано с тем, что nginx находится в центре обработки запросов и направляет их к нужным сервисам (вместо того чтобы сервис, в данном случае Discourse, был напрямую открыт в интернет). Таким образом, nginx выступает в роли обратного прокси, а порты (80 и 443), открытые в интернет, принадлежат сервису nginx.

Странно, что настройка Discourse работала в феврале на одном из моих доменов, как вы заметили, Бенджамин, помните? Я также публиковал сообщения на эту тему некоторое время назад. Поэтому меня удивляет, что люди никогда не запускали Discourse с nginx. Честно говоря, всё работало отлично, пока вчера я не попытался установить Discourse на другом домене, используя тот же сервер.

На что именно мне стоит обратить внимание в discourse_docker? Вот содержимое этой папки:

discourse_docker$ ls
bin   containers        discourse-setup  launcher  README.md  scripts  templates
cids  discourse-doctor  image            LICENSE   samples    shared

Просто выполните git pull, чтобы обновить репозиторий (сама директория /var/discourse является локальным репозиторием), как я уже говорил в одном из сообщений выше:

а затем выполните команду rebuild.

Есть и другие пользователи, которые используют nginx в качестве фронтенда, но таких случаев значительно меньше, чем стандартной установки на выделенный сервер только для Discourse. Я также не знаю, сломает ли это discourse-setup; я лишь делаю предположение на основе ваших результатов, учитывая, что ошибка возникла при проверке DNS и открытых портов (и помня о том, что именно ваш контейнер Discourse не использует порты 80 и 443 на хосте).

Хорошо, я зашел в папку discourse_docker, как вы и советовали, Лукас. Я скопировал свой файл app.yml в контейнеры этой папки и выполнил команду ./launcher rebuild app.

Что-то произошло без ошибок, и, кажется, всё работает.

Пока не хочу сглазить, сейчас попробую настроить новую учётную запись :smiley: