django - 在 AWS 上部署多个 Django 应用程序,每个实例都有配置
问题描述
我开发了一个 Django+Vuejs 应用程序,现在是时候尝试部署它了。问题是我想为每个客户运行它的一个实例。所以每个客户都会有:
- AWS RDS 数据库 (psql)
- 与应用程序一起运行的容器(AWS ECS 实例?!)
- 客户 1 可以使用我的软件的 v1.0,而客户 2 可以使用 v1.2。所以它们必须有不同的容器(我所有的版本都将存储在 AWS ECR 中)。
- AWS S3 用于他们的媒体文件
- 它自己的子域(customer1.mydomain.com,customer2.mydomain.com,...)
虽然我已经能够使用以下 Dockerfile 构建我的容器:
FROM node:lts-alpine as build-frontend-stage
WORKDIR /frontend
COPY ./frontend/package*.json /frontend/
RUN npm install
COPY ./frontend .
RUN npm run build
FROM python:3.8.10-slim as build-backend-stage
RUN apt-get update && apt-get install --yes --no-install-recommends \
g++ \
libpq-dev
WORKDIR /backend
RUN pip install --upgrade pip
COPY ./backend/requirements.txt /backend
RUN pip install -r requirements.txt
COPY ./backend .
COPY --from=build-frontend-stage /frontend/dist/static /backend/static
COPY --from=build-frontend-stage /frontend/dist/index.html /backend/static
我现在想知道如何通过以下问题运行它:
- 启动容器时,它应该执行一个
manage.py migrate
将 Django 迁移应用到客户数据库(这样如果我在客户使用 v1.0 时部署我的应用程序的 v1.2 版本,它会迁移他的数据库)。我必须做什么才能运行它?必须在启动 Gunicorn(或等效项)之前完成。 - 每个容器都必须使用自己的环境变量启动。因为所有容器都有不同的数据库,所以需要一个 DB_HOST 环境变量来定位每个客户的正确数据库。
- 我是否必须为每个客户提供不同的 nginx 配置?如果是这样,我怎样才能使其动态可配置?
总结一下:如果我有一个名为“foo”的客户运行我的软件 v1.0,我必须具备以下条件:
- AWS RDS 数据库名为“foo”
- AWS ECS 容器,我的应用程序的 v1.0 使用以下环境变量运行:(DB_HOST:目标到 AWS RDS DB、DB_USER、DB_PASSWORD、DB_PORT,...)
- 容器必须响应 foo.mydomain.com
你能帮我为这样的部署要求提供一些指导、参考吗?
如果缺少某些信息,请说出来,我会调整我的初始帖子。
提前致谢 !
解决方案
推荐阅读
- python - 需要从 Python 向 Interactive Shell 脚本提供输入
- r - 使用线条和标记时R Plotly图例重复
- google-apps-script - 如何将 TRUE/FALSE 转换为 Google 表格中的复选框?
- node.js - 如何将此curl请求转换为nodejs axios put请求
- python - 有没有办法用烧瓶转到 html 页面的特定部分?
- javascript - 为什么没有 a 而不是一个?
- c# - 支持 cookie 和 javascript 的跨平台 .NET webview
- grafana - 如何在 Grafana 中反转图表,使 Y 轴上的值较小
- angular - 将数据从firebase过滤到角度
- azure - 使用 Powershell 运行 azure cli 命令时,如何为每个创建嵌套?