Come installare plugin senza utilizzare un host di terze parti?

(A proposito, @Heliosurge, penso che questo sia stato sollevato prima):

È evidente che l’argomento si è ormai completamente sviato, come succede sempre in ogni discussione che va controcorrente. Non ho nemmeno intenzione di discutere della questione dell’uso di un componente tema, ma grazie lo stesso a tutti.

Come ha deviato dal percorso? Hai fatto una domanda e le persone hanno espresso le loro opinioni. A me sembra completamente in tema.

Hai ora tutte le informazioni necessarie per implementare l’allestimento che desideri?

Condivido parzialmente l’opinione dell’OP: le “opinioni” hanno iniziato a trasformarsi in “deridere l’OP per ciò che vuole”.

Non credo che ci sia bisogno di discuterne ulteriormente. Quindi, a meno che qualcuno non abbia un’altra soluzione da proporre in questa discussione, possiamo considerarla chiusa, a mio avviso.

Concordo sul fatto che alcuni post abbiano un’aggressività non necessaria.

Ho menzionato un TC in relazione all’aggiunta di un pulsante alla home page. Questo è già stato dimostrato da diversi componenti. Se non si tratta di un problema di sicurezza, il TC è la soluzione migliore.

Tuttavia, sarei interessato a sapere quali problemi hai con i Temi e i componenti dei Temi? I plugin sono più indicati per la sicurezza e per funzionalità che non possono essere realizzate in un TC, come la modifica del comportamento delle funzioni core. Se preferisci, possiamo discuterne in una conversazione privata e amichevole.

Un altro vantaggio del TC è che puoi modificare il tuo codice direttamente nell’interfaccia web del sito quando necessario.

Il problema che vedo con l’approccio basato sui plugin è che anche i plugin ufficiali, una volta integrati nel core, continuano a utilizzare Git per aggiornare i plugin e Discourse stesso.

Puoi utilizzare il supporto dei volumi in app.yml per montare una cartella sull’host nella cartella dei plugin del contenitore.

Puoi usare il metodo che preferisci per copiare il tuo codice sorgente da dove lo tieni nella directory discourse/plugins. Se non ti piace git clone, puoi usare rsync o cp -a. Basta copiare il tuo plugin sulla tua VM come preferisci e inserire un comando per copiarlo nel modo in cui farebbe git clone.

Questa è sicuramente la risposta corretta. Rispetta i parametri originali della domanda. Questo thread non è stato molto positivo dal punto di vista di mostrare una comunità di supporto.

@Falco @pfaffman Grazie, le vostre risposte hanno chiarito i miei dubbi.

Lascio qui la mia configurazione app.yml nel caso possa essere utile a chiunque cerchi di caricare plugin locali in Discourse dalla macchina host.

## Il container Docker è stateless; tutti i dati sono memorizzati in /shared
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log
  - volume:
      host: /var/discourse/plugins
      guest: /var/plugins

## I plugin vanno qui
## vedi https://meta.discourse.org/t/19157 per i dettagli
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - cp -a /var/plugins/. $home/plugins/

Nella mia configurazione, mantengo tutti i plugin personalizzati in /var/discourse/plugins sull’host.

La directory montata diventa disponibile all’interno del container come /var/plugins e, durante l’hook after_code, il comando:

cp -a /var/plugins/. $home/plugins/

copia tutti i plugin montati nella directory dei plugin nativi di Discourse ($home/plugins, tipicamente /var/www/discourse/plugins).

Questo rende possibile gestire i plugin direttamente dall’host senza utilizzare l’installazione dei plugin basata su git o affidarsi a servizi di hosting di terze parti.

Fantastico. Sono contento che abbia funzionato per te!

Potresti anche creare un symlink verso i plugin invece di copiarli. E se lo facessi, le modifiche apportate potrebbero essere applicate (almeno in alcuni casi in cui non è necessario migrare o compilare le risorse) riavviando il container.

Ciao, mi chiedevo solo come gestite le migrazioni e le modifiche al database?

Queste sono indipendenti dal modo in cui viene installato un plugin. Se il plugin è presente, le migrazioni verranno gestite.

Ricreo il container, salvo circostanze insolite. Tuttavia, puoi eseguire

 rake db:migrate

E anche precompilare le risorse. Non lo consiglio a meno che tu non abbia una necessità specifica e non sia familiare con Rails.