Я пишу платформу для автоматизации повседневной работы бизнеса, это должно быть предложение SaaS с каждым клиентом, имеющим свою собственную базу данных.
В настоящее время я использую следующее: Gitlab (Git Repo со многими инструментами на основе DevOps), Sentry (отслеживание ошибок, интегрированное с Gitlab), Kubernetes (оркестровка контейнеров), PHPStorm (IDE).
Идея заключалась в том, чтобы отправить код в Gitlab, который бы выполнял процесс CI / CD и развертывал его как непрерывное обновление для всех моих клиентов, разделенных пространством имен в Kubernetes. Проблема в том, что каждому клиенту потребуются собственные переменные среды, включая ключи шифрования, учетные данные базы данных и ключи API для центрального API, который обеспечивает связь между развертыванием каждого клиента. Я вижу, где бы я ввел переменные среды для одного клиента, но как бы это сделать для многих клиентов.
Я изучал возможность разветвления кода для каждого клиента и настройки зеркала, но Gitlab всегда выдает ошибку 500 при попытке зеркального копирования того же сервера Gitlab.
Это привело к остановке всего моего проекта.
Приветствуются любые рекомендации.
Каждый клиент работает на отдельной копии базы кода по нескольким причинам, включая изоляцию данных, и мы выставляем счет за использование ресурсов не на каждого пользователя.
Это может быть тривиально, но просто внесите несколько изменений в код, чтобы принять все переменные как переменные среды. Теперь, даже если ваши клиенты могут находиться в одном пространстве имен, используя одну и ту же кодовую базу и извлекая образ докера из одного репо, все, что вам нужно сделать, это изменить файл развертывания и вуаля! Все ваши клиенты теперь могут иметь свои собственные среды, также, поскольку вы используете Kubernetes, вы можете использовать скользящее обновление, а также в качестве меры безопасности везде, где вы используете переменные среды, не предоставляют значения по умолчанию (хотя это хорошая практика). Насколько я понимаю ваш случай, вы хотите, чтобы клиенты обслуживались только с контентом, относящимся к их средам. Таким образом, указание значения по умолчанию может привести к тому, что вы пропустите одну или две переменные среды, иногда создавая проблемы для вас.
Ссылка: https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/
Мой ответ:
docker secret
Под «внедрением» я имею в виду то, что отличает одно развертывание от другого, не должно присутствовать внутри репозитория git. Это также идеальный способ запустить одно или несколько тестовых / dev / qa / staging развертываний. Видеть 12-факторное приложение (но не используйте переменные среды, как они предлагают).
Следовательно, каждый процесс, в котором вы сначала развертываете свою кодовую базу, требует документированных шагов «Как подготовить ConfigMaps / Secrets».