【问题标题】:Need some advice for nginx, git and jenkins需要一些关于 nginx、git 和 jenkins 的建议
【发布时间】:2018-10-17 15:28:50
【问题描述】:

我最近启动了一个项目,以了解有关 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 许可证将我的项目分享给其他人。然后我意识到我做不到。因为在源代码中我使用了我的生产密码、用户名等。

主要问题:如何创建生产和开发环境。它只是使用git吗?或者我需要创建全新的基础设施?我如何在不向所有人提供密码的情况下开发免费软件。我可以在 Github 中加密它们吗? 我认为生产和开发环境将解决我的问题。我看到每个人都这么说,但那些是什么?他们是什么意思?是关于 git 分支的吗?

【问题讨论】:

    标签: git docker nginx jenkins devops


    【解决方案1】:

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

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

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

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

    1. 我在本地进行开发,完全不涉及 Docker。我所有的数据库主机名都是localhost,密码是password。我开发、运行本地测试、启动服务并进行测试,直到我认为它可以工作为止。

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

    3. 我提交源代码管理并将其推送到分支。我的同事审核了它。

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

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

    所以:有时我在 Docker 中运行;有时我不会;相同的应用程序代码在两个地方都适用。我不太担心一个环境可能使用与另一个环境不同的语言运行时补丁版本,并明确声明我的库依赖项(package.json、Gemfile、setup.py/requirements.txt、等。 /em>)。我通过环境变量传入主机名和凭据,这些是环境之间的唯一区别。

    【讨论】:

    • 感谢您的回答。现在我将在 Jenkins 上工作。但我仍有疑问。我如何管理 nginx?我还需要对其进行 docker 化,还是只在服务器中运行就可以解决我的问题?
    • 混合运行 Docker 和非 Docker 部分很好,如果这在您的环境中有效。
    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多