Come posso mantenere un'applicazione web facile da self host mentre ancora la suddivido in più componenti più piccoli

0

Sto lavorando a un'applicazione web open source che ospiterò sul mio server e stima che la maggior parte degli utenti lo userà, ma voglio anche consentire agli utenti di eseguire facilmente l'applicazione. Il problema sembra essere che più cerco di rendere il mio sistema performante e scalabile più difficilmente riesco a farlo ospitare per qualcun altro.

La versione di self-hosting più semplice sarebbe quella di usare solo i binari che creano il proprio database SQLite e che funzionerebbero bene per gli utenti self-hosting ma per la mia istanza principale l'ho configurato con rails, nginx, postgres, sidekiq e redis . Quello non è banale da configurare e sarebbe più lavoro del necessario per gli utenti self-hosting.

Il mio tentativo di risolvere questo problema è stato quello di rendere tutto ancor più mobile e di utilizzare docker-compose per avviarlo, ma mi sono imbattuto in problemi relativi a come gestire i file di configurazione. Ognuno di questi servizi richiede le proprie configurazioni che attualmente ho memorizzato sul server host e ottengono il volume montato nel punto giusto. Questo mi ha lasciato con circa 5 diversi file di configurazione che sono diventati molto complicati quando per la maggior parte delle persone tutto ciò che vogliono configurare sono il nome del dominio e le chiavi API.

Ho difficoltà a pensare a un modo per renderlo semplice. L'unica idea che ho attualmente è venire con il mio formato di file di configurazione che richiede solo le opzioni necessarie e scrivere uno script per creare automaticamente tutte le altre configurazioni con valori predefiniti che la maggior parte delle persone vorrebbe.

    
posta Qwertie 16.09.2018 - 08:46
fonte

1 risposta

1

Un approccio potrebbe essere quello di considerare che cosa esattamente "configurazione" dovrebbe significare nel tuo sistema.

es. L'app 12-Factor definisce la configurazione come "tutto ciò che è probabile che varii tra gli schieramenti". Per te, potrebbero essere le stringhe di connessione del database e "il nome del dominio e le chiavi API".

Questa definizione di configurazione esclude altre configurazioni dell'applicazione, ad esempio nomi di file all'interno dello stesso contenitore o opzioni di sintonizzazione di un DB. Questi tipi di opzioni fanno effettivamente parte della definizione di quel contenitore e non dovrebbero essere forniti esternamente in fase di runtime.

Per quanto riguarda Docker, il modo più semplice per risolvere questo problema è probabilmente quello di copiare i file di configurazione con alcuni segnaposto nell'immagine. Il punto di accesso del contenitore sarebbe quindi uno script che riempie quei segnaposto con alcune variabili di ambiente e exec s il processo effettivo.

    
risposta data 16.09.2018 - 12:06
fonte

Leggi altre domande sui tag