使用 NGINX 作为反向代理,将 NodeJS、Express 和 MongoDB 应用容器化
🙂 对于初学者或正在学习后端开发的开发者来说,最常见的起点是构建 API 并将其与数据库连接起来。
例如,如果我们谈到MERN技术栈,我们可以分别使用NodeJS和MongoDB作为后端框架和数据库来构建很棒的Web应用程序。我们甚至可以构建像电子商务网站这样复杂的网站。
🎯 但说到可扩展性,我们常常忽略这一点,直接就部署。今天我们就来谈谈这个。
- 如何将使用 MongoDB 作为数据库的 NodeJS 应用容器化(如果您不了解,请参考Docker 教程)
- 如何使用 NGINX 作为负载均衡器或反向代理来均衡负载(请先阅读NGINX 教程)
- 如何使用 Docker Compose(请参考如何将简单的 NodeJS 应用容器化的简单教程)
- 总之,我们将看到:如何在 Docker 容器内运行使用数据库连接的 NodeJS 应用程序,以及如何添加 NGINX 以实现未来(如果需要)的负载均衡。
🔥 利用这些工具,您可以构建一个能够处理多个并发用户的应用程序。您还可以使用 JMeter(性能测试)来测试您的应用程序。
😌 现在,让我们开始吧:
🫵 这就是我们的应用程序设置界面:
作为最终用户,您在发出任何请求时都会看到 NGINX 的 IP 地址。但在我们的案例中,NGINX 容器和 NodeJS 容器将运行在同一个 IP 地址上。
Docker Compose:它是一个用于在 Docker 上运行多容器应用程序的工具,应用程序使用 Compose 文件格式进行定义。Compose 文件用于定义构成应用程序的一个或多个容器的配置方式。
🧘 我们将按以下方式进行操作:
🙂在这里,您可以找到我们的 NodeJS 应用程序(使用 MongoDB 作为数据库)和 Nginx 作为反向代理的代码。
您可以克隆上述仓库,并查看实现过程。
👉 我们的目录结构如下所示:
nginx
|
|
-> default.conf(用于设置 NGINX 的配置文件)
-> dockerfile(用于创建 Docker 镜像和容器的 Docker 文件)
nodedocker_app
|
|
-> models(数据库中要存储的项目的模式)
-> views(包含服务器启动时要提供的 HTML 文件)
-> dockerfile(用于创建 Docker 镜像的 Docker 文件)
-> index.js(代码入口点)
-> package-lock.json
-> package.json(Npm 依赖项)
-> Readme.md
docker-compose.yml
🔥 这里,我们的容器中运行着两个服务。第一个是我们的服务器,它暴露了 3000 端口,并使用 example-net 网络。(运行 `docker network create example-net` 命令,创建一个我们的应用程序将使用的网络)。
🔥 第二个是 MongoDB,它使用 docker 中预定义的镜像,并暴露端口 27017(我们的 index.js 文件使用此端口连接到 mongoDB)。
第三项服务是 Nginx,它运行在默认的 80 端口上。
😌 请仔细阅读代码以了解更多信息。
注意:- 在 Nginx 的配置文件中,我们使用了proxy_pass http://nodejsserver:3000;
nodejsserver,其中 nodejsserver 是 docker-compose 文件中给出的主机名。
🧘 现在,在终端运行命令docker-compose up
来构建所有镜像并运行容器内的服务。请确保 Docker 正在运行,并且 MongoDB 服务也已在您的机器上启动。
现在,在浏览器中使用默认端口 80 访问 localhost。您将看到类似这样的网页:(默认情况下,对 80 端口的请求将通过 Nginx 处理)。
🎉 太棒了!我们已经完成配置。现在,将您的项目迁移到 Docker 和 Nginx 吧。关注我们,获取更多精彩教程。
如果遇到任何一两个bug,请留言。😂
文章来源:https://dev.to/singhdevhub/dockerizing-nodejs-express-and-mongodb-app-with-nginx-as-a-reverse-proxy-27a4






