Наистина харесвам идеите зад Манифеста на дванадесетте фактора. Опитвам се да ги приложа към малко внедряване в стил микросервиз за проект на Python/Django. Проектът Django е пакетиран в Docker контейнер, който се внедрява чрез Docker Hub.
Единственото нещо, което се опитвам да разбера, е как да се справя с конфигурационните файлове и променливите на средата. Общата мъдрост на приложенията с 12 фактора е, че конфигурацията трябва да се съхранява като променливи на средата, а не в контрола на източника. Мисля да внедря това с помощта на django-environ, който проверява променливите на средата, а също и файл .env
за използване в dev.
Тогава как да задам тези променливи на средата в производството?
- В Docker е възможно да декларирате променливи на средата като
ENV
в Dockerfile (doc). Така че мога да добавя тази информация там, но проверявам в Dockerfile с изходния код, така че това би провалило целта. - Бих могъл да създам допълнителен
.env
файл за производство и не да го проверявам в контрола на източника. Мога да копирам този производствен.env
файл, докато изграждам изображението с помощта на командатаCOPY
. Но това означава, че разработчикът ще има достъп до идентификационните данни на DB. - Настройте персонализиран тригер за изграждане, така че когато кодът се актуализира в контролата на източника, да се издава тригер за изграждане. Когато изображението се изгражда, този изграждащ възел добавя този
.env
файл и се разполага на сървъра.
Чувствам, че третият вариант е единственият, който има смисъл. Но дори и в този случай, конфигурационните елементи все още се съхраняват във файл, а не наистина в променливи на средата.
Някакви идеи как да се справим с това?
docker run -e FOO=bar image
. Като алтернатива можете да ги прочетете от файл, предаващ--env-file file
. Освен това вярвам, че задействането на персонализирано изграждане също би нарушило мъдростта, тъй като бихте кодирали твърдо променливите за cnofiguration в докер изображение. Това важи и за командатаCOPY
. Друга възможност е монтирането на конфигурационен файл, но това трябва да се направи само ако използването на променливи на средата е невъзможно. - person Lukas Juhrich   schedule 27.10.2015.env
файл на хоста и го монтирате към Docker, представете си така, че Django да го вземе? - person user1496984   schedule 03.11.2015.env
файлове с конфигурационните файлове за монтиране!.env
файловете (използвани чрез--env-file
) са само един вид „стенописно обозначение“ за предаване на променливи на средата, докато монтирането на конфигурационен файл е активно добавяне на нещо към контейнера за докери (т.е. неговата файлова система). Използването на променливи на средата е по-добрият (по-чист) вариант, тъй като оставяте самия контейнер недокоснат, а освен това те са там за това – да предоставят информация за средата, т.е. с какви параметри трябва да се използва приложението. - person Lukas Juhrich   schedule 04.11.2015