簡體   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