Рубрики
Без рубрики

Как управлять открытыми переменными среды EDX, используя Doppler и автоматизация развертывания

Секреты – это боль, чтобы управлять, и если вы используете Anbible для поддержания вашего приложения и его … Помечено Python, Django, DevOps, Security.

Секреты – это боль, чтобы управлять, и если вы используете Anbible, чтобы поддерживать ваше приложение, и его компоненты есть лучший способ сделать это. В этой статье мы видим, как Допплер Может помочь нам просто и быстро управлять переменными среды для сложной системы под названием Open EDX. По умолчанию для установки и сохранения открытого EDX мы используем Anibile. Например, для того, чтобы изменить учетные данные SMTP, вам необходимо изменить файл Anisible переменных, то вам следует развернуть его на целевой машине и вручную перезагрузить службы на своем сервере, чтобы применить изменение. Автоматизация этого процесса позволит нам ускорить утомительную работу и сэкономить время. Продав наши переменные в Doppler, читая их через API в нашей кодовой базе и автоматизируя развертывание с помощью Doppler WebHook.

Введение

Что такое открытый edx?

Откройте EDX Является ли платформа с открытым исходным кодом, которую вы можете использовать для создания и размещения онлайн-курсов. Первоначально он был разработан в 2012 году MIT и Гарвардским университетом и с тех пор был принят организациями всех форм и размеров для власти широкого спектра случаев использования онлайн-обучения. Он использовался организациями и университетами, такими как Microsoft, IBM, MIT и ASU.

Как мы обращаемся к переменным среды по умолчанию в Open EDX?

Мы используем Anbible для обеспечения и обслуживания нашей платформы. Если вы не знакомы с Anisible, это инструмент DEVOPS с открытым исходным кодом, который автоматизирует предоставление и конфигурацию программного обеспечения. Это строительные блоки:

  • Обязательные игровые книги, которые имеют 1 или несколько ролей. Imaging Playbook в качестве полных инструкций о том, как установить свое программное обеспечение, это компоненты и как установить их, чтобы работать правильно.
  • Несмысленные роли. Каждый компонент в вашем стеке имеет свою роль. Например, если вы используете Django, Nginx и MySQL в своем приложении, каждый из них имеет свою собственную роль.
  • Переменные, каждая роль имеет свои переменные. Например, вы должны предоставлять переменные для роли MySQL, чтобы определить root имя пользователя и пароль.

Какой рабочий процесс для изменения переменной среды?

У нас есть наши игровые книги, роли и их переменные в репо Github И мы использовали однозначное хранилище для шифрования переменных, чтобы предотвратить раскрытие наших учетных данных в Github. После шифрования его используют Vault, он выглядит следующее:

$ANSIBLE_VAULT;1.1;AES256
61353035366436396262643237303063643839653630393261663234666461653566626130613562
.
.
.

После того, как открытый EDX предоставлен Anisible все это переменные окружающей среды, живут как простой текст в файловой системе на сервере Ubuntu. Файл под названием LMS.YML И он содержит все переменные среды для нашей системы управления обучением, например:

EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST: smtp.elasticemail.com
EMAIL_HOST_PASSWORD: ********
EMAIL_HOST_USER: ******
EMAIL_PORT: 2525
EMAIL_USE_TLS: true

Разверните наше изменение на сервере

Чтобы изменить переменную, нам нужно, расшифруйте файл переменных в нашем репо, измените там переменную и снова зашифруйте файл и разверните его с помощью некоторого, после успешного развертывания эквивалентная переменная изменена в LMS.YML на сервере. Один дополнительный шаг для применения этого изменения – SSH на сервер и перезапустите все услуги вручную.

Проблема с файлами env

Есть несколько вопросов с этой реализацией:

  • Если неавторизованный человек имеет доступ к нашему серверу, они могут видеть все критические учетные данные нашей платформы.
  • Процесс развертывания включает в себя слишком много шагов, специально расширяющихся и зашифрующих файл переменных, который разработчик может легко забыть забудить обратно файл и толкать его в GitHub, в этом случае все секреты обнажены в репозитории Github.
  • После успешного развертывания на сервере нам нужно вручную перезапустить услуги.

Как доплеровская помощь может?

Допплер может помочь нам решить все эти 3 номера.

  • Мы вводите секреты в нашей кодовой базе напрямую с помощью Doppler, вместо создания локальных файлов переменных текстовых текстовых переменных на сервере
  • Нет необходимости расшифровать и шифровать файл переменных для каждого развертывания, все секреты безопасно размещаются в доплеровском языке.
  • Мы можем использовать Doppler Webhook, поэтому, как только переменная изменяется там, мы запускаем развертывание CIRCLECI к серверу.

Новый секретный дизайн и архитектура управления

Перед использованием Doppler так выглядит управление окружающей средой

После интеграции допплеров с нашей платформой, вот как выглядят управление секретами.

Создать переменные среды в доплеровском

В этой статье мы создаем одну переменную среды в Doppler, но процесс одинаков для всех наших переменных среды, которые мы хотим управлять в Doppler.

На моей учетной записи я создал проект под названием Openedx с 3 средами

Я создал переменную среды под названием Email_host_password Для управления паролем SMTP. Значение начинается с Aohrj ***** * Это не мой настоящий пароль SMTP, это только пример

Интегрируя допплеров в кодовую базу

Наше приложение написано в Python/Django Так что я использовал Допплер API Для этой интеграции. Я интегрировал нашу кодовую базу с допплером, поэтому вместо того, чтобы читать Email_host_password Из файла локальных переменных окружающей среды он позволяет вызове до Doppler API и получает значение для Email_host_password Отказ Я добавил следующее в нашу кодовую базу в edx-platform/lms/env/production.py файл

################################### Getting Environment Variables From Doppler ###################################


url = "https://api.doppler.com/v3/configs/config/secrets"

querystring = {"project": "openedx", "config": "dev"}
DOPPLER_TOKEN = AUTH_TOKENS.get('DOPPLER_TOKEN', '')
Authorization = "Basic {DOPPLER_TOKEN}".format(DOPPLER_TOKEN=DOPPLER_TOKEN)
headers = {
    "Accept": "application/json",
    "accepts": "application/json",
    "Authorization": Authorization
}
doppler_response = requests.request("GET", url, headers=headers, params=querystring)
EMAIL_HOST_PASSWORD = doppler_response.json()['secrets']['EMAIL_HOST_PASSWORD']['raw']

и удалил Email_host_password.get ('email_host_password', '') Из нашего кода, чтобы предотвратить чтение значения из локальных переменных среды.

Вы можете увидеть GIT Diff здесь

Давайте проверим это

>>> from django.conf import settings
>>> settings.EMAIL_HOST_PASSWORD
'aohRj******'

Как вы можете видеть настройки Django возвращает значение, которое мы устанавливаем в Doppler для Email_host_password.

Автоматизация развертывания с использованием Doppler WebHooks и Circleci

После интеграции нашей кодовой базы с Doppler мы улучшили безопасность нашей платформы, проведев наши переменные в безопасном способе, но когда мы изменяем переменную в Doppler, нам все еще нужно SSH на наш сервер и вручную запустите команду, как sudo/edx/bin/supervisorctl перезагрузите все Чтобы перезапустить все услуги, чтобы получить значения значений для наших секретов от Doppler. Чтобы удалить этот ручной шаг, мы можем использовать Doppler WebHooks, поэтому, как только появится изменение в одной из наших переменных, мы позвоните в CircleCi, чтобы перезапустить все услуги на нашем сервере.

Circleci Конфигурация

В Circleci я создал проект под названием doppler-openedx-deployer Отказ Этот проект имеет config.yml файл как следующий:

version: 2
jobs:
  build: 
    working_directory: ~/doppler-openedx-deployer
    docker: 
      - image: circleci/python:3.6.4
    steps: 
      - checkout
      - run: 
          name: Deploy to Open edX
          command:  ~/doppler-openedx-deployer/scripts/deploy.sh
          no_output_timeout: 30m

Бег Deploy.sh Мы загружаем последнюю версию наших ошибок наших Anisible Playbook, и она разворачивает команду для открытия EDX Server для обновления конфигурации и перезапускает все услуги.

Конфигурация допплеров

В Доплете мы можем пойти в раздел веб-каучуков в проектах и нашу конечную точку там.

Конечная точка здесь – это функция лямбда, которая использует PIRCLECI API для запуска сборки.

Давайте посмотрим, как это работает

Оригинал: “https://dev.to/corpcubite/how-to-manage-open-edx-environment-variables-using-doppler-and-automating-the-deployment-4c5e”