Quais são todos os hooks que posso usar em app.yml

Olá, estou tentando configurar um hook para conectar automaticamente à minha rede Docker quando o Discourse reiniciar ou iniciar após a compilação. Isso é para que eu possa usar o atualizador web de administrador quando puder, mas estou tentando descobrir a melhor maneira de fazer isso. A documentação não diz muito sobre os tipos de hook que posso usar e procurar por hooks como after_post_boot e after_restart não produz resultados. Esses hooks não funcionam mais e, se sim, por quê? Aqui está o meu código de hooks.

hooks:

## begin custom network hook

after_restart:
- exec:
cmd:
- bash
- “-c”
- |\
# Connect Discourse to the custom Docker network if not already connected
NETWORK_NAME=“proxy”
CONTAINER_NAME=$(hostname)

        # Create the network if it doesn't exist
        if ! docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
          echo "Creating Docker network: $NETWORK_NAME"
          docker network create "$NETWORK_NAME"
        fi

        # Connect container to the network (ignore if already connected)
        echo "Connecting $CONTAINER_NAME to $NETWORK_NAME..."
        docker network connect "$NETWORK_NAME" "$CONTAINER_NAME" 2>/dev/null || true

        echo "Network connection complete."
## END custom network hook

Não existe, na verdade, uma lista global fixa de tipos de hook em app.yml.
Os hooks são fornecidos dinamicamente pelo Pups, e você só pode se conectar aos que existem dentro dos templates que você inclui.


:magnifying_glass_tilted_left: Como funciona

Quando você vê algo como:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git

isso funciona porque os templates contêm uma etapa como:

- hook: code
  run:
    - exec: ...

O Pups permite que você anexe comandos antes ou depois de quaisquer pontos de hook definidos.
Portanto, se um template define hook: code, você pode usar before_code: ou after_code:.
Se ele define hook: assets_precompile, você pode usar before_assets_precompile: ou after_assets_precompile: — e assim por diante.

Se não houver hook: restart (por exemplo), então after_restart: simplesmente não será acionado.


:white_check_mark: Hooks conhecidos por existir nos templates padrão

Dos templates/*.yml padrão enviados com o Discourse Docker:

Nome do Hook Uso Comum Funciona com
code Estágio principal de configuração para clonagem de plugins, edições de arquivos personalizados, etc. before_code: / after_code:
assets_precompile Após a compilação dos assets do Rails (por exemplo, upload para S3, limpeza) after_assets_precompile:
web Para ajustes de última hora antes da inicialização do processo web before_web:

Você frequentemente verá after_code: e before_code: usados em exemplos de instalação de plugins — estes são os únicos necessários na maioria das configurações.


:cross_mark: Hooks que não existem por padrão

Nomes como after_restart ou after_post_boot não correspondem a nenhum hook: dentro dos templates padrão, então o Pups não sabe onde anexá-los.
Eles não serão acionados, a menos que você adicione uma etapa correspondente hook: restart em um template personalizado.


:toolbox: Como encontrar todos os hooks disponíveis no seu sistema

A partir da sua pasta /var/discourse, execute:

grep -R "hook:" -n templates/ samples/

Isso listará cada nome de hook suportado pelos templates que você inclui atualmente.
Qualquer coisa que você encontrar lá pode ser usada como before_<nome>: ou after_<nome>: dentro do seu bloco hooks:.


:blue_book: Referência

Esse comportamento é explicado brevemente no README do Pups (a ferramenta de gerenciamento de configuração usada pela configuração Docker do Discourse):

“Hooks são pontos em templates que permitem que comandos sejam injetados antes ou depois de uma etapa rotulada com hook:.”


:puzzle_piece: Na prática

  • Use after_code: para a maioria dos comandos de shell personalizados (como instalações de plugins).
  • Para coisas que devem acontecer na inicialização ou reinicialização do contêiner, use um pequeno script de inicialização ou tarefa supervisord em vez de inventar novos nomes de hook.
  • Para adicionar seu próprio tipo de hook, crie um novo template com uma entrada hook: algo personalizada e, em seguida, direcione-o de app.yml.

TL;DR:
Apenas os nomes de hooks que realmente aparecem como entradas hook: em seus templates existem.
No Discourse Docker padrão, basicamente são code, assets_precompile e web.

2 curtidas

Para referência, acredito que o repositório pups esteja aqui:

@Ethsim2 Não vejo nada sobre

Talvez você devesse dar uma olhada na resposta da IA antes de postá-la :slightly_smiling_face: .

Do README:

Execute comandos antes e depois de um comando específico, definindo um hook.

1 curtida

que tal?

Hooks permitem que você execute comandos personalizados antes ou depois de uma etapa de build específica, definindo before_<nome>: ou after_<nome>: correspondendo a um rótulo hook: <nome> em um template.

1 curtida

Não acho que os hooks vão te ajudar. Você está dizendo que quando executa o atualizador web, seu contêiner se desconecta da rede docker?

Tenho quase certeza de que o atualizador web não reinicia o contêiner – é assim que ele consegue rodar sem desligar o Discourse.

1 curtida

Isso está correto.

Também deve ser observado que os hooks são executados dentro do contêiner, para construir a imagem do Discourse. Nada lá é executado no host, e não há como, através das funções do launcher, recriar ou destruir redes Docker.

Talvez fosse melhor explicar qual problema você está enfrentando em sua hospedagem para que possamos entender melhor o que você está tentando resolver.

1 curtida

Somente atualizado via cli e isso desconecta da rede docker, mas isso é apenas porque o contêiner reinicia a partir desse ponto. Tentarei o atualizador da web, pois ainda não tentei isso com esta configuração. Pensei que o mesmo comportamento realmente aconteceria aqui também, mas se o atualizador da web não desligar os contêineres, então não há realmente nada com que se preocupar. O motivo pelo qual afirmei tudo isso foi porque vi pessoas tendo problemas ao executar o atualizador da web naquele ponto. mas tentarei o atualizador e verei como vai.

Jonnyboy! iPhones são demais!