需要一些关于 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 模式。
“开发”、“暂存”和“生产”环境的全部意义在于,您可以 运行 在具有不同设置的多个位置使用相同的应用程序源代码。例如,我的日常开发工作流程如下所示:
我在本地进行开发,完全没有 Docker 参与。我所有的数据库主机名都是 localhost
,密码是 password
。我开发,运行 本地测试,启动服务,并测试直到我认为它有效。
我构建了我的组件的 Docker 图像并将其部署到本地。这可能是本地 Docker Compose 设置,其中数据库主机名是 database
,密码是 password
。
我致力于源代码管理并将其推送到一个分支。我的同事评论它。
我们的 CI 系统(碰巧是 Jenkins)构建我的组件,运行 进行测试,并将其部署到测试环境。 Jenkins 注入了一个实际的数据库主机名和密码。
如果这一切都很好并且组合系统在测试环境中工作,我合并我的分支并告诉 Jenkins 部署到生产环境。这使用非Docker 数据库,具有真实的主机名和 Jenkins 注入的密码。
所以:有时候我运行的东西在Docker;有时我不这样做;相同的应用程序代码适用于两个地方。我并不过分担心一个环境可能 运行 次使用一种语言的不同补丁版本,并明确声明我的库依赖项(package.json
、Gemfile
、setup.py
/requirements.txt
、等)。我通过环境变量传入主机名和凭据,这些是环境之间的唯一区别。
我最近启动了一个项目,以了解更多有关 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 模式。
“开发”、“暂存”和“生产”环境的全部意义在于,您可以 运行 在具有不同设置的多个位置使用相同的应用程序源代码。例如,我的日常开发工作流程如下所示:
我在本地进行开发,完全没有 Docker 参与。我所有的数据库主机名都是
localhost
,密码是password
。我开发,运行 本地测试,启动服务,并测试直到我认为它有效。我构建了我的组件的 Docker 图像并将其部署到本地。这可能是本地 Docker Compose 设置,其中数据库主机名是
database
,密码是password
。我致力于源代码管理并将其推送到一个分支。我的同事评论它。
我们的 CI 系统(碰巧是 Jenkins)构建我的组件,运行 进行测试,并将其部署到测试环境。 Jenkins 注入了一个实际的数据库主机名和密码。
如果这一切都很好并且组合系统在测试环境中工作,我合并我的分支并告诉 Jenkins 部署到生产环境。这使用非Docker 数据库,具有真实的主机名和 Jenkins 注入的密码。
所以:有时候我运行的东西在Docker;有时我不这样做;相同的应用程序代码适用于两个地方。我并不过分担心一个环境可能 运行 次使用一种语言的不同补丁版本,并明确声明我的库依赖项(package.json
、Gemfile
、setup.py
/requirements.txt
、等)。我通过环境变量传入主机名和凭据,这些是环境之间的唯一区别。