У меня установлена версия 2.5.0.beta4.
Предполагалось её обновление, но в процессе оно прервалось, и мой сайт перестал загружаться.
У меня есть все файлы, база данных и прочее. Установка была выполнена через Docker на Ubuntu 16.
Какие у меня есть варианты для исправления ситуации?
Я ничего не понимаю в командной строке, поэтому мне придётся попросить кого-то сделать это за меня, но мне нужно чётко понимать, что именно нужно делать, чтобы не действовать вслепую.
Любая помощь будет очень кстати.
Можете предоставить дополнительные детали: загружается ли контейнер (docker ps)? Есть ли какие-либо сообщения об ошибках или логи, которые могли бы указать направление? Вы используете самохостинг или сторонний хостинг?
Привет, Майк, спасибо за ответ. Вот что я получаю:
Когда я запускаю ./discourse-doctor, получаю эту ошибку:
+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=2 -e UNICORN_SIDEKIQS=1 -e RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 -e
RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000 -e
RUBY_GC_HEAP_INIT_SLOTS=400000 -e
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5 -e
DISCOURSE_DB_SOCKET=/var/run/postgresql -e
DISCOURSE_DB_HOST= -e
DISCOURSE_DB_PORT= -e
LETSENCRYPT_DIR=/shared/letsencrypt -e
DISCOURSE_FORCE_HTTPS=true -e
DISCOURSE_HOSTNAME=discuss.domain -e
DISCOURSE_DEVELOPER_EMAILS=info@domain -e
DISCOURSE_SMTP_ADDRESS=mail3.domain -e
DISCOURSE_SMTP_PORT=587 -e
DISCOURSE_SMTP_USER_NAME=xxx@domain -e
DISCOURSE_SMTP_PASSWORD=xxx -e
LETSENCRYPT_ACCOUNT_EMAIL=info@domain -h
Ubuntu-1804-bionic-64-minimal-app -e
DOCKER_HOST_IP=172.17.0.1 --name app -t -p 80:80 -p 443:443 -v /var/discourse/shared/standalone:/shared -v /var/discourse/shared/standalone/log/var-log:/var/log --mac-address 02:8d:5a:f6:a3:11 local_discourse/app /sbin/boot
Не удалось найти образ 'local_discourse/app:latest' локально
docker: Ошибка ответа от демона: доступ к загрузке образа local_discourse/app запрещён, репозиторий не существует или может потребоваться 'docker login': отказано: запрошенный доступ к ресурсу запрещён.
См. 'docker run --help'.
Не удалось перезапустить контейнер.
Та же ошибка при попытке запустить /launcher rebuild app
Docker последней версии
Также я вижу эту ошибку в логе doctor:
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && find /var/www/discourse ! -user discourse -exec chown discourse {} \+ failed with return #<Process::Status: pid 1929 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"web", "cmd"=>["gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,\"\"); print $0 }' Gemfile.lock)", "find $home ! -user discourse -exec chown discourse {} \\+"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** пожалуйста, прокрутите вверх и посмотрите на более ранние сообщения об ошибках, их может быть больше одной.
./discourse-doctor может помочь в диагностике проблемы.
f4d0b782e3d1c3deccb5e3d6c186a08ebbaaea22ed37d19a2ff07b7688c83926
Какое обновление вы выполняли? Проверьте файл app.yml на наличие опечаток, а затем запустите полную пересборку.
Ваша версия Docker устарела, и это происходит из-за того, что ваша Ubuntu слишком старая. У вас есть резервная копия? Просто запустите новый VPS на Ubuntu 22 и восстановите её.
У меня нет резервной копии, только снимок VPS с момента последней работоспособности, но после восстановления он не загружается.
Docker version 23.0.3, build 3e7cbfd
Файл app.yml в порядке, проверен на https://www.yamllint.com.
Ошибка связана с этой строкой в launcher:
cidbootstrap=cids/"$config"_bootstrap.cid
local_discourse=local_discourse
image="discourse/base:2.0.20230409-0052"
docker_path=`which docker.io 2> /dev/null || which docker`
git_path=`which git`
local_discourse=local_discourse
Как в этой ситуации получить данные или сделать резервную копию?
Файлы базы данных должны быть доступны. На моём продакшн-сервере они находятся по пути /var/discourse/shared/standalone/postgres_data, у вас они могут располагаться в аналогичном месте.
Прежде чем продолжать, я рекомендую сделать полную резервную копию системы на другой сервер, особенно всех директорий, находящихся внутри директории ‘discourse’.
Если у вас нет актуальной (достаточно свежей) резервной копии, я бы создал новый сервер с более новой версией Ubuntu (и, соответственно, Docker), а затем скопировал бы все директории из структуры discourse на него, включая все файлы PostgreSQL. (Мне ещё не приходилось делать это на сервере Discourse, но я администрирую базы данных PostgreSQL уже 20 лет, и если файлы базы данных целы, это помогает в восстановлении/пересоздании системы.)
Прошло ли много времени с момента последнего обновления этой системы? Если ответ на этот вопрос «да», то при попытке скопировать существующие файлы из директорий discourse на новый сервер могут возникнуть осложнения, потому что это действительно не правильный способ действий; резервная копия Discourse содержит гораздо больше, чем просто файлы базы данных PostgreSQL. (Именно поэтому я стараюсь делать резервную копию даже перед незначительным обновлением, хотя признаю, что не всегда это делаю.)
Ваша последняя резервная копия Discourse, скорее всего, находится в директории, похожей на эту:
/var/discourse/shared/standalone/backups/default
Привет, Майк, спасибо за твои ответы, я очень это ценю.
Обновление не удалось, и в какой-то момент SSL перестал автоматически обновляться, поэтому, пытаясь решить все эти проблемы, я оказался в такой ситуации.
Я попробую, я пытаюсь пересобрать приложение, но у меня недостаточно места: по какой-то причине Discourse использует 15 ГБ.
Есть ли способ запустить Discourse, кроме пересборки, например, через команду запуска?
Спасибо еще раз.
У вас, вероятно, осталось множество образов контейнеров.
Команда docker images покажет их список. Например, на моей продукционной системе она выводит 7 образов размером около 3,5 ГБ каждый, что в сумме занимает немало места; на моей тестовой системе их более 20. Вы можете удалить некоторые из этих образов, чтобы освободить место, или скопировать их на отдельный сервер, если там есть свободное пространство.
Предполагаю, что docker ps не показывает запущенный контейнер.
Пробовали ли вы запустить старый контейнер, чтобы проверить, откроется ли сайт? После этого можно сделать резервную копию.
Полагаю, Launcher справится с этим: он в основном служит фронтендом для команд Docker, но также может выполнять другие необходимые задачи для запуска Discourse.
Привет, Майк, странно, но там всего один контейнер. Мне удалось освободить место, очистив логи и прочее, но это не помогло. Есть ещё одна проблема, которую я не могу найти. Я просто последую твоим другим инструкциям, чтобы посмотреть, получится ли запустить его вручную, например, скопировав файлы и базу данных на более новую версию.
Когда я запускаю docker run, получаю:
docker run discourse
Unable to find image 'discourse:latest' locally
docker: Error response from daemon: pull access denied for discourse, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
Что произойдет, если вы попробуете лаунчер?
./launcher start app
Выдает следующее:
.....обрезано
Не удалось найти образ 'local_discourse/app:latest' локально
/usr/bin/docker: Ошибка ответа от демона:
доступ к загрузке для local_discourse/app запрещен,
репозиторий не существует или может потребоваться 'docker login': отказано:
запрошенный доступ к ресурсу запрещен.
Что вы получаете от команды ‘docker images’?
Только один:
discourse/base 2.0.20230409-0052 08afe7103ce8
Я могу более или менее воспроизвести сообщения об ошибке, которые вы получаете, используя более старый образ, но пока не нашел способа заставить этот образ загрузиться.
Не уверен, что еще я могу предложить на данный момент.
Привет, Майк! Твоё решение, помеченное ранее как решение, немного прояснило ситуацию. Я скопировал все файлы на новый VPS, и после нескольких изменений всё заработало. Спасибо всем за помощь.
Рад, что вы нашли решение, мне было приятно помочь. Не забывайте регулярно делать резервные копии. ![]()