Развертывание нескольких приложений Django на AWS с настройкой для каждого экземпляра

#django #amazon-web-services #docker

Вопрос:

Я разработал приложение Django Vuejs, и пришло время попробовать его развернуть. Дело в том, что я хочу, чтобы для каждого клиента был запущен его экземпляр. Таким образом, каждый клиент должен был бы :

  • База данных AWS RDS (psql)
  • Контейнер, работающий с приложением (экземпляр AWS ECS ?!)
  • Клиент 1 может быть на версии v1.0 моего программного обеспечения, в то время как Клиент 2 может быть на версии v1.2. Поэтому у них должны быть разные контейнеры (все мои версии будут храниться в AWS ECR).
  • AWS S3 для их медиафайлов
  • Свой собственный поддомен (customer1.mydomain.com, customer2.mydomain.com, …)

В то время как я смог создать свой контейнер с помощью следующего файла настройки :

 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 amp;amp; 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
 

Теперь мне интересно, как я могу запустить его со следующими вопросами :

  1. При запуске контейнера он должен выполнить a manage.py migrate , чтобы применить миграции Django к базе данных клиентов (чтобы, если я разверну версию моего приложения версии 1.2, в то время как клиент был на версии 2.0, он перенес свою базу данных). Что мне нужно сделать, чтобы запустить его ? Это необходимо сделать до запуска Gunicorn (или его эквивалента).
  2. Каждый контейнер должен запускаться со своими собственными переменными env. Поскольку все контейнеры имеют разные базы данных, переменная DB_HOST env необходима для выбора нужной базы данных для каждого клиента.
  3. Должна ли у меня быть другая конфигурация nginx для каждого клиента ? Если да, то как я могу сделать его динамически настраиваемым ?

To summarize :
If I have a customer named «foo» running v1.0 of my software, I must have the following :

  • AWS RDS database named «foo»
  • Контейнер AWS ECS с версией v1.0 моего приложения, работающего со следующими переменными env : (DB_HOST: цель для базы данных AWS RDS, DB_USER, DB_PASSWORD, DB_PORT, …)
  • Контейнер должен реагировать на foo.mydomain.com

Можете ли вы помочь мне предоставить некоторые рекомендации, рекомендации для таких требований к развертыванию ?

Если какой-то информации не хватает, скажите об этом, и я адаптирую свой первоначальный пост.

Заранее спасибо!