Sto sviluppando un SaaS business-to-business.
Mi aspetto che la maggior parte dei miei clienti sarà in grado di utilizzare il mio prodotto principale e ho intenzione di distribuirlo in un'istanza indipendente per ciascun cliente. Alcuni clienti a bassa richiesta potrebbero condividere un nodo VPS con altri clienti a bassa richiesta, altri potrebbero avere distribuzioni dedicate, ma l'applicazione sarà progettata in modo tale che si connetta a un database privato per ciascun cliente. Non sarà multi-tenant.
In particolare, prevedo che alcuni clienti avranno bisogno di personalizzazione, magari con l'integrazione con un provider di autenticazione interno o esoterico o con altre personalizzazioni in stile aziendale.
Ho progettato molti sistemi di hosting modulari e plug-in, e penso che sarò in grado di catturare queste personalizzazioni dietro interfacce astratte. Ma distribuirli nel modo in cui mi piacerebbe qui è una nuova sfida.
Qual è il modo migliore per organizzare e distribuire i moduli specifc dei clienti nel progetto PHP single-tenant, basato su compositore?
Il mio attuale pensiero è di mantenere una singola base di codice mainline per tutti i clienti. Ogni cliente raro (?) Che richiede funzionalità aggiuntive dovrebbe avere quella funzionalità acquisita all'interno di un pacchetto di compositore privato e l'integrazione verrebbe a:
- Chiedi al compositore di installare il pacchetto personalizzato durante l'implementazione
- Avere una specifica di configurazione del cliente che indica quali moduli utilizzare dal pacchetto personalizzato durante l'esecuzione.
Il passaggio (2) è risolto, in quanto la configurazione del cliente è una parte necessaria di tutte le installazioni e l'aggiunta di alcuni dettagli che indicano quale implementazione utilizzare per una determinata interfaccia è un'aggiunta banale.
È un passo (1) di cui non sono chiaro. Presumendo che vada nella giusta direzione, c'è un modo stabilito / idiomatico di caricare pacchetti specifici per la distribuzione nel compositore? Dovrei semplicemente eseguire un passaggio post-installazione che modifica il compositore base.json in base alle specifiche di configurazione del cliente, aggiunge i pacchetti specifici del cliente e esegue un aggiornamento?
Se non sto andando nella giusta direzione (ed è per questo che sto chiedendo qui e non su StackOverflow), cosa suggeriresti come un modo migliore per organizzare le cose?