2013-08-09 17 views
7

Ho progettato un'applicazione meteor.js e funziona perfettamente su localhost e anche quando viene distribuito su Internet. Ora voglio creare un sito di registrazione che crei nuove istanze dell'applicazione per ogni cliente che si registra sul back-end. Supponendo un'applicazione meteor.js e python o javascript per il sito di registrazione, quali passi di alto livello devono essere adottati per implementare questo?Quali sono i passaggi principali necessari per creare più istanze di un'applicazione meteor.js in esecuzione su un singolo server?

Sto cercando una risposta più corretta e completa che prende la forma di mia versione mal immaginato di questo:

  1. Usa qualcosa come nodo o pitone per chiamare uno script di shell che può o non può funzionare come sudo
  2. Questo script potrebbe creare una nuova cartella per contenere elementi specifici dell'istanza (come i file client, la configurazione e/o il database delle istanze).
  3. Lo script o il codice python sarebbe distribuire un'istanza dell'applicazione per quella cartella e su una porta specifica
  4. Python potrebbe aggiungere le informazioni di configurazione ad uno strumento come Pound per inoltrare un sottodominio a una porta
  5. Altre cose .. ..!?

Io non capisco i passaggi di alto livello che devono essere prese qui quindi se qualcuno potrebbe fornire quei passi e forse anche alcuni strumenti utili o tutorial per farlo sarei estremamente grato.

+0

Sei contrario all'uso dell'hosting di meteora per la soluzione? Hai uno script con cui avvii l'applicazione adesso? – user728291

+0

Sono piuttosto contraria per due motivi principali ... ma potrebbero non essere validi: 1. Nel breve termine intendo aggiungere la possibilità per il contenuto caricato dall'utente. Non credo sia possibile controllare lo spazio di archiviazione o implementarlo con la soluzione Meteors per tutto tranne i file che possono essere contenuti nel DB. 2. Creare una soluzione di backup attorno all'hosting dei meteoriti è difficile. L'accesso ai database per ciascuna applicazione richiede la risposta a una richiesta di password per ottenere una password di mongo a breve termine, il che rende l'automazione una sfida. Anche se 1) è possibile, il backup di questi file non è AFAIK. – funkyeah

+0

... e utilizzo la distribuzione di Meteor ora, ma l'effettivo slancio dietro la domanda deriva dai motivi sopra riportati che hanno portato a non essere più un approccio praticabile – funkyeah

risposta

3

mi permetta un'osservazione prima che penso filatura fino più istanze della stessa applicazione è una scelta cattiva progettazione. Se si tratta di una misura divario fermata, ecco cosa vorrei suggerire:

  1. creare un archivio che può essere facilmente implementato. (Raggruppa l'app, reinstalla le fibre se necessario, rezip). Distribuire (decomprimere) l'archivio in una nuova cartella quando viene creata una nuova istanza utilizzando uno script.

  2. Creare un modello di uno script di init e utilizzare forever o daemonize o jesus, ecc per avviare il sito al riavvio e mantenere i siti attivi durante il normale funzionamento. Vedere Meteor deploying to a VM by installing meteor o How does one start a node.js server as a daemon process? per esempi. quando viene distribuita una nuova istanza, popolare il modello con nuovi valori (ad esempio numero di porta, nome del database, cartella). Copia il modello compilato su init.d e collegalo al runlevel. In alternativa, crea uno script in init.d che esegue altri script per far apparire il sito.

  3. Ogni istanza dovrebbe essere in ascolto della propria porta, quindi è necessario un proxy inverso. AFAIK, Apache e Nginx richiedono riavvii quando cambi la configurazione, quindi probabilmente vorrai dare un'occhiata a Hipache https://github.com/dotcloud/hipache. Hipache utilizza i redis per memorizzare le informazioni di configurazione. L'aggiunta della nuova istanza richiede l'aggiunta di una chiave per i redis.C'è una porta sperimentale di Hipache che porta la funzionalità di Nginx https://github.com/samalba/hipache-nginx

cosa circa gli aggiornamenti DNS? Una volta creata una nuova istanza, è necessario aggiungere un nuovo record alla configurazione DNS?

+3

quindi pensi che la riprogettazione o l'aggiunta dell'architettura necessaria per essere un'app multi-tenant sia la soluzione migliore? Per me sembra proprio che tutto punti a un'architettura multi-istanza sia meglio per questo tipo di cose ...Ho più client che non hanno bisogno di parlarsi, che richiedono almeno una separazione logica dei dati, e sembra molto più difficile partizionare la registrazione, il routing e la separazione dei dati dell'applicazione all'interno dell'app rispetto all'esterno dell'app; mentre l'automazione dell'istanza e dell'aggiornamento di ogni istanza non sembra così difficile – funkyeah

+0

[nginx non richiede il riavvio per ricaricare la configurazione] (http://serverfault.com/questions/378581/nginx-config-reload-without-downtime) . –

2

Non ho una risposta alla tua domanda ... ma voglio solo ricordarti di un altro potenziale problema che potresti incontrare perchè vedo che hai citato Python, in altre parole, potresti averne un'altra app web su Apache/Nginx, ecc ... il problema è che Meteor non è molto amichevole quando si tratta di coesistere con un altro server http, il progetto su cui sto lavorando è stato turbato da questo problema e abbiamo dovuto spostarlo in un server stand alone dopo giorni di problemi con i ragazzi di Meteor ... Non ho lavorato sul problema, quindi non sono in grado di fornirti maggiori dettagli, ma ho appena cercato online e ho trovato qualcosa di simile: https://serverfault.com/questions/424693/serving-meteor-on-main-domain-and-apache-on-subdomain-independently.

Solo una cosa da tenere a mente ...

+0

Python era un pensiero, ma sicuramente non un requisito. Buone informazioni, grazie! – funkyeah

6

Ho una situazione simile a voi ma ho finito per risolverlo in un modo completamente diverso. E 'ora disponibile come pacchetto intelligente Meteor:

https://github.com/mizzao/meteor-partitioner

Il problema che condividiamo è che abbiamo voluto scrivere un app di meteoriti, come se un solo client (o gruppo di clienti, nel mio caso esiste, ma che ha bisogno di gestire più gruppi di client senza che si conoscano l'un l'altro. Sto facendo il seguente:

  • assuma l'applicazione Meteor è programmato solo per una singola istanza
  • Usando un pacchetto intelligente, agganciare le collezioni sul server (e possibilmente client) in modo che tutte le operazioni siano 'scope' solo all'istanza dell'utente che li sta chiamando. Un modo per farlo è collegare automaticamente un campo "istanza" o "gruppo" a ciascun documento che viene aggiunto.

Fare questo correttamente richiede molte conoscenze sugli interni di Meteor, che ho imparato. Tuttavia, questo approccio è molto più pulito e meno dispendioso in termini di risorse rispetto al tentativo di implementare più app meteoriche contemporaneamente. Significa che puoi ancora codificare l'app come se esistesse un solo client, invece di farlo esplicitamente per più client. Inoltre, permette di condividere le risorse tra le istanze che possono essere condivise (ad esempio le attività statiche, stato condiviso, ecc)

Per maggiori dettagli e discussioni, vedi:

+0

Dal momento che Aaron è il responsabile delle reazioni menzionato in tali discussioni, sarebbe consigliabile creare mongodb separati per ciascun inquilino? Come faresti ad automatizzare una cosa del genere? –

+0

@DheerajBhaskar a quel punto probabilmente vorrai semplicemente usare il nuovo prodotto di hosting Galaxy di Meteor. –

Problemi correlati