我有一个 2.5.0.beta4 的安装版本。
它本应被升级,但在过程中它损坏了,我的网站不再加载。
我拥有所有的文件和数据库等。它是在 Ubuntu 16 上的 Docker 中运行的。
我有什么选择来修复它?
我对 shell 一窍不通,所以必须找人帮我做,但我需要知道该怎么做,而不是盲目尝试。
任何帮助都将不胜感激。
您能提供一些额外的细节吗?容器是否正在加载(docker ps)?是否有任何错误消息/日志可以指明方向?您是自托管还是在第三方主机上?
你好 Mike,谢谢你的回复,这是我得到的信息。
当我运行 ./discourse-docto 时,我收到此错误:
+ /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'
docker: daemon 的响应错误:拉取 'local_discourse/app' 镜像被拒绝,仓库不存在或可能需要 'docker login':拒绝访问请求的资源。
请参阅 'docker run --help'。
无法重新启动容器。
当我尝试运行 /launcher rebuild app 时出现相同的错误。
docker 是最新版本。
另外,我在 doctor 日志中看到此错误:
失败
--------------------
Pups::ExecError: cd /var/www/discourse & find /var/www/discourse ! -user discourse -exec chown discourse {} + 失败,返回 #<Process::Status: pid 1929 exit 1>
失败位置:/usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
执行失败,参数为 {"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 {} \\+"]}
引导失败,退出代码为 1
** 引导失败 ** 请向上滚动查找更早的错误消息,可能不止一个。
./discourse-doctor 可能会帮助诊断问题。
f4d0b782e3d1c3deccb5e3d6c186a08ebbaaea22ed37d19a2ff07b7688c83926
您在进行哪种类型的升级?我建议检查 app.yml 文件是否有拼写错误,然后再次运行完全重建。
您的 Docker 版本太旧了,这是因为您的 Ubuntu 版本太旧了。
您有备份吗?只需在 Ubuntu 22 上启动一个新的 VPS 并恢复它。
我没有备份,只有一个 VPS 在上次工作时的快照,但恢复后无法加载。
Docker version 23.0.3, build 3e7cbfd
app.yml 没问题,已在 https://www.yamllint.com 上验证
错误与启动器中的这一行有关:
cidbootstrap=cids/\"$config\"_bootstrap.cid
local_discourse=local_discourse
image=\"discourse/base:2.0.20230409-0052\"
docker_path=`which docker.io 2\u003e /dev/null || which docker`
git_path=`which git`
local_discourse=local_discourse
在这种情况下有什么办法可以获取数据或进行备份吗?
数据库文件应该可以访问。在我的生产服务器上,它们位于 /var/discourse/shared/standalone/postgres_data,您的可能位于类似的位置。
我建议在进行任何操作之前,将系统完整备份到另一台服务器,特别是 discourse 目录下的所有目录。
如果没有足够新的备份,我建议使用更新版本的 Ubuntu(以及 Docker)创建一个新服务器,然后将 discourse 树下的所有目录(包括所有 postgres 文件)复制到新服务器上。(我还没有在 discourse 服务器上执行过此操作,但我管理 postgres 数据库已有 20 年了,如果数据库文件完好无损,将有助于重建/恢复。)
这个系统有多久没有更新了?如果答案是“是”,那么将现有文件复制到新服务器可能会出现问题,因为这并不是正确的方法;discourse 备份包含的不仅仅是 postgresql 数据库文件。(这就是为什么我尝试在进行小型升级之前进行备份,尽管我承认我并不总是这样做。)
您最新的 discourse 备份可能位于与此目录类似的目录中:
/var/discourse/shared/standalone/backups/default
嗨 Mike,感谢您的回复,非常感激。
升级失败了,而且在某个时候 SSL 停止了自动续订,所以在尝试处理这一切的时候,我最终陷入了这种境地。
我试试这个,我正在尝试重建应用程序,但遇到了空间不足的问题,不知何故,Discourse 占用了我 15GB 的空间。
除了重建,有没有办法像启动命令一样启动 Discourse?
再次感谢。
您可能有很多闲置的容器镜像。
运行“docker images”可以列出它们。例如,在我的生产系统中,它列出了 7 个大约 3.5 GB 的镜像,所以这会占用不少空间,我的沙盒系统显示有 20 多个。您可以删除其中一些镜像来释放一些空间,或者将它们复制到另一台服务器(如果它们上有可用空间)。
我假设“docker ps”没有显示正在运行的容器。
您是否尝试启动一个旧容器以查看它是否能启动站点?然后您可以进行备份。
我认为 Launcher 应该可以做到这一点,它在很大程度上是 docker 命令的前端,但它也可能执行其他任务来启动 discourse。
嘿 Mike,很有趣的是里面只有一个容器。我通过清理日志等方式腾出了空间。但没有成功。还有另一个我找不到的问题。我将遵循你的其他指示,看看是否能通过手动方法(例如将文件和数据库复制到更高版本)来使其运行起来。
当我运行 docker run 时,我得到:
docker run discourse
本地找不到镜像“discourse:latest”
docker:守护进程的错误响应:拉取镜像被拒绝,仓库不存在或可能需要“docker login”:拒绝:请求访问该资源被拒绝。
如果您尝试启动器会发生什么?
./launcher start app
出现以下错误:
.....truncated
在本地找不到镜像 'local_discourse/app:latest'
/usr/bin/docker:守护进程的错误响应:
拉取 'local_discourse/app' 镜像被拒绝,
存储库不存在或可能需要 'docker login':拒绝:
请求访问该资源被拒绝。
docker images 会得到什么?
只有一个:
discourse/base 2.0.20230409-0052 08afe7103ce8
我或多或少可以重现你遇到的错误消息,方法是使用一个旧的镜像,但到目前为止,我还没有找到强制加载该镜像的方法。
目前不确定还能提供什么建议。
嗨 Mike,你之前标记为解决方案的办法在一定程度上解决了问题。将所有文件复制到一个新的 VPS 后,经过一些修改就奏效了。
感谢大家的帮助。
很高兴您找到了解决方案,也很高兴能帮到您。请务必定期进行备份。 ![]()
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.