Eu provavelmente só preciso de uma dica na direção certa.
Eu tenho um contêiner docker executando um aplicativo Django usando gunicorn e nginx. Este aplicativo Django está atualmente obtendo suas variáveis de ambiente de um arquivo .env.
FROM python:alpine
EXPOSE 8000
RUN apk update
RUN apk add --no-cache git gcc musl-dev libffi-dev libxml2-dev libxslt-dev gcc swig g++
RUN apk add --no-cache jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff- dev tk-dev tcl-dev
RUN apk add --no-cache bash ffmpeg libmagic
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install --upgrade setuptools
RUN mkdir /opt/app
WORKDIR /opt/app
COPY . .
RUN python3 -m pip install /root/d12f/
RUN pip3 install -r requirements.txt
RUN pip3 install gunicorn
CMD sh -c 'gunicorn --conf python:app.gunicorn_conf app.wsgi --bind 0.0.0.0:8000 --reload --log-level info --access-logfile - --timeout 360 --error-logfile -'
É claro que não há arquivo .env no repositório, pois isso seria um risco de segurança.
A imagem do Docker está sendo criada pelo github e armazenada em um pacote privado do GitHub. Mais tarde, esta imagem docker está sendo usada para rodar no Kubernetes.
Estou tentando encontrar a melhor solução para colocar um arquivo .env em
/opt/app/app/.env
como um arquivo local.
Eu preferiria não usar variáveis de ambiente globais, se possível.
Obrigado por qualquer sugestão.
Armazene seu
.env
arquivo como umSecret
comkubectl
[1] :Então você pode montar o
Secret
como um volume em suaPod
definição [2] , [3] :Seu aplicativo deve ser capaz de acessar seus
env
s em/opt/app/app/.env
.Use
wget
ou um comando cli do provedor de nuvem para puxá-lo para baixo em tempo de execução.Você deve usar algum mecanismo de autenticação para protegê-lo no "armazenamento de arquivos de configuração", por exemplo, IAM e um Bucket seguro. Ou sua loja de configuração também deve aceitar arquivos.
mv
o arquivo no diretório opt apropriado.