Impossível construir o container de importação phpBB no Discourse novíssimo

Tenho um discourse novíssimo instalado. Tudo funciona. Consigo criar a conta inicial, receber e-mails, fazer login, etc.

Preciso importar um fórum phpbb3. Pretendo usar a utilidade de importação para popular meu Discourse com dados históricos, então segui as instruções em Migrate a phpBB3 forum to Discourse

Executei o comando de cópia

cp containers/app.yml containers/import.yml

e editei o arquivo para adicionar a linha do template. Meu site usa LetsEncrypt para o certificado TLS, então as linhas de template SSL e LetsEncrypt estão descomentadas - isso é um pouco diferente do exemplo mostrado nas instruções. De qualquer forma, tentei isso com as linhas comentadas e descomentadas, então não acho que essas linhas sejam um fator.

Continuei com as instruções restantes, finalmente executando o comando de reconstrução do container. O comando não é concluído com sucesso.

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

Não tenho certeza de como resolver este problema. Instalei várias vezes em vários locais. Pelo que li, parece que esta etapa de reconstrução (que não é a importação real dos dados) deve simplesmente funcionar. Isso pode ser um problema com a versão mais recente do Discourse? Consegui executar a importação com sucesso do início ao fim vários meses atrás como um teste.

Sim.

Você precisará compartilhar ou entender mais da saída.

Para criar um ponto de partida comum, reinstalei meu VPS (Ubuntu 22.04), executei apt update && apt upgrade e, em seguida, iniciei o processo de instalação padrão do Discourse.

Caso esta informação seja relevante, cometi um erro ao digitar as informações durante o primeiro ./discourse-setup, então emiti control-C e executei ./discourse-setup novamente. A segunda execução de ./discourse-setup puxa um novo discourse/base, como mostrado…

root@discourse:/var/discourse# ./discourse-setup 
O arquivo de configuração containers/app.yml já existe!

. . . reconfigurando . . .


Salvando o arquivo antigo como app.yml.2024-07-29-151604.bak
Parando o contêiner existente em 5 segundos ou Control-C para cancelar.
Arquitetura x86_64 detectada.

AVISO: Vamos começar a baixar a imagem base do Discourse
Este processo pode levar de alguns minutos a uma hora, dependendo da sua velocidade de rede
Por favor, seja paciente

2.0.20240708-0023: Puxando de discourse/base
76956b537f14: Puxado com sucesso 
c5ffad89ad3c: Puxado com sucesso 
71c31a50a587: Puxado com sucesso 
c1a1234dcb61: Puxado com sucesso 
9980a27afc32: Puxado com sucesso 
4f4fb700ef54: Puxado com sucesso 
304b565c70c9: Puxado com sucesso 
8ad811162d08: Puxado com sucesso 
2c324dce526d: Puxado com sucesso 
52d141c2b1c8: Puxado com sucesso 
4c08fdcd145a: Puxado com sucesso 
1b6035ac25c0: Puxado com sucesso 
9208d0f90623: Puxado com sucesso 
513dccf6f63f: Puxado com sucesso 
e0b141854963: Puxado com sucesso 
4476d7dd9441: Puxado com sucesso 
0fad77941078: Puxado com sucesso 
46c34476ea19: Puxado com sucesso 
ff0b86516349: Puxado com sucesso 
c33170d09c8b: Puxado com sucesso 
ed4a793ffe51: Puxado com sucesso 
3a7b2554e089: Puxado com sucesso 
3ad8a6408839: Puxado com sucesso 
e7c58bcc7f57: Puxado com sucesso 
59b2407fe431: Puxado com sucesso 
315160f4d4f8: Puxado com sucesso 
ad328ba96976: Puxado com sucesso 
825dca2e642e: Puxado com sucesso 
9fbd8c908047: Puxado com sucesso 
b1d30330e969: Puxado com sucesso 
8c76c65bb8e8: Puxado com sucesso 
9279965667b5: Puxado com sucesso 
a0ae3eb4d088: Puxado com sucesso 
819fb509ef8b: Puxado com sucesso 
c962935d47d4: Puxado com sucesso 
63b444b5bd1e: Puxado com sucesso 
7efa1c09faf6: Puxado com sucesso 
46c4327ce462: Puxado com sucesso 
b095ebe7bdf6: Puxado com sucesso 
3aa16a533cab: Puxado com sucesso 
41419e4f1948: Puxado com sucesso 
589837814d9a: Puxado com sucesso 
bd025ad1b844: Puxado com sucesso 
24762ff7528f: Puxado com sucesso 
fe364253c657: Puxado com sucesso 
Digest: sha256:025e9c1f6848c4726544c6ae873d710c62f547b72afb7f537aaa44eb5377cb5c
Status: Imagem mais recente baixada para discourse/base:2.0.20240708-0023
docker.io/discourse/base:2.0.20240708-0023
o app não foi iniciado!
./discourse-doctor pode ajudar a diagnosticar o problema.

Encontrados 3GB de memória e 2 núcleos de CPU físicos
definindo db_shared_buffers = 768MB
definindo UNICORN_WORKERS = 4
parâmetros de memória de containers/app.yml atualizados.

A instalação do Discourse continuou e foi concluída. Consegui criar a conta inicial e fazer o login.

I, [2024-07-29T15:42:21.624379 #1]  INFO -- : Substituindo localização @discourse { por localização @discourse {
add_header Strict-Transport-Security 'max-age=31536000'; # lembre-se do certificado por um ano e conecte-se automaticamente ao HTTPS para este domínio em /etc/nginx/conf.d/discourse.conf
I, [2024-07-29T15:42:21.627858 #1]  INFO -- : > echo "Início dos comandos personalizados"
I, [2024-07-29T15:42:21.634022 #1]  INFO -- : Início dos comandos personalizados

I, [2024-07-29T15:42:21.637436 #1]  INFO -- : > echo "Fim dos comandos personalizados"
I, [2024-07-29T15:42:21.642766 #1]  INFO -- : Fim dos comandos personalizados

I, [2024-07-29T15:42:21.648034 #1]  INFO -- : Terminando processos assíncronos
I, [2024-07-29T15:42:21.649479 #1]  INFO -- : Enviando INT para 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:  solicitação de desligamento rápido recebida
I, [2024-07-29T15:42:21.652067 #1]  INFO -- : Enviando TERM para exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 120
120:signal-handler (1722267741) SIGTERM recebido, agendando desligamento...
2024-07-29 15:42:21.658 UTC [57] LOG:  abortando quaisquer transações ativas
120:M 29 Jul 2024 15:42:21.667 # Usuário solicitou desligamento...
120:M 29 Jul 2024 15:42:21.668 * Salvando o snapshot final do RDB antes de sair.
2024-07-29 15:42:21.682 UTC [57] LOG:  trabalhador em segundo plano "logical replication launcher" (PID 72) saiu com código de saída 1
120:M 29 Jul 2024 15:42:21.682 * DB salvo em disco
120:M 29 Jul 2024 15:42:21.683 # Redis está pronto para sair, até mais...
2024-07-29 15:42:21.685 UTC [67] LOG:  desligando
2024-07-29 15:42:21.806 UTC [57] LOG:  sistema de banco de dados está desligado
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# 

Em seguida, iniciei o processo descrito em Migrate a phpBB3 forum to Discourse.

Aqui está o início do meu arquivo import.yml

root@discourse:/var/discourse# head -23 containers/import.yml 
## este é o template do contêiner Docker Discourse tudo-em-um, standalone
##
## Após fazer alterações neste arquivo, você DEVE reconstruir
## /var/discourse/launcher rebuild app
##
## TENHA MUITO CUIDADO AO EDITAR!
## ARQUIVOS YAML SÃO SUPER SUPER SENSÍVEIS A ERROS DE ESPAÇAMENTO OU ALINHAMENTO!
## visite http://www.yamllint.com/ para validar este arquivo conforme necessário

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  ## Descomente a próxima linha para habilitar o listener IPv6
  #- "templates/web.ipv6.template.yml"
  - "templates/web.ratelimited.template.yml"
  ## Descomente estas duas linhas se desejar adicionar Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/import/phpbb3.template.yml"

## quais portas TCP/IP este contêiner deve expor?
## Se você quiser que o Discourse compartilhe uma porta com outro servidor web como Apache ou nginx,
root@discourse:/var/discourse# 

O problema ocorre ao executar o comando */var/discourse/launcher rebuild import*. Devido ao comprimento, não é possível postar o log desse comando. No entanto, você pode baixá-lo deste link do NextCloud…

@gerhard, isso ainda pode ser do seu domínio.

Acho que o problema é que o template do phpbb3 remove /etc/service/unicorn e então o template da web tenta alterar esse arquivo.
A coisa mais fácil pode ser excluir essas linhas de web.template.yml

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

Mas você vai querer fazer isso depois de construir o container original e então fazer algo como

git checkout templates/web.template.yml

antes de fazer outra reconstrução.

Obrigado por essas instruções, @pfaffman.

Infelizmente, deixei a reconstrução em execução e retornei a uma sessão SSH desconectada, então não capturei toda a saída da compilação. A reconstrução criou uma imagem docker e iniciou o contêiner, então fiquei razoavelmente satisfeito que ela terminou normalmente.

Coloquei meus dados phpbb3 nos locais corretos para uma importação local e emiti o comando para começar. A importação está em andamento agora, mas levará algum tempo para terminar. Responderei amanhã com um resultado.

A importação foi concluída e parece ter migrado a maior parte dos dados. Algumas contas de usuário do phpBB aparentemente têm contas de e-mail que incomodam o Discourse. Acho que pode ser um espaço em branco no final. Vou tentar limpar antes de executar o procedimento inteiro novamente.

Obrigado pela ajuda. Presumo que haverá uma correção para a utilidade de importação, que, de outra forma, falhará na compilação para a versão atual do Discourse. Suspeito que muitas pessoas não terão as habilidades técnicas para investigar o problema e simplesmente desistirão ao encontrar o erro. Isso resultaria em menos comunidades Discourse e discussões históricas perdidas em sites phpBB abandonados ou excluídos.