如何将Dockerized(NestJS应用程序)部署到云服务提供商,如亚马逊网络服务(AWS)、微软Azure、谷歌云



这是我的docker-compose.yml文件的一个示例

该应用程序运行良好,我所要求的只是为任何云服务提供商的生产和部署步骤进行配置。

docker-compose文件包含我的API服务、Postgres-Image和用于开发的pgAdmin

version: "3.8"
services:
# Our NestJS Api
api:
build:
dockerfile: Dockerfile
context: ./api
# Only build development stage from Dockerfile
target: development
# Mount our host dir to the docker container
# Mount api directory (./api) to (:) docker container (/kdb/src/app)
# Reflect File changes from host to container
volumes:
- ./api:/kdb/src/app
- /kdb/src/app/node_modules/
# RUN in debug mode: npm run start:debug --> Also start your vscode debugger
# Run in dev mode: npm run start:dev
command: npm run start:dev
depends_on: 
- postgres
environment:
DATABASE_URL: postgres://user:password@postgres:5432/db
NODE_ENV: development
JWT_SECRET: hard_to_guess_secret_123
PORT: 3000
ports:
- 3000:3000
- 9229:9229

# Postgresql
# Our Postgres Database for NestJS to connect to
postgres:
image: postgres:10.4
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db
ports:
- 35000:5432
# The Postgres Admin tool if we want to run some custom queries and so on against our Database
postgres_admin:
image: dpage/pgadmin4:4.28
depends_on: 
- postgres
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: password
ports:
- 5050:80

让我们以AWS为例。

在EC2实例上部署应用程序

  1. 您将需要创建EC2实例,并在该实例上安装所需的依赖项,如docker本身。确保您使用公共IP创建它(如果需要,分配静态IP(推荐文档EC2

  2. 打开安全组中需要从外部访问的端口。如果您希望使用HTTPS在端口443访问应用程序,那么我们需要为HTTPS协议打开端口443。安全组文档

  3. 一旦所有东西都安装好了,并且应用程序已经启动并运行,您就应该能够使用公共IP和端口访问应用程序

将route53记录分配给用户友好域的实例

  1. 您应该是域的所有者,比如domain.com

  2. 在AWS中创建一个托管区域,并根据您的域名设置名称服务器。创建一个路由53A,记录指向实例的公共IP地址。

  3. 现在,您将能够使用http://domainname.com:443访问相同的应用程序

我们如何扩展并进入下一个级别

使应用程序成为无状态

  1. 应用程序的状态应存储在外部数据库中。如果你有多个docker-compose实例在多个实例中运行,它们就无法相互通信,这就一团糟。那么我们该怎么办呢?

  2. 我们将数据库移动到托管服务或单独的EC2实例。

  3. 我们为应用程序创建一个DockerImage,并使用像Kubernetes这样的容器编排框架。

  4. 您也可以通过部署在local-k8s上在本地测试应用程序。一些可以帮助的任务

  5. 您需要选择入口。根据您的要求,您可以选择Traefik、Kong或任何其他入口。

  6. 您将需要创建一个负载平衡器服务类型来对外公开应用程序。推荐文件-Traefik

  7. 您可以在托管区域中创建Alias A记录,并将其分配给负载平衡器。推荐文件-Route53和ALB

  8. 您可以使用AWS证书管理器免费创建证书。ACM和ALB

相关内容

  • 没有找到相关文章

最新更新