繁体   English   中英

docker - 如何从 env.ini 文件外部为 docker-compose.yml 文件设置环境数据库?

[英]docker - How to set up environment database for docker-compose.yml file from env.ini file outide?

这是我对数据库信息进行硬编码的docker-compose.yml

我想从我的文件env.ini中输入它,然后再将其推送到 GitLab 以确保安全,但不知道该怎么做。

version: "3.8"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=#######                     Hide these information and take it from
      - POSTGRES_USER=#####                     another file when running it
      - POSTGRES_HOST=172#####
      - POSTGRES_PASSWORD=#########
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

另外:我的文件env.ini非常复杂,因为它包含很多其他信息,它看起来像这样:

[sv_info]
host = #########
user = ########
password = ########
database = #
venus_base_url = #################
venus_auth_key =
cargo_base_url = #################
cargo_awb_acckey = #################
cargo_awb_cusnum = #################
cargo_awb_user = #################
cargo_awb_revkey = #################

[heremap_info]
url = #################
api_key = #################

通常,我在Python中使用from configparser import ConfigParser在我的代码中使用这个env.ini

  • 添加文件 settings.ini.template ,例如:
[default]
username=@@USERNAME@@
password=@@PASSWORD@@
  • 将此添加到存储库。
  • 在您的项目中添加变量THE_USERNAMETHE_PASSWORD

现在在本节before_scriptgitlab-ci.yml中执行:

sed -e 's/@@USERNAME@@/'$THE_USERNAME'/' -e 's/@@PASSWORD@@/'$THE_PASSWORD'/' settings.ini.template > settings.ini.

首先,您的带有环境变量的文件应命名为.env ,其内容如下所示:

POSTGRES_DB=cookies
POSTGRES_USER=jamie
POSTGRES_PASSWORD=oliver
POSTGRES_HOST=127.0.0.1

这些环境变量应该传递给容器。 为此,您应该更新 docker 组合配置,如下所示:

version: "3.8"
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_HOST=${POSTGRES_HOST}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

然后在您的 django 设置中:

import os


# ...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ['POSTGRES_DB'],
        'USER': os.environ['POSTGRES_USER'],
        'PASSWORD': os.environ['POSTGRES_PASSWORD'],
        'HOST': os.environ['POSTGRES_HOST'],
        'PORT': 5432,
    },
}

我还强烈建议使用环境 package来读取环境变量的值。

from environs import Env


env = Env()
IS_ENABLED = env.bool('IS_ENABLED', default=True)

这意味着,即使环境变量IS_ENABLED值为True (字符串) - environs会将其转换为bool

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM