这是我的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实例上部署应用程序
-
您将需要创建EC2实例,并在该实例上安装所需的依赖项,如docker本身。确保您使用公共IP创建它(如果需要,分配静态IP(推荐文档EC2
-
打开安全组中需要从外部访问的端口。如果您希望使用HTTPS在端口443访问应用程序,那么我们需要为HTTPS协议打开端口443。安全组文档
-
一旦所有东西都安装好了,并且应用程序已经启动并运行,您就应该能够使用公共IP和端口访问应用程序
将route53记录分配给用户友好域的实例
-
您应该是域的所有者,比如
domain.com
。 -
在AWS中创建一个托管区域,并根据您的域名设置名称服务器。创建一个路由53A,记录指向实例的公共IP地址。
-
现在,您将能够使用
http://domainname.com:443
访问相同的应用程序
我们如何扩展并进入下一个级别
使应用程序成为无状态
-
应用程序的状态应存储在外部数据库中。如果你有多个docker-compose实例在多个实例中运行,它们就无法相互通信,这就一团糟。那么我们该怎么办呢?
-
我们将数据库移动到托管服务或单独的EC2实例。
-
我们为应用程序创建一个DockerImage,并使用像Kubernetes这样的容器编排框架。
-
您也可以通过部署在local-k8s上在本地测试应用程序。一些可以帮助的任务
-
您需要选择入口。根据您的要求,您可以选择Traefik、Kong或任何其他入口。
-
您将需要创建一个负载平衡器服务类型来对外公开应用程序。推荐文件-Traefik
-
您可以在托管区域中创建Alias A记录,并将其分配给负载平衡器。推荐文件-Route53和ALB
-
您可以使用AWS证书管理器免费创建证书。ACM和ALB