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

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

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

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

我们的技术堆栈将是:

  • Web服务器的Hapijs
  • 续集为orm
  • 用于聊天功能的socket.io
  • 摩卡进行单元测试
  • 前端的angularjs
  • 我们将使用Microsoft Azure来托管我们的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中完成,但它也应该是可能的。

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


    正如你们现在开始的,我认为你可以通过用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-网站,发布源控制。 例如,手动脚本会从两个独立的存储库(前端和后端)获取代码,复制相关文件,更新配置值并将最终结果推送到git。

    链接地址: http://www.djcxy.com/p/78191.html

    上一篇: How to deploy backend and frontend projects if they are separate?

    下一篇: Frontend and backend framework collaboration