我最近启动了一个项目,以学习有关DevOps实践的更多信息。我开发了django应用,并想在我的应用中写技术文章。我的网站已准备好发布,但我有一些疑问。 我将应用程序进行了docker处理并与docker-compose一起使用,但我不想浪费时间给nginx,所以我也想对其进行dockerize。
version: '3.6'
services:
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data/
web:
build: .
image: dockerdjangoexample
command: bash -c "python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && gunicorn fatihkocnet.wsgi -b 0.0.0.0:8000"
volumes:
- .:/fatihkocnet
- ./fatihkocnet/career/static:/static
depends_on:
- db
nginx:
restart: always
image: nginx
ports:
- "8000:8000"
volumes:
- .:/fatihkocnet
- ./fatihkocnet/career/static:/static
- ./nginx.conf:/etc/nginx/conf.d
depends_on:
- web
volumes:
postgres_data:
Nginx部件当前无法正常工作。仍在尝试配置它,但是我也有另一个问题。我认为,没有生产和开发环境。我在开发时不能轻易使用nginx。它永远不会正常工作。所以我认为我可以使用jenkins和git。同时,我想与MIT Licence共享我的项目。然后我意识到我做不到。因为在源代码中,我使用生产密码,用户名等。
主要问题:如何创建生产和开发环境。只是使用git吗?还是我需要创建全新的基础架构?如何在不给所有人密码的情况下开发自由软件。我可以在Github中加密它们吗? 我认为生产和开发环境将解决我的问题。我看到每个人都说那是什么?那是什么意思?与git分支有关吗?
答案 0 :(得分:2)
第一条规则:不要将密码提交给源代码管理。
第二条规则:请勿在应用程序的源代码中对主机名,用户名或密码进行硬编码。
通常,尝试遵循12 factor application模式。
“开发”,“分段”和“生产”环境的全部要点是,您可以使用不同的设置在多个位置运行相同的应用程序源代码。例如,我的日常开发工作流程如下:
我在本地进行开发,完全不涉及Docker。我所有的数据库主机名均为localhost
,密码为password
。我开发,运行本地测试,启动服务并进行测试,直到我认为它可行为止。
我为组件构建Docker映像并将其部署在本地。这可能是本地Docker Compose设置,其中数据库主机名是database
,密码是password
。
我致力于源代码管理并将其推送到分支。我的同事对此进行了审核。
我们的CI系统(发生了詹金斯事件)构建了我的组件,运行了其测试,并将其部署到测试环境中。 Jenkins会注入一个实际的数据库主机名和一个密码。
如果这一切都很好,并且合并的系统可以在测试环境中正常工作,那么我合并分支,并告诉Jenkins部署到生产环境。它使用具有真实主机名的非Docker数据库以及Jenkins注入的密码。
所以:有时候我在Docker中运行东西;有时候我不知道相同的应用程序代码在两个地方都适用。我不太担心一个环境可能会使用与另一个环境不同的语言运行时补丁版本,并显式声明我的库依赖项(package.json
,Gemfile
,setup.py
/ {{1} },等)。我通过环境变量传递主机名和凭据,这是环境之间的唯一区别。