为了账号安全,请及时绑定邮箱和手机立即绑定

Openshift快速入门:Django

标签:
Docker

Openshift快速入门:Django

这是一个Django项目,您可以将其用作开发自己的项目并将其部署在OpenShift集群上。

本文档中的步骤假定您可以访问可以部署应用程序的OpenShift部署。

为你做了什么

这是一个最小的Django 1.11项目。它是使用以下步骤创建的:

  1. 创建一个virtualenv

  2. 手动安装Django和其他依赖项

  3. pip freeze > requirements.txt

  4. django-admin startproject project .

  5. 更新project/settings.py配置SECRET_KEYDATABASESTATIC_ROOT条目

  6. ./manage.py startapp welcome,创建欢迎页面的应用程序

从这个初始状态,你可以:

  • 创建新的Django应用程序

  • 删除welcome应用程序

  • 重命名Django项目

  • 更新设置以满足您的需求

  • 安装更多Python库并将其添加到requirements.txt文件中

此存储库中的特殊文件

除了由Django的(创建的常规文件project/*welcome/*manage.py),这个库包含:

openshift/         - OpenShift-specific files
├── scripts        - helper scripts
└── templates      - application templates
 
requirements.txt   - list of dependencies

警告

在本地工作站,共享系统或生产环境中运行此代码之前,请务必阅读以下警告和注意事项。

数据库配置

此存储库中的示例应用程序代码和模板包含依赖于能够使用sqlite的数据库连接设置和凭据。

自动测试执行

此存储库中的示例应用程序代码和模板包含通过postCommit挂钩自动执行测试的脚本。这些测试假定它们是针对本地测试sqlite数据库执行的。如果为构建提供了备用数据库凭据,则测试可能会对该数据库进行不必要的更改。

本地开发

要在开发计算机中运行此项目,请按照下列步骤操作:

  1. (可选)创建并激活virtualenv(您可能希望使用virtualenvwrapper)。

  2. 确保您的计算机上有可执行文件pg_config。你可以用which pg_config来检查。如果没有,请使用以下方法之一安装依赖项。

  • macOS:使用Homebrew brew install postgresql

  • Ubuntu的: sudo apt-get install libpq-dev

  • 其他

fork这个repo并克隆你的fork:

git clone https://github.com/sclorg/django-ex.git

安装依赖项:

pip install -r requirements.txt

创建开发数据库:

./manage.py migrate

如果一切正常,您应该能够启动Django开发服务器:

./manage.py runserver

打开浏览器并转到http://127.0.0.1:8000,欢迎您来到欢迎页面。

部署到OpenShift

要执行后续步骤,您需要登录到OpenShift集群并拥有一个可以在其中工作的OpenShift项目。

使用应用程序模板

目录openshift/templates/包含可以添加到OpenShift项目的OpenShift应用程序模板:

oc create -f openshift/templates/<TEMPLATE_NAME>.json

模板django.json只包含一组最小的组件,可以将Django应用程序放入OpenShift中。

模板django-postgresql.json包含来自django.json的所有组件,以及PostgreSQL数据库服务和Python基本镜像的镜像流。为简单起见,此模板中的PostgreSQL数据库使用临时存储,因此不适用于生产。

添加模板后,您可以转到OpenShift Web控制台,浏览到项目并单击“创建”按钮。从您刚刚添加的其中一个模板创建一个新应用程序。

调整参数值以适合您的配置。大多数情况下,您可以接受默认值,但是您可能希望将GIT_REPOSITORY参数设置为fork的ref以及DATABASE_*与数据库配置匹配的参数。

或者,您可以使用命令行创建新应用程序,假设您的OpenShift部署已定义默认的ImageStream集。这里提供了安装默认ImageStream的说明。如果您现在正在定义ImageStream集,请记住传入正确的集群管理员凭据并在'openshift'命名空间中创建ImageStream:

oc new-app openshift/templates/django.json -p SOURCE_REPOSITORY_URL=<your repository location>

您的应用程序将自动构建和部署。如果没有发生,您可以调试您的构建:

oc get builds# take build name from the command aboveoc logs build/<build-name>

您也可以看到有关部署的信息:

oc describe dc/django-example

在Web控制台中,概述选项卡显示一个服务,默认情况下称为“django-example”,它封装了运行Django应用程序的所有pod。您可以通过浏览服务的IP地址和端口来访问您的应用程序。您可以通过运行来确定这些

oc get svc

没有应用程序模板

模板使您可以完全控制应用程序的每个组件。有时你的应用程序很简单,你不想使用模板。在这种情况下,您可以让OpenShift检查您的源代码并自动为您创建所需的组件:

$ oc new-app centos/python-35-centos7~https://github.com/sclorg/django-eximageStreams/python-35-centos7
imageStreams/django-ex
buildConfigs/django-ex
deploymentConfigs/django-ex
services/django-ex
A build was created - you can run `oc start-build django-ex` to start it.
Service "django-ex" created at 172.30.16.213 with port mappings 8080.

您可以通过浏览服务的IP地址和端口来访问您的应用程序。

日志

默认情况下,您的Django应用程序与gunicorn一起提供,并配置为将其访问日志输出到stderr。您可以使用以下命令查看给定pod的stdout和stderr组合信息:

oc get pods         # list all pods in your projectoc logs <pod-name>

这对于观察应用程序的正确运行非常有用。

特殊环境变量

APP_CONFIG

您可以通过环境变量微调gunicorn配置,该环境变量APP_CONFIG在设置时应参考此处文档记录的配置文件。

DJANGO_SECRET_KEY

使用此存储库中提供的模板之一时,此环境变量会自动生成其值。为了安全起见,请务必使用此参考文件设置一个随机字符串。

一次性命令执行

有时您可能希望在OpenShift中正在运行的应用程序的上下文中手动执行某些命令。您可以进入Python shell进行调试,为Django Admin界面创建新用户,或执行任何其他任务。

您可以使用OpenShift的常规CLI命令完成所有这些操作。为了使它更方便,您可以使用openshift/scripts/run-in-container.sh包含一些调用的脚本到oc命令中。以后,oc CLI工具可能会包含使此脚本过时的更改。

以下是如何特定label的pod中运行命令:

  1. 检查以下命令的输出以查找与给定标签匹配的pod的名称:

     oc get pods -l <your-label-selector>
  2. 在您选择的pod中打开一个shell。由于CentOS和RHEL生成的镜像当前是在工作的,我们需要使用bash来启用任何可能使用的软件集合(在每个bash shell中自动完成)。

     oc exec -p <pod-name> -it -- bash
  3. 最后,执行您需要的任何命令并退出shell。

相关的GitHub问题:

  1. https://github.com/GoogleCloudPlatform/kubernetes/issues/8876

  2. https://github.com/openshift/origin/issues/2001

包装器脚本将上述步骤合并为一个。你可以像这样使用它:

./run-in-container.sh ./manage.py migrate          # manually migrate the database
                                                   # (done for you as part of the deployment process)
./run-in-container.sh ./manage.py createsuperuser  # create a user to access Django Admin
./run-in-container.sh ./manage.py shell            # open a Python shell in the context of your app

如果您的Django pod标有“django”以外的名称,您可以使用:

POD_NAME=name ./run-in-container.sh ./manage.py check

如果有多个副本,您还可以按索引指定POD:

POD_INDEX=1 ./run-in-container.sh ./manage.py shell

或者两者在一起:

POD_NAME=django-example POD_INDEX=2 ./run-in-container.sh ./manage.py shell

数据持久性

您可以在OpenShift项目中部署此应用程序而不使用已配置的数据库,在这种情况下,Django将使用临时SQLite数据库,该数据库将存储在应用程序的容器中,并且只在您重新部署应用程序之前一直存在。

每次部署后,您将获得一个新的,空的SQLite数据库。这对于第一次与OpenShift以及Django的练习来说很好,但是迟早你会希望在部署之间保留你的数据。

为此,您应该添加正确配置的数据库服务器,或要求OpenShift管理员为您添加一个。然后使用oc env更新DeploymentConfig中的DATABASE_* 环境变量来匹配数据库设置。

重新部署应用程序以应用更改,然后再次打开欢迎页面以确保应用程序已成功连接到数据库服务器。



作者:东风微鸣
链接:https://www.jianshu.com/p/c99a70d3ee2b


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消