如何在单个液滴上将不同的 MERN 应用程序部署到数字海洋?

Posted

技术标签:

【中文标题】如何在单个液滴上将不同的 MERN 应用程序部署到数字海洋?【英文标题】:How to deploy different MERN apps to digital ocean on a single droplet? 【发布时间】:2020-06-30 14:30:33 【问题描述】:

我一直使用 heroku 来部署我的 MERN 应用程序。对于 mongo db,我使用 MongoDB Atlas,但在我的工作中,他们希望将所有项目迁移到 DigitalOcean。我对此有几个问题:

    我可以在一个单一的上拥有 mongoDB + nodejs 后端 + react 应用程序吗 水滴? 能否在一个 Droplet 中部署两个或更多应用程序? (这 应用具有不同的域) 有这方面的视频教程吗 (我已经阅读了很多文档并且在尝试时遇到了很多错误 去做吧。我的眼睛受伤了??????) 例如,如果我在 Heroku 中有两个应用程序用于同一个网站,一个应用程序用于 nodejs 后端,另一个应用程序用于 react 前端...我可以在 DigitalOcean 上做同样的事情吗?

提前致谢!

【问题讨论】:

【参考方案1】:

是的,您可以在单个服务器中部署多个服务,它们只需要监听不同的端口即可。

例如,假设 MongoDB 服务器在端口 27017 上运行,Node.js http 服务器在端口 5000 上运行,React 应用在端口 8000 上运行。

比方说,你的服务器IP是13.13.13.13

然后,您可以分别使用 13.13.13.13:2701713.13.13.13:500013.13.13.13:8000 从 Internet 上您的 IP 未被阻止的任何地方访问您的 MongoDB 服务器、Node.js http 服务器和 React 应用程序。

现在,在您的服务器中,您设置 iptables 将所有传入连接从端口 8000 转发到 80。现在,您可以通过访问 13.13.13.13 访问您的 React 应用程序,不再需要使用该端口。

现在,假设您为 example.comapi.example.com 添加 DNS 记录以指向您的 IP。而且由于您不能让 A 记录或 CNAME 记录指向端口,因此您的两个域都会将您定向到您的 React 应用程序。如果要访问 Node.js 后端,则必须明确指定端口号以及域,例如 http://example.com:5000http://api.example.com:5000

如果您不想使用端口号访问后端,可以使用 nginx 作为反向代理。您可以设置 Nginx 将所有到 api.example.com 的流量路由到监听 localhost:5000 的后端服务器。

【讨论】:

我很欣赏这个答案,但这令人困惑。 (假设我的 ip 是 13.13.13.13)我究竟把 13.13.13.13:5000 和 13.13.13.13:27017 放在哪里?我不明白“默认”文件中发生了什么以及它应该是什么样子。 @renoldus,你有 MERN/MEAN 应用吗,因为看起来你对 M 和 N 不熟悉。

以上是关于如何在单个液滴上将不同的 MERN 应用程序部署到数字海洋?的主要内容,如果未能解决你的问题,请参考以下文章

如何在端口 80 上将战争文件部署到 Glassfish?

实践:基于Azure部署Jenkins服务并开发MERN应用的CI/CD构建管道

Rails 4部署后无法连接到mysql

在 Amazon Linux 2 上将 node.js 应用程序部署到 Elastic Beanstalk 时出错

尝试将带有顺风的 MERN 堆栈部署到 Heroku 时构建失败

MERN 应用程序在部署到 Heroku 时无法运行“heroku-postbuild”脚本