[英]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.