如果它们是分开的,如何部署后端和前端项目?

时间:2016-02-17 00:54:37

标签: node.js rest frontend backend hapijs

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

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

我们是一个相当新的团队,开始我们在网络开发方面的冒险经历,所以我们正在研究很多事情来做正确的事。

我们的技术堆栈将是:

  • Hapijs for the webserver
  • orm的续集
  • socket.io用于聊天功能
  • mocha进行单元测试
  • 前端的angularjs

我们将使用microsoft azure来托管我们的网络应用程序。

感谢您的回答和帮助。

2 个答案:

答案 0 :(得分:6)

他们不必在同一台服务器上。将后端放在不同的服务器上是完全没问题的,如果你需要扩展你的后端/前端而不是另一个,那么它也很方便。

有几种可能性:

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

  • 您的前端应用可能会暴露您后端的网址,并且您在AJAX请求中使用该网址,这需要您的后端启用CORS。不是这种方法的粉丝。

  • 在前端使用相对网址,然后将具有特定模式(如/ 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。 Haven没有在hapi.js中完成它,但它也应该是可能的。

我确定有更多选择,那些是我熟悉的选项。

答案 1 :(得分:0)

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

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

这很容易实现,但它有一个缺点:每当您推出更新时,您需要接受客户端和服务器应用程序的停机时间。

您可以在此信息中找到更多信息:https://futurestud.io/blog/hapi-how-to-run-separate-frontend-and-backend-servers-within-one-project

关于部署,无论你用什么构建版本(持续集成工具,手动脚本等)都可以将git推送到azure:https://azure.microsoft.com/en-us/documentation/articles/web-sites-publish-source-control。例如,手动脚本将从两个单独的存储库(前端和后端)获取代码,复制相关文件,更新配置值并将最终结果推送到git。