Tive algumas ideias aleatórias que me ocorreram, e uma delas foi um plugin para instalar plugins. Isso requer uma reconstrução do fórum. Existe uma maneira de reconstruir usando Ruby? Eu realmente não quero tentar:
Em uma instalação padrão, o Discourse (e, portanto, os plugins) é executado dentro de um contêiner Docker. Esse contêiner não tem acesso completo ao sistema de arquivos do host, portanto, não pode acessar o diretório /var/discourse do host para modificar app.yml ou executar launcher.
E mesmo que pudesse… há uma pequena dependência circular aqui. Executar ./launcher rebuild mataria o contêiner Docker… o que mataria o launcher rebuild que você iniciou a partir do plugin
Existem soluções potenciais aqui. Por exemplo, adicionar montagens de volume Docker adicionais, para que a configuração/launcher possa ser acessada de dentro do contêiner. Mas não é trivial.
Se bem me lembro, alguém já criou um plugin ‘gerenciador de plugins’… que exigia alguns ajustes no app.yml para adicionar coisas como a montagem de volume. Mas não consigo encontrar nenhum tópico sobre isso agora, então presumo que não seja mais mantido. Talvez alguém possa compartilhar um link se conseguir encontrá-lo? (ou talvez tenha sido tudo um sonho )
Do lado da CDCK, definitivamente optamos por usar temas quando queremos que os clientes possam instalar/atualizar/desinstalar à vontade. Permitir que as pessoas instalem plugins arbitrariamente não é uma opção, pois isso afetaria outros clientes que executam no mesmo servidor.
Dashboard.literatecomputing.com instalará e removerá plugins editando o app.yml (ou web_only.yml) e executando a reconstrução (na verdade, bootstrap, destroy, rebuild). Em uma instalação de dois contêineres, o tempo de inatividade é mínimo.
Ele também faz coisas como atualizar o docker e o postgres, docker prune, e assim por diante. Como tudo gerencia uma instalação padrão, você não está preso a ele e ele não pode quebrar nada, a menos que esteja realmente fazendo algo (como instalar um plugin ruim).
É um plugin do Discourse (privado) que aciona um playbook do Ansible. Você pode entrar no grupo de teste gratuito e usá-lo gratuitamente (com suporte limitado).
Mas os problemas de manter os plugins no contêiner e no app.yml para quando você reconstruir em seguida existem.
Fui queimado várias vezes fazendo ./launcher destroy app;./launcher start app para aplicar novas variáveis de ambiente de app.yml apenas para descobrir que o contêiner “novo” está atrás da versão que o banco de dados tem. É ainda pior se alguém atualizou apenas alguns plugins no contêiner que funcionaram com a versão do Discourse que estava no contêiner antigo, mas não com a que você obtém ao reconstruir. . .
É por isso que o plugin ProCouese apenas clonou os repositórios e só pode ser removido através da página do plugin para rm -rf a pasta do plugin clonado.
Na verdade, funcionou razoavelmente bem como uma prova de conceito. Poderia usar alguns ajustes, pois foi dito que poderia dificultar a solução de problemas. Então, talvez precise de algumas informações de linha de comando sobre como acessar o instalador do procouree. Talvez um arquivo de log melhor.
A vantagem é que você pode desabilitar todos os plugins simplesmente removendo/comentando o instalador do pro course. Embora esteja quebrado agora.
Joe tem algumas ideias muito avançadas. Se bem me lembro, ele fez o plugin inicial de Post Voting?