Instalar Discourse para desenvolvimento usando Docker

Olá,

Estou recebendo este erro ao tentar executar d/boot_dev --init:

Errno::EACCES: Permissão negada @ dir_s_mkdir - tmp
/src/config/boot.rb:23:in `<top (required)>'
/src/config/application.rb:16:in `require'
/src/config/application.rb:16:in `<top (required)>'
/src/Rakefile:7:in `require'
/src/Rakefile:7:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(Veja o rastreamento completo executando a tarefa com --trace)
```\nAlguma ideia de como corrigir? Tentei pesquisar por isso em todos os lugares, mas não encontrei nenhuma solução.

Edição: corrigi executando `chmod -R 777 ~/discourse`, mas agora estou recebendo este erro:

`gifsicle worker: gifsicle não encontrado; por favor, forneça o binário adequado ou desabilite este worker (argumento --no-gifsicle ou :gifsicle => false através das opções)`
2 curtidas

Isso não é um problema, removemos nosso uso recentemente, o aviso não é motivo de preocupação. Você está trabalhando com código antigo do Discourse?

4 curtidas

Não, foi o lançamento recente. Mas segui este tutorial da DigitalOcean e agora está funcionando perfeitamente.

2 curtidas

Como usar plugins nesse tipo de configuração?
Estou tentando seguir Install plugins on a self-hosted site, mas o artigo menciona o arquivo /var/discourse/containers/app.yml, que não existe no meu diretório discourse.

Consegui configurar um ambiente de desenvolvimento do Discourse e testar meu patch, mas como faço para aplicar meu patch na minha instância de produção? Tentei construir a imagem base e depois executar ./launcher rebuild app --run-image discourse/base:build, mas isso não parece resultar em uma instância do Discourse em execução.

Normalmente, recebo um erro sobre o grupo syslog ausente, mas comentei essa parte e mesmo assim não obtive um site em execução. Além disso, não há nada relevante nos logs do Docker.

Nós não documentamos muito esse tipo de coisa, mas você geraria um arquivo “diff” e aplicaria o diff com o git em um hook após clonar o repositório. O app.yml suporta hooks.

Uma solução rápida e suja para coisas auto-hospedadas em um único container é apenas editar o código no local e executar sv restart unicorn.

2 curtidas

Não tenho certeza se este é o melhor lugar para fazer essa pergunta, mas não consegui concluir a instalação do Discourse usando Docker em um computador Apple M1.

Depois que executo d/boot_dev --init, todas as dependências são instaladas sem nenhum problema aparente, mas assim que chego à etapa Migrating database, o processo fica parado consumindo 100% de um dos meus núcleos e não parece avançar.

Tentei fazer login no contêiner Docker e a tarefa bundle migrate está rodando a 100%, mas não há atividade aparente no processo do PostgreSQL.

Qualquer ideia seria muito bem-vinda!

1 curtida

Acho que o suporte à virtualização é realmente muito novo, não me surpreende que seja um pouco uma aventura.

@pmusaraj / @david, tiveram alguma sorte em fazer o docker-dev funcionar no M1?

5 curtidas

Ainda não tentei.

2 curtidas

Se alguém conseguir rodar o Discourse usando Docker em um Mac M1, por favor, me avise. Enquanto isso, vou tentar seguir o outro guia! Obrigado!

1 curtida

Tentei brevemente hoje e fiquei preso na mesma etapa que você, mas com um erro:

Invalid gemspec in [/usr/local/lib/ruby/gems/2.7.0/specifications/default/zlib-1.1.0.gemspec]: Malformed version number string specification_version
bundler: failed to load command: rake (/usr/local/bin/rake)

Sim, por favor faça isso. Temos vários membros da equipe usando o Discourse em M1 (eu incluso) todos os dias, então funciona muito bem!

Avise-nos se encontrar algum problema.

2 curtidas

Muito obrigado pelo seu tempo e ajuda! Pelo menos não sou o único que ficou preso nisso.

Oi, acho que deveríamos criar uma descrição sobre o Ember-CLI aqui, e um atalho para o comando abaixo sem precisar entrar no contêiner Docker.

E não consegui fazer funcionar executando os comandos acima dentro do contêiner; parece que o contêiner não expôs a porta 4200.
Screenshot from 2021-05-02 15-48-51

Expor manualmente a porta 4200 editando d/boot_dev:

Após reiniciar o contêiner, ao acessar localhost:4200, obtive isso:

discourse@discourse:/tmp$ cat error.dump.cab4cc444229d44fc0fce2deb8695880.log 
=================================================================================

ENV Summary:

  TIME: Sun May 02 2021 08:01:12 GMT+0000 (Coordinated Universal Time)
  TITLE: ember
  ARGV:
  - /usr/bin/node
  - /src/app/assets/javascripts/node_modules/.bin/ember
  - server
  - --proxy
  - http://localhost:3000
  EXEC_PATH: /usr/bin/node
  TMPDIR: /tmp
  SHELL: /bin/bash
  PATH:
  - /tmp/yarn--1619942449179-0.1910991449592403
  - /src/app/assets/javascripts/discourse/node_modules/.bin
  - /home/discourse/.config/yarn/link/node_modules/.bin
  - /src/app/assets/javascripts/node_modules/.bin
  - /home/discourse/.yarn/bin
  - /usr/libexec/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/lib/node_modules/npm/bin/node-gyp-bin
  - /usr/bin/node_modules/npm/bin/node-gyp-bin
  - /usr/local/sbin
  - /usr/local/bin
  - /usr/sbin
  - /usr/bin
  - /sbin
  - /bin
  PLATFORM: linux x64
  FREEMEM: 8603062272
  TOTALMEM: 41962496000
  UPTIME: 612639
  LOADAVG: 3.32177734375,2.19580078125,1.47900390625
  CPUS:
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3300
  - Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz - 3301
  ENDIANNESS: LE
  VERSIONS:
  - ares: 1.15.0
  - brotli: 1.0.7
  - cldr: 35.1
  - http_parser: 2.9.3
  - icu: 64.2
  - modules: 64
  - napi: 7
  - nghttp2: 1.41.0
  - node: 10.23.0
  - openssl: 1.1.1g
  - tz: 2019c
  - unicode: 12.1
  - uv: 1.34.2
  - v8: 6.8.275.32-node.59
  - zlib: 1.2.11

ERROR Summary:

  - broccoliBuilderErrorStack: [undefined]
  - code: ECONNREFUSED
  - codeFrame: [undefined]
  - errorMessage: connect ECONNREFUSED 127.0.0.1:3000
  - errorType: [undefined]
  - location:
    - column: [undefined]
    - file: [undefined]
    - line: [undefined]
  - message: connect ECONNREFUSED 127.0.0.1:3000
  - name: Error
  - nodeAnnotation: [undefined]
  - nodeName: [undefined]
  - originalErrorMessage: [undefined]
  - stack: Error: connect ECONNREFUSED 127.0.0.1:3000
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)

=================================================================================

Após editar bin/ember-cli e alterar a PORT de 3000 para 9292, tudo funcionou.
Screenshot from 2021-05-02 17-55-24

Parece que o script bash do ember-cli não consegue funcionar com ENV["UNICORN_PORT"].

1 curtida

O Ember CLI é um novo desenvolvimento (e muito disputado); @eviltrout deverá poder comentar sobre isso em breve.

3 curtidas

Sim, isso precisará ser atualizado. Enquanto isso, você pode desativá-lo definindo a variável de ambiente NO_EMBER_CLI como 1.

5 curtidas

Provavelmente é óbvio, mas você poderia esclarecer onde você define a variável de ambiente @eviltrout?

Tentei no arquivo d/unicorn assim:

docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "$CMD" -e NO_EMBER_CLI=1

…mas não funcionou (ainda estou recebendo a mensagem “Ember CLI é Necessário no Modo de Desenvolvimento” em localhost:9292).

d/boot_dev -e NO_EMBER_CLI=1

Tentei isso hoje e também encontrei problemas. O erro que vi ocorreu porque a emulação de arquitetura do Docker não suporta inotify (que usamos bastante no desenvolvimento do Discourse). Por enquanto, adicionei um aviso ao d/boot_dev quando uma arquitetura diferente de x86_64 for detectada:

❯ d/boot_dev 
AVISO: A arquitetura do Docker não é x86_64.
É improvável que o desenvolvimento do Discourse funcione usando a emulação de arquitetura do Docker.
Por favor, tente uma instalação de desenvolvimento nativa.

Agora adicionei um helper d/ember-cli e encaminhei a porta 4200 por padrão. As informações no topo deste tópico também foram atualizadas. Após atualizar, execute d/rails s em um terminal e d/ember-cli em outro. Também configurei NO_EMBER_CLI como uma das variáveis passadas para o Docker, caso seja necessário.

6 curtidas

@david, provavelmente irrelevante, mas só pra avisar: o script boot_dev imprime um falso erro na verificação de x86_64 quando eu acidentalmente executei sem Docker em… (mas a parte ‘O daemon do Docker está rodando?’ está correta)…

AVISO: A arquitetura do Docker não é x86_64.
É improvável que o desenvolvimento do Discourse funcione usando a emulação de arquitetura do Docker.
Tente uma instalação nativa de desenvolvimento.
  ...(omitido)...
Não foi possível conectar ao daemon do Docker em unix:///var/run/docker.sock. O daemon do Docker está rodando?
1 curtida

Obrigado pela imagem e pelas instruções superclaras!

Ao executar d/boot_dev --init, recebi o erro psql: error: FATAL: Peer authentication failed for user "postgres".

Embora o arquivo pg_hba.conf em data/postgres/ tivesse todos os métodos de autenticação configurados como “trust”, havia outro em /etc/postgresql/13/main/ com os padrões (“peer” / “md5”).

Editei /etc/postgresql/13/main/pg_hba.conf, alterei todos os métodos para trust, executei d/shell e depois sv restart postgres para aplicar as alterações – e consegui continuar executando manualmente d/bundle install; d/rake db:migrate RAILS_ENV=development; d/rake admin:create.

Deixo isso aqui caso seja útil para mais alguém!

1 curtida