Развертывание нескольких приложений Django на AWS с конфигурацией для каждого экземпляра
Я разработал приложение Django+Vuejs и пришло время попробовать его развернуть. Дело в том, что я хочу иметь экземпляр приложения, запущенный для каждого клиента. Таким образом, у каждого клиента будет :
- База данных AWS RDS (psql)
- Контейнер, запущенный с приложением (экземпляр AWS ECS ?!)
- Клиент 1 может быть на версии 1.0 моего программного обеспечения, а клиент 2 может быть на версии 1.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
Теперь мне интересно, как я могу запустить его со следующими вопросами :
- When starting the container, It should perform a
manage.py migrate
to apply Django migrations to the customer database (so that if I deploy a v1.2 version of my app whereas the customer was on v1.0, it migrates his DB). What do I have to do to be able to run it ? It must be done before starting Gunicorn (or equivalent). - Each container must be started with its own env variables. Because since all containers have different DBs, a DB_HOST env variable is necessary to target the right database per customer.
- Do I have to have a different nginx configuration per customer ? If so, how can I make it dynamically configurable ?
Подведем итог: Если у меня есть клиент по имени "foo", использующий версию 1.0 моего программного обеспечения, я должен иметь следующее :
- AWS RDS база данных с именем "foo"
- AWS ECS контейнер с v1.0 моего приложения, запущенный со следующими переменными env : (DB_HOST: цель для базы данных AWS RDS, DB_USER, DB_PASSWORD, DB_PORT, ...) .
- Контейнер должен отвечать на foo.mydomain.com .
Можете ли вы помочь мне предоставить некоторые рекомендации, ссылки для таких требований к развертыванию?
Если какой-то информации не хватает, скажите об этом, и я адаптирую свой первоначальный пост.
Заранее спасибо!