Quali sono tutti gli hook utilizzabili in app.yml

Ciao, sto cercando di configurare un hook per connettermi automaticamente alla mia rete Docker quando Discourse si riavvia o si avvia dopo la compilazione. Questo mi permetterà di utilizzare l’aggiornatore web dell’amministratore quando possibile, ma sto cercando di capire il modo migliore per farlo. La documentazione non dice molto sui tipi di hook che posso usare e la ricerca di hook come after_post_boot e after_restart non porta a nulla. Questi hook non funzionano più e, in caso affermativo, perché? Ecco il mio codice per gli hook.

hooks:

## begin custom network hook

after_restart:
- exec:
cmd:
- bash
- "-c"
- |
# Connetti Discourse alla rete Docker personalizzata se non è già connessa
NETWORK_NAME="proxy"
CONTAINER_NAME=$(hostname)

        # Crea la rete se non esiste
        if ! docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
          echo "Creazione della rete Docker: $NETWORK_NAME"
          docker network create "$NETWORK_NAME"
        fi

        # Connetti il container alla rete (ignora se già connesso)
        echo "Connessione di $CONTAINER_NAME a $NETWORK_NAME..."
        docker network connect "$NETWORK_NAME" "$CONTAINER_NAME" 2>/dev/null || true

        echo "Connessione alla rete completata."

## END custom network hook

Non esiste in realtà un elenco globale fisso di tipi di hook in app.yml.
Gli hook vengono forniti dinamicamente da Pups e puoi collegarti solo a quelli che esistono nei template che includi.


:magnifying_glass_tilted_left: Come funziona

Quando vedi qualcosa come:

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

funziona perché i template contengono un passaggio come:

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

Pups ti consente di allegare comandi prima o dopo uno qualsiasi di questi punti di aggancio definiti.
Quindi, se un template definisce hook: code, puoi usare before_code: o after_code:.
Se definisce hook: assets_precompile, puoi usare before_assets_precompile: o after_assets_precompile: — e così via.

Se non c’è hook: restart (ad esempio), allora after_restart: semplicemente non verrà attivato.


:white_check_mark: Hook noti per esistere nei template standard

Dai templates/*.yml predefiniti forniti con Discourse Docker:

Nome hook Utilizzo comune Funziona con
code Fase di configurazione principale per cloni di plugin, modifiche di file personalizzate, ecc. before_code: / after_code:
assets_precompile Dopo la compilazione degli asset di Rails (ad es. caricamento su S3, pulizia) after_assets_precompile:
web Per modifiche dell’ultimo minuto prima dell’avvio del processo web before_web:

Spesso vedrai after_code: e before_code: utilizzati negli esempi di installazione di plugin — questi sono gli unici necessari nella maggior parte delle configurazioni.


:cross_mark: Hook che non esistono per impostazione predefinita

Nomi come after_restart o after_post_boot non corrispondono ad alcun hook: all’interno dei template standard, quindi Pups non sa dove collegarli.
Non verranno attivati a meno che tu non aggiunga un passaggio corrispondente hook: restart in un template personalizzato.


:toolbox: Come trovare tutti gli hook disponibili sul tuo sistema

Dalla tua cartella /var/discourse, esegui:

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

Questo elencherà ogni nome di hook supportato dai template che includi attualmente.
Qualsiasi cosa trovi lì può essere utilizzata come before_<nome>: o after_<nome>: all’interno del tuo blocco hooks:.


:blue_book: Riferimento

Questo comportamento è spiegato brevemente nel README di Pups (lo strumento di gestione della configurazione utilizzato dall’installazione Docker di Discourse):

“Gli hook sono punti nei template che consentono l’iniezione di comandi prima o dopo un passaggio etichettato con hook:.”


:puzzle_piece: In pratica

  • Usa after_code: per la maggior parte dei comandi shell personalizzati (come le installazioni di plugin).
  • Per le cose che dovrebbero accadere all’avvio o al riavvio del container, usa uno script di avvio o un’attività supervisord invece di inventare nuovi nomi di hook.
  • Per aggiungere il tuo tipo di hook, crea un nuovo template con una voce hook: something personalizzata, quindi puntalo da app.yml.

TL;DR:
Solo i nomi degli hook che compaiono effettivamente come voci hook: nei tuoi template esistono.
Nel Discourse Docker standard, si tratta fondamentalmente di code, assets_precompile e web.

2 Mi Piace

Per riferimento, credo che la repository pups sia qui:

@Ethsim2 Non vedo nulla riguardo a

Forse dovresti esaminare la risposta dell’IA prima di pubblicarla :slightly_smiling_face: .

Dal README:

Esegui comandi prima e dopo un comando specifico definendo un hook.

1 Mi Piace

che ne dici?

Gli hook ti consentono di eseguire comandi personalizzati prima o dopo un passaggio di compilazione specifico, definendo before_<nome>: o after_<nome>: corrispondenti a un’etichetta hook: <nome> in un template.

1 Mi Piace

Non credo che gli hook ti aiuteranno. Stai dicendo che quando esegui il web-updater il tuo container si disconnette dalla rete docker?

Sono abbastanza sicuro che il web-updater non riavvii il container, è così che è in grado di funzionare senza spegnere Discourse.

1 Mi Piace

Corretto.

Va inoltre notato che gli hook vengono eseguiti all’interno del container, per creare l’immagine di discourse. Nulla lì viene eseguito sull’host e non c’è modo attraverso le funzioni del launcher di ricreare o distruggere le reti docker.

Forse sarebbe meglio spiegare quale problema stai riscontrando nel tuo hosting in modo da avere una migliore comprensione di ciò che stai cercando di risolvere.

1 Mi Piace

Aggiornato solo tramite cli e questo si disconnette dalla rete docker ma è solo perché il container si riavvia da quel punto. Proverò l’aggiornamento web poiché non l’ho ancora provato con questa configurazione. Pensavo che lo stesso comportamento si sarebbe verificato anche qui, ma se l’aggiornamento web non arresta i container, allora non c’è davvero nulla di cui preoccuparsi. Il motivo per cui ho detto tutto questo è perché ho visto persone avere problemi quando eseguivano l’aggiornamento web a quel punto. ma proverò l’aggiornamento e vedrò come va.

Jonnyboy! Gli iPhone sono fantastici!