[英]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
。
[default]
username=@@USERNAME@@
password=@@PASSWORD@@
THE_USERNAME
和THE_PASSWORD
。 現在在本節before_script
的gitlab-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.