如何使用 Docker 为开发和生产设置单独的 .env



来自我手动对远程服务器执行 ssh 、执行 git 拉取并创建我的.env(因为它被 gitignore (的环境中,我如何将开发.env和生产.env分开。我使用 docker-machine 创建了一个 AWS EC2 实例。我创建了一个production.yml并做了docker-compose -f production.yml up -d.EC2 机器中的容器拾取了我的开发.env这不是我想要的。

Dockerfile

FROM python:3.6-alpine
ENV PYTHONUNBUFFERED 1
RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev git jpeg-dev zlib-dev libmagic
RUN python -m pip install --upgrade pip
RUN mkdir /writer-api
COPY requirements.txt /writer-api/
RUN pip install --no-cache-dir -r /writer-api/requirements.txt
COPY . /writer-api/
WORKDIR /writer-api

生产.yml

version: "3"
services:
postgres:
restart: always
image: postgres
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data/
web:
restart: always
build: .
command: gunicorn writer.wsgi:application -w 2 -b :8000
environment:
DEBUG: ${DEBUG}
SECRET_KEY: ${SECRET_KEY}
DB_HOST: ${DB_HOST}
DB_NAME: ${DB_NAME}
DB_USER: ${DB_USER}
DB_PORT: ${DB_PORT}
DB_PASSWORD: ${DB_PASSWORD}
SENDGRID_API_KEY: ${SENDGRID_API_KEY}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
AWS_STORAGE_BUCKET_NAME: ${AWS_STORAGE_BUCKET_NAME}
depends_on:
- postgres
- redis
expose:
- "8000"
redis:
restart: always
image: "redis:alpine"
celery:
restart: always
build: .
command: celery -A writer worker -l info
volumes:
- .:/writer-api
depends_on:
- postgres
- redis
celery-beat:
restart: always
build: .
command: celery -A writer beat -l info
volumes:
- .:/writer-api
depends_on:
- postgres
- redis
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
depends_on:
- web
volumes:
pgdata:

我想你可以导出环境shell变量,然后根据环境使用.env。在工作区中创建dev.envprod.env文件。

示例撰写 -

version: '3'
services:
nginx:
image: nginx
ports:
- '80'
env_file:
- ${ENVIRON}.env

专为开发而构建 -

export ENVIRON=dev
docker-compose up -d 

为生产而构建 -

export ENVIRON=prod
docker-compose up -d 

这样,您将能够在 DEV 和 PROD 环境中使用相同的撰写文件。

productiondevcompose文件设置在单独的文件夹中,并将.env文件放在这些文件夹中

最新更新