无法在全新的Discourse上构建phpBB导入容器

我安装了一个全新的 discourse。一切正常。我可以创建初始帐户、接收电子邮件、登录等。

我需要导入一个 phpbb3 论坛。我打算使用导入实用程序来填充我的 Discourse 的历史数据,因此我遵循了 Migrate a phpBB3 forum to Discourse 中的说明。

我执行了复制命令

cp containers/app.yml containers/import.yml

并编辑了文件以添加模板行。我的站点使用 LetsEncrypt 进行 TLS 证书,因此 SSL 和 LetsEncrypt 模板行已取消注释 - 这与说明中显示的示例略有不同。无论如何,我已经尝试过注释掉和取消注释掉这些行,所以我认为这些行不是问题所在。

我继续执行其余说明,最后运行了重建容器命令。该命令未能成功完成。

94:M 23 Jul 2024 20:14:40.761 * Saving the final RDB snapshot before exiting.
94:M 23 Jul 2024 20:14:40.855 * DB saved on disk
94:M 23 Jul 2024 20:14:40.857 # Redis is now ready to exit, bye bye...
2024-07-23 20:14:41.235 UTC [32] LOG: database system is shut down


FAILED
--------------------
Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/service/unicorn/run
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace failed with the params {"tag"=>"precompile", "filename"=>"/etc/service/unicorn/run", "from"=>"PRECOMPILE_ON_BOOT=1", "to"=>"PRECOMPILE_ON_BOOT=0"}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
6f1a0b5cd0cfc8ed542938b7439aeff0a21a0135c58617fa5a05e68fd6fcc70d

我不确定如何解决这个问题。我已经安装了多次,在多个地方。根据阅读,似乎这个重建步骤(它不是实际的数据导入)应该可以运行。这是否可能是最近的 Discourse 版本的问题?几个月前我成功地从头到尾完成了导入作为测试。

是的。

您需要分享或了解更多输出内容。

1 个赞

为了创建一个共同的起点,我重新安装了我的 VPS(Ubuntu 22.04),运行了 apt update 和 apt upgrade,然后开始了标准的 Discourse 安装过程。

如果这些信息很重要,我在第一次运行 ./discourse-setup 时输入信息时犯了一个错误,因此按下了 control-C,然后重新运行了 ./discourse-setup。第二次运行 ./discourse-setup 会拉取一个新的 discourse/base,如下所示……

root@discourse:/var/discourse# ./discourse-setup 
配置文件 containers/app.yml 已存在!

. . . 重新配置 . . .


将旧文件另存为 app.yml.2024-07-29-151604.bak
5 秒后停止现有容器,或按 Control-C 取消。
检测到 x86_64 架构。

警告:我们将开始下载 Discourse 基础镜像
此过程可能需要几分钟到一小时,具体取决于您的网络速度
请耐心等待

2.0.20240708-0023:正在从 discourse/base 拉取
76956b537f14:拉取完成 
c5ffad89ad3c:拉取完成 
71c31a50a587:拉取完成 
c1a1234dcb61:拉取完成 
9980a27afc32:拉取完成 
4f4fb700ef54:拉取完成 
304b565c70c9:拉取完成 
8ad811162d08:拉取完成 
2c324dce526d:拉取完成 
52d141c2b1c8:拉取完成 
4c08fdcd145a:拉取完成 
1b6035ac25c0:拉取完成 
9208d0f90623:拉取完成 
513dccf6f63f:拉取完成 
e0b141854963:拉取完成 
4476d7dd9441:拉取完成 
0fad77941078:拉取完成 
46c34476ea19:拉取完成 
ff0b86516349:拉取完成 
c33170d09c8b:拉取完成 
ed4a793ffe51:拉取完成 
3a7b2554e089:拉取完成 
3ad8a6408839:拉取完成 
e7c58bcc7f57:拉取完成 
59b2407fe431:拉取完成 
315160f4d4f8:拉取完成 
ad328ba96976:拉取完成 
825dca2e642e:拉取完成 
9fbd8c908047:拉取完成 
b1d30330e969:拉取完成 
8c76c65bb8e8:拉取完成 
9279965667b5:拉取完成 
a0ae3eb4d088:拉取完成 
819fb509ef8b:拉取完成 
c962935d47d4:拉取完成 
63b444b5bd1e:拉取完成 
7efa1c09faf6:拉取完成 
46c4327ce462:拉取完成 
b095ebe7bdf6:拉取完成 
3aa16a533cab:拉取完成 
41419e4f1948:拉取完成 
589837814d9a:拉取完成 
bd025ad1b844:拉取完成 
24762ff7528f:拉取完成 
fe364253c657:拉取完成 
摘要:sha256:025e9c1f6848c4726544c6ae873d710c62f547b72afb7f537aaa44eb5377cb5c
状态:已下载 discourse/base 的更新镜像:2.0.20240708-0023
docker.io/discourse/base:2.0.20240708-0023
应用程序未启动!
./discourse-doctor 可能会帮助诊断问题。

发现 3GB 内存和 2 个物理 CPU 核心
设置 db_shared_buffers = 768MB
设置 UNICORN_WORKERS = 4
containers/app.yml 内存参数已更新。

Discourse 安装继续并成功完成。我能够创建初始帐户并登录。

I, [2024-07-29T15:42:21.624379 #1]  INFO -- : 替换位置 @discourse { 为 @discourse {
add_header Strict-Transport-Security 'max-age=31536000'; # 在 /etc/nginx/conf.d/discourse.conf 中记住证书一年并自动连接到此域的 HTTPS
I, [2024-07-29T15:42:21.627858 #1]  INFO -- : > echo "开始自定义命令"
I, [2024-07-29T15:42:21.634022 #1]  INFO -- : 开始自定义命令

I, [2024-07-29T15:42:21.637436 #1]  INFO -- : > echo "结束自定义命令"
I, [2024-07-29T15:42:21.642766 #1]  INFO -- : 结束自定义命令

I, [2024-07-29T15:42:21.648034 #1]  INFO -- : 终止异步进程
I, [2024-07-29T15:42:21.649479 #1]  INFO -- : 发送 INT 到 HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 57
2024-07-29 15:42:21.651 UTC [57] LOG:  收到快速关机请求
I, [2024-07-29T15:42:21.652067 #1]  INFO -- : 发送 TERM 到 exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 120
120:signal-handler (1722267741) 收到 SIGTERM,正在安排关机...
2024-07-29 15:42:21.658 UTC [57] LOG:  中止任何活动事务
120:M 29 Jul 2024 15:42:21.667 # 用户请求关机...
120:M 29 Jul 2024 15:42:21.668 * 在退出前保存最终 RDB 快照。
2024-07-29 15:42:21.682 UTC [57] LOG:  后台工作进程“逻辑复制启动器”(PID 72)已退出,退出代码为 1
120:M 29 Jul 2024 15:42:21.682 * DB 已保存在磁盘上
120:M 29 Jul 2024 15:42:21.683 # Redis 现已准备好退出,再见...
2024-07-29 15:42:21.685 UTC [67] LOG:  正在关闭
2024-07-29 15:42:21.806 UTC [57] LOG:  数据库系统已关闭
sha256:6a6d6a8ea3559ad031a84fd48a164686e9440d7e857cb39619c2baba84a4b966
2b8eddd7b72415507d10cc404c40459c19c7ad3e025cb7bb69bcddb3c98b0197

+ /usr/bin/docker run --shm-size=512m -d --restart=always -e LANG=en_US.UTF-8 -e RAILS_ENV=production -e UNICORN_WORKERS=4 -e UNICORN_SIDEKIQS=1 -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 LC_ALL=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e DISCOURSE_HOSTNAME=discourse3.greenbullfrog.com -e DISCOURSE_DEVELOPER_EMAILS=discourse-admin@greenbullfrog.com -e DISCOURSE_SMTP_ADDRESS=box.greenbullfrog.com -e DISCOURSE_SMTP_PORT=587 -e DISCOURSE_SMTP_USER_NAME=discourse@greenbullfrog.com -e DISCOURSE_SMTP_PASSWORD=lAtDyjbyqztzhrG -e DISCOURSE_SMTP_DOMAIN=discourse3.greenbullfrog.com -e DISCOURSE_NOTIFICATION_EMAIL=noreply@discourse3.greenbullfrog.com -e LETSENCRYPT_ACCOUNT_EMAIL=letsencrypt@greenbullfrog.com -h discourse-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:f9:8c:dd:3d:63 local_discourse/app /sbin/boot
a78541042858ed6a4dd739bb7c8243a50a4064f595fdf968c22c8b63afb68979
root@discourse:/var/discourse# 

接下来,我开始执行 Migrate a phpBB3 forum to Discourse 中描述的流程。

这是我的 import.yml 文件的开头……

root@discourse:/var/discourse# head -23 containers/import.yml 
## 这是全合一的独立 Discourse Docker 容器模板
##
## 修改此文件后,您必须重建
## /var/discourse/launcher rebuild app
##
## 请务必极其小心地编辑!
## YAML 文件对空格或对齐错误非常非常敏感!
## 如有需要,请访问 http://www.yamllint.com/ 进行验证

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## 取消注释下一行以启用 IPv6 监听器
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## 如果您想添加 Let's Encrypt (https),请取消注释这两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/import/phpbb3.template.yml"

## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
root@discourse:/var/discourse# 

问题发生在运行 /var/discourse/launcher rebuild import 命令时。由于长度限制,无法在此处发布该命令的日志。但是,您可以从这个 NextCloud 链接下载:

@gerhard,这可能还在你的能力范围内。

我认为问题在于 phpbb3 模板删除了 /etc/service/unicorn,然后 web 模板试图更改该文件。
最简单的方法可能是从 web.template.yml 中删除这些行

  - replace:
      tag: precompile
      filename: /etc/service/unicorn/run
      from: PRECOMPILE_ON_BOOT=1
      to: "PRECOMPILE_ON_BOOT=0"

但你需要在构建原始容器之后再进行操作,然后执行类似

git checkout templates/web.template.yml

在进行另一次重建之前。

1 个赞

感谢您的指示,@pfaffman

不幸的是,我让重建继续运行,然后我返回到一个已断开连接的 SSH 会话,因此没有捕获到所有的构建输出。重建确实创建了一个 Docker 镜像并启动了容器,所以我对它正常结束感到相当满意。

我将我的 phpbb3 数据放在了本地导入的正确位置,并发出了开始命令。导入目前正在进行中,但需要一些时间才能完成。我明天会回复结果。

1 个赞

导入已成功完成,并且似乎已迁移了大部分数据。一些 phpbb 用户帐户的电子邮件帐户似乎让 Discourse 感到不适。我认为可能是末尾有空格。我会在重新运行整个过程之前进行清理。

谢谢你的帮助。我推测导入工具将得到修复,否则将无法为当前版本的 Discourse 构建。我怀疑许多人没有技术技能来深入研究这个问题,遇到错误时就会放弃。这将导致 Discourse 社区减少,并且历史讨论将丢失在被放弃或删除的 phpbb 站点上。

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