我在 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!
我找不到任何方法可以使其恢复运行。
有什么想法吗?
我在 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.
我没有看到其他错误。
![]()
在容器内,我尝试启动 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#
如果您更改了共享文件夹内文件的所有者,您将破坏安装。一种选择是重新安装并恢复备份,另一种是手动修复这些所有者。
在容器中,我尝试了 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。
感谢大家。
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.