2016-02-17 19 views
6

Sto sviluppando un'applicazione web con un piccolo team, e dopo aver studiato e studiato un po 'abbiamo scoperto che è una buona pratica separare i progetti back-end e front-end. Quindi svilupperemo il back-end come API REST con database hapijs e mysql e il front-end utilizzando angularjs.Come distribuire i progetti di backend e frontend se sono separati?

Ma nell'ambiente di produzione devono essere nello stesso server, giusto? Come li distribuiamo sullo stesso server se si trovano in repository separati?

Siamo una squadra abbastanza nuova, che inizia le nostre avventure nello sviluppo web, quindi stiamo studiando molto per sistemare le cose.

nostro stack tecnologico sarà:

  • Hapijs per il webserver
  • sequelize per orm
  • socket.io per le funzioni di chat
  • Mocha per unit testing
  • angularjs per frontend

Useremo microsoft azure per h osting la nostra app web.

Grazie per le risposte e l'aiuto.

risposta

6

Non devono essere nello stesso server. È perfetto avere il backend in un server diverso, è anche utile se hai bisogno di ridimensionare il tuo backend/frontend ma non l'altro.

Ci sono alcune possibilità:

  • si potrebbe usare un broker di messaggio come RabbitMQ per la comunicazione tra i due micro-servizi

  • tuo frontend app potrebbe esporre l'url del vostro backend e si utilizzalo nelle tue richieste AJAX, questo richiede che il tuo back-end abiliti CORS. Non un fan di questo approccio.

  • Utilizzare gli URL relativi nel frontend e quindi inviare le richieste con un motivo particolare (come/api/*) al back-end. La tua app AngularJs è servita da un server Node.js o è anche un server Hapi.js? Se Node.js qualcosa come

:

app.all(['/api/*', '/fe/*'], function(req, res) { 
    console.log('[' + req.method + ']: ' + PROXY + req.url); 
    req.pipe(request({ 
     url: PROXY + req.url, 
     method: req.method, 
     body: req.body, 
     rejectUnauthorized: false, 
     withCredentials: true 
    })) 
    .on('error', function(e) { 
     res.status(500).send(e); 
    }) 
    .pipe(res); 
}); 

Dove PROXY_URL è l'URL/IP del server di backend. Non l'ho fatto in hapi.js ma dovrebbe anche essere possibile.

Sono sicuro che ci sono più opzioni, quelle sono quelle con cui ho familiarità.

+1

Ciao @nbermudezs, grazie per la tua risposta veloce. Il problema di tenerli su server separati è il costo, dovremo pagare per due server, il che non è fattibile per noi. –

+0

Se si desidera mantenerli come istanze separate ma utilizzare solo un server, è possibile utilizzare qualcosa come [docker] (https://www.docker.com/), ovviamente implica ancora più apprendimento per la propria avventura. – nbermudezs

+0

Se la finestra mobile non fa per te, dovrai giocare con gli script di bash per creare cd nel progetto frontend, eseguire i comandi necessari per eseguire i file dist (file minified/ugired pronti per la produzione), quindi copiarli sul progetto principale, probabilmente in una cartella pubblica e infine avviare il processo di distribuzione. – nbermudezs

0

Come voi ragazzi state iniziando ora penso che sia possibile gestirlo creando due istanze server con hapi.Questo risolve il vostro requisito di avere un solo server in produzione:

const server = new Hapi.Server(); 
server.connection({ port: 80, labels: 'front-end' }); 
server.connection({ port: 8080, labels: 'api' }); 

Questo è veramente facile da implementare, tuttavia, si tratta di un aspetto negativo: è necessario accettare definisce la forma tempo, sia l'applicazione client e il server ogni volta che si rollout aggiornamenti.

Potete trovare maggiori informazioni in questo post: https://futurestud.io/blog/hapi-how-to-run-separate-frontend-and-backend-servers-within-one-project

Per quanto riguarda la distribuzione, qualunque cosa si usa per costruire un rilascio (strumenti di integrazione continua, script manuali, ecc) può essere spinto a git azzurro: https://azure.microsoft.com/en-us/documentation/articles/web-sites-publish-source-control. Ad esempio, uno script manuale recupera il codice dai due repository separati (front-end e back-end), copia i file rilevanti, aggiorna i valori di configurazione e spinge il risultato finale a git.

Problemi correlati