发布于 2026-01-06 13 阅读
0

使用 NGINX 作为反向代理,将 NodeJS、Express 和 MongoDB 应用容器化

使用 NGINX 作为反向代理,将 NodeJS、Express 和 MongoDB 应用容器化

🙂 对于初学者或正在学习后端开发的开发者来说,最常见的起点是构建 API 并将其与数据库连接起来。

例如,如果我们谈到MERN技术栈,我们可以分别使用NodeJS和MongoDB作为后端框架和数据库来构建很棒的Web应用程序。我们甚至可以构建像电子商务网站这样复杂的网站。

🎯 但说到可扩展性,我们常常忽略这一点,直接就部署。今天我们就来谈谈这个。

  • 如何将使用 MongoDB 作为数据库的 NodeJS 应用容器化(如果您不了解,请参考Docker 教程)
  • 如何使用 NGINX 作为负载均衡器或反向代理来均衡负载(请先阅读NGINX 教程
  • 如何使用 Docker Compose(请参考如何将简单的 NodeJS 应用容器化的简单教程)
  • 总之,我们将看到:如何在 Docker 容器内运行使用数据库连接的 NodeJS 应用程序,以及如何添加 NGINX 以实现未来(如果需要)的负载均衡。

🔥 利用这些工具,您可以构建一个能够处理多个并发用户的应用程序。您还可以使用 JMeter(性能测试)来测试您的应用程序。

😌 现在,让我们开始吧:

Docker

🫵 这就是我们的应用程序设置界面:

NodeJS 和 Nginx 以及 Docker

作为最终用户,您在发出任何请求时都会看到 NGINX 的 IP 地址。但在我们的案例中,NGINX 容器和 NodeJS 容器将运行在同一个 IP 地址上。

Docker Compose:它是一个用于在 Docker 上运行多容器应用程序的工具,应用程序使用 Compose 文件格式进行定义。Compose 文件用于定义构成应用程序的一个或多个容器的配置方式。

🧘 我们将按以下方式进行操作:

Docker 镜像和 Docker 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

Docker Compose 文件

🔥 这里,我们的容器中运行着两个服务。第一个是我们的服务器,它暴露了 3000 端口,并使用 example-net 网络。(运行 `docker network create example-net` 命令,创建一个我们的应用程序将使用的网络)。

🔥 第二个是 MongoDB,它使用 docker 中预定义的镜像,并暴露端口 27017(我们的 index.js 文件使用此端口连接到 mongoDB)。

Nginx Docker 容器

第三项服务是 Nginx,它运行在默认的 80 端口上。

😌 请仔细阅读代码以了解更多信息。

注意:- 在 Nginx 的配置文件中,我们使用了

proxy_pass http://nodejsserver:3000;

nodejsserver,其中 nodejsserver 是 docker-compose 文件中给出的主机名。

🧘 现在,在终端运行命令

docker-compose up

来构建所有镜像并运行容器内的服务。请确保 Docker 正在运行,并且 MongoDB 服务也已在您的机器上启动。

现在,在浏览器中使用默认端口 80 访问 localhost。您将看到类似这样的网页:(默认情况下,对 80 端口的请求将通过 Nginx 处理)。

打开网页

🎉 太棒了!我们已经完成配置。现在,将您的项目迁移到 Docker 和 Nginx 吧。关注我们,获取更多精彩教程。

Nginx 中的错误

如果遇到任何一两个bug,请留言。😂

文章来源:https://dev.to/singhdevhub/dockerizing-nodejs-express-and-mongodb-app-with-nginx-as-a-reverse-proxy-27a4