需要一些关于 nginx、git 和 jenkins 的建议

Need some advice for nginx, git and jenkins

我最近启动了一个项目,以了解更多有关 DevOps 实践的信息。我开发了一个 Django 应用程序,想在我的应用程序中写技术文章。我的网站已准备好发布,但我有一些问题。 我 docker 化了我的应用程序并使用了 docker-compose,但我不想浪费时间在 nginx 上,所以我也想 docker 化它。

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 个分支吗?

第一条规则:不要将密码提交给源代码管理

第二条规则:不要在应用程序的源代码中硬编码主机名、用户名或密码。

一般来说,尽量遵循 12 factor application 模式。

“开发”、“暂存”和“生产”环境的全部意义在于,您可以 运行 在具有不同设置的多个位置使用相同的应用程序源代码。例如,我的日常开发工作流程如下所示:

  1. 我在本地进行开发,完全没有 Docker 参与。我所有的数据库主机名都是 localhost,密码是 password。我开发,运行 本地测试,启动服务,并测试直到我认为它有效。

  2. 我构建了我的组件的 Docker 图像并将其部署到本地。这可能是本地 Docker Compose 设置,其中数据库主机名是 database,密码是 password

  3. 我致力于源代码管理并将其推送到一个分支。我的同事评论它。

  4. 我们的 CI 系统(碰巧是 Jenkins)构建我的组件,运行 进行测试,并将其部署到测试环境。 Jenkins 注入了一个实际的数据库主机名和密码。

  5. 如果这一切都很好并且组合系统在测试环境中工作,我合并我的分支并告诉 Jenkins 部署到生产环境。这使用非Docker 数据库,具有真实的主机名和 Jenkins 注入的密码。

所以:有时候我运行的东西在Docker;有时我不这样做;相同的应用程序代码适用于两个地方。我并不过分担心一个环境可能 运行 次使用一种语言的不同补丁版本,并明确声明我的库依赖项(package.jsonGemfilesetup.py /requirements.txt)。我通过环境变量传入主机名和凭据,这些是环境之间的唯一区别。