#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
Теперь мне интересно, как я могу запустить его со следующими вопросами :
- При запуске контейнера он должен выполнить a
manage.py migrate
, чтобы применить миграции Django к базе данных клиентов (чтобы, если я разверну версию моего приложения версии 1.2, в то время как клиент был на версии 2.0, он перенес свою базу данных). Что мне нужно сделать, чтобы запустить его ? Это необходимо сделать до запуска Gunicorn (или его эквивалента). - Каждый контейнер должен запускаться со своими собственными переменными env. Поскольку все контейнеры имеют разные базы данных, переменная DB_HOST env необходима для выбора нужной базы данных для каждого клиента.
- Должна ли у меня быть другая конфигурация 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
Можете ли вы помочь мне предоставить некоторые рекомендации, рекомендации для таких требований к развертыванию ?
Если какой-то информации не хватает, скажите об этом, и я адаптирую свой первоначальный пост.
Заранее спасибо!