Como coletar todos os ativos estáticos (js, css) usados pelo Discourse

Essa é uma boa pergunta, mas não tenho uma resposta ideal para você.

O sistema de configuração usado dentro do container é:

O README lá descreve como os hooks funcionam de forma geral. Os hooks específicos disponíveis dependem de como sua instância está configurada — o arquivo principal app.yml inclui um ou mais templates. Na maioria dos casos, um deles é o web.template.yml:

É ali que o hook assets_precompile está definido (na [L159] enquanto escrevo). Conforme a documentação do pups, você pode executar outros comandos antes ou depois que ele termine, usando before_assets_precompile e after_assets_precompile, respectivamente.

Os comandos são executados dentro do container Docker, então você não precisa fazer nada para isso.

A diretiva cd: pode apontar diretamente para /var/www/discourse/public/assets/, e cada linha em cmd é executada a partir desse diretório. (Aviso: cada linha de um array cmd é executada em um shell separado, como em um Makefile).

Não tenho certeza se o conteúdo de /var/www/discourse/public/assets/ persiste entre builds, então talvez você precise criar o repositório git local e fazer um force push toda vez. A solução “mais correta” pode ser definir um volume Docker em app.yml para o diretório de assets em um volume Docker definido em app.yml como os outros e persistir fora do container.