如果将后端和前端项目分开,如何部署?

我正在开发一个小团队的Web应用程序,经过研究和研究,我们发现分离后端和前端项目是一个很好的做法。 所以我们将开发后端作为REST API与hapijs和mysql数据库,前端使用angularjs。

但在生产环境中,他们必须在同一台服务器上,对不对? 我们如何将它们部署到相同的服务器,如果他们在不同的存储库?

我们是一个相当新的团队,开始我们在networking开发的冒险,所以我们正在学习很多东西,以使事情正确。

我们的技术堆栈将是:

  • Web服务器的Hapijs
  • 续集为orm
  • 聊天function的socket.io
  • 摩卡unit testing
  • 前端的angularjs

我们将使用Microsoft Azure来托pipe我们的Web应用程序。

感谢您的答案和帮助。

他们不必在同一台服务器上。 将后端放在不同的服务器上是非常好的,如果您需要缩放后端/前端而不是其他服务器,则也非常方便。

有几种可能性:

  • 您可以使用像RabbitMQ这样的消息代理在两个微服务之间进行通信

  • 您的前端应用程序可能会公开您的后端的URL,并在您的AJAX请求中使用,这需要您的后端启用CORS 。 不是这种方法的粉丝。

  • 在前端使用相对URL,然后用特定的模式(如/ api / *)将请求传送到后端。 您的AngularJs应用程序是由Node.js服务器提供服务,还是Hapi.js服务器? 如果Node.js的东西

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); }); 

PROXY_URL是你的后端服务器的url / ip。 没有在hapi.js中完成,但它也应该是可能的。

我相信有更多的select,那些是我熟悉的。

正如你们现在开始,我认为你可以通过使用hapi创build两个服务器实例来处理这个问题。 这解决了您的要求只有一个服务器在生产:

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

这很容易实现,但是它带来了一个缺点:无论何时展开更新,您都需要接受来自客户端和服务器应用程序的停机时间。

您可以在这篇文章中find更多信息: https : //futurestud.io/blog/hapi-how-to-run-separate-frontend-and-backend-servers-within-one-project

关于部署,无论您用于构build版本(持续集成工具,手动脚本等),都可以将git推送到Azure: https : //azure.microsoft.com/en-us/documentation/articles/web-网站发布源代码pipe理 。 例如,手动脚本会从两个独立的存储库(前端和后端)获取代码,复制相关文件,更新configuration值并将最终结果推送到git。