升级失败

我在 Debian 11 上使用 Docker 以单容器模式运行 Discourse。

我尝试使用 ./launcher rebuild app 进行更新。

它以以下消息失败:

I, [2023-01-04T20:53:09.920876 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!

我找不到任何方法可以使其恢复运行。

有什么想法吗?

我看到所有者是错误的

drwxr-xr-x 15 sshd             netdev          4096 Jan  4 21:43 .
drwxr-xr-x  3 root             root            4096 Jan  3  2018 ..
drwxr-xr-x  3             1000 www-data        4096 Jan  3  2018 backups
drwxr-xr-x  8 sshd             netdev          4096 Feb  2  2021 letsencrypt
drwxr-xr-x  4 sshd             netdev          4096 Jan  3  2018 log
drwxr-xr-x  2 systemd-timesync systemd-resolve 4096 Jan  3  2018 postgres_backup
drwx------ 19 systemd-timesync systemd-resolve 4096 Jan  4 21:53 postgres_data
drwx------ 19 sshd             netdev          4096 Jan  4 20:49 postgres_data_new
drwxrwsr-x  6 systemd-timesync systemd-resolve 4096 Jan  4 21:53 postgres_run
drwxr-xr-x  2 systemd-resolve  kvm             4096 Jan  4 21:53 redis_data
drwxr-xr-x  2 sshd             netdev          4096 Jan 22  2021 ssl
drwxr-xr-x  2 sshd             netdev          4096 Jan 21  2021 ssl_old
drwxr-xr-x  4 sshd             netdev          4096 Jan  3  2018 state
drwxr-xr-x  4             1000 www-data        4096 Jan  4 21:28 tmp
drwxr-xr-x  4             1000 www-data        4096 Jan  5  2018 uploads

我使用 ./launcher start app 启动容器。然后进入容器:./launcher enter app

我重置了所有权 chown -R postgres:postgres /shared/

之后它被更正了。但是当我再次重建应用程序时,所有者又错了……

这不是错误,错误会出现在更靠前的位置,我们需要查看日志的更多内容。

2023-01-04 20:48:05.355 UTC [41] LOG:  starting PostgreSQL 13.9 (Debian 13.9-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
2023-01-04 20:48:05.377 UTC [41] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2023-01-04 20:48:05.377 UTC [41] LOG:  listening on IPv6 address "::", port 5432
2023-01-04 20:48:05.566 UTC [41] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-01-04 20:48:05.734 UTC [44] LOG:  database system was shut down at 2023-01-04 20:46:17 UTC
2023-01-04 20:48:05.878 UTC [41] LOG:  database system is ready to accept connections
I, [2023-01-04T20:48:09.779985 #1]  INFO -- :
I, [2023-01-04T20:48:09.780390 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
2023-01-04 20:48:10.014 UTC [54] postgres@postgres ERROR:  database "discourse" already exists
2023-01-04 20:48:10.014 UTC [54] postgres@postgres STATEMENT:  CREATE DATABASE discourse;
createdb: error: database creation failed: ERROR:  database "discourse" already exists
I, [2023-01-04T20:48:10.017003 #1]  INFO -- :
I, [2023-01-04T20:48:10.017425 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
2023-01-04 20:48:10.188 UTC [58] postgres@discourse ERROR:  role "discourse" already exists
2023-01-04 20:48:10.188 UTC [58] postgres@discourse STATEMENT:  create user discourse;
ERROR:  role "discourse" already exists
129:M 04 Jan 2023 20:48:21.224 # Failed listening on port 6379 (TCP), aborting.

我没有看到其他错误。

:man_shrugging:

在容器内,我尝试启动 postgresql 服务时遇到错误。

root@server /var/discourse # ./launcher enter app
检测到 x86_64 架构。
root@discourse:/var/www/discourse# service postgresql start
[失败] 正在启动 PostgreSQL 13 数据库服务器:main[....] 错误:配置所有者 (postgres:105) 和数据所有者 (systemd-timesync:101) 不匹配,并且配置所有者不是 root ... 失败!
 失败!
root@discourse:/var/www/discourse#

如果您更改了共享文件夹内文件的所有者,您将破坏安装。一种选择是重新安装并恢复备份,另一种是手动修复这些所有者。

1 个赞

@Falco:谢谢!

升级失败后,我更改了所有者。我在某个帖子中找到了 chown 的提示。

如何在此当前状态下创建备份?

如何手动修复所有者?

再次感谢!

在容器中,我尝试了 discourse backup。它报告 Redis 未运行。在“current” Redis 日志的末尾,我发现了以下行…

10316:M 05 Jan 2023 08:05:27.314 # 服务器已初始化
10316:M 05 Jan 2023 08:05:27.314 # 警告 overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将 'vm.overcommit_memory = 1' 添加到 /etc/sysctl.conf,然后重新启动,或运行命令 'sysctl vm.overcommit_memory=1' 使其生效。
10316:M 05 Jan 2023 08:05:27.314 # 无法处理 RDB 格式版本 10
10316:M 05 Jan 2023 08:05:27.314 # 加载数据库时发生致命错误:无效参数。正在退出。
10321:C 05 Jan 2023 08:05:28.345 # oO0OoO0OoO0Oo Redis 正在启动 oO0OoO0OoO0Oo
10321:C 05 Jan 2023 08:05:28.345 # Redis 版本=6.2.3, 位数=64, commit=00000000, 修改=0, pid=10321, 刚刚启动
10321:C 05 Jan 2023 08:05:28.345 # 已加载配置
10321:M 05 Jan 2023 08:05:28.346 * 单调时钟:POSIX clock_gettime
10321:M 05 Jan 2023 08:05:28.347 * 运行模式=standalone, 端口=6379。
10321:M 05 Jan 2023 08:05:28.347 # 警告:TCP 积压设置 511 无法强制执行,因为 /proc/sys/net/core/somaxconn 设置为较低值 128。
10321:M 05 Jan 2023 08:05:28.347 # 服务器已初始化
10321:M 05 Jan 2023 08:05:28.347 # 警告 overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将 'vm.overcommit_memory = 1' 添加到 /etc/sysctl.conf,然后重新启动,或运行命令 'sysctl vm.overcommit_memory=1' 使其生效。
10321:M 05 Jan 2023 08:05:28.348 # 无法处理 RDB 格式版本 10
10321:M 05 Jan 2023 08:05:28.348 # 加载数据库时发生致命错误:无效参数。正在退出。

我在容器内像这样修复了权限:

之后我使用 ./launcher restart app 重启了容器。现在我可以访问 Discourse 了。但这还是我昨天尝试升级到 3.0.0.beta16 的旧版本 2.8.3。

我不确定如何继续升级 Discourse。

我认为我的问题与此帖子有关:Problem upgrading multi-site/multi-containers Discourse instance - #5 by jtraulle

我记得以前有过升级问题,但从未调查过。

./launcher rebuild app

我通过在app.yml中将commit id设置为“version”,成功将版本设置为2.9.0.beta2(commit id:88a8584348ed93a28286839bfc1c32b06bd50b3f)。这次升级成功了。之后,我能够升级到3.0.0.beta16。
感谢大家。

5 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.