Openshift快速入门:Django
这是一个Django项目,您可以将其用作开发自己的项目并将其部署在OpenShift集群上。
本文档中的步骤假定您可以访问可以部署应用程序的OpenShift部署。
为你做了什么
这是一个最小的Django 1.11项目。它是使用以下步骤创建的:
创建一个virtualenv
手动安装Django和其他依赖项
pip freeze > requirements.txt
django-admin startproject project .
更新
project/settings.py
配置SECRET_KEY
,DATABASE
和STATIC_ROOT
条目./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数据库执行的。如果为构建提供了备用数据库凭据,则测试可能会对该数据库进行不必要的更改。
本地开发
要在开发计算机中运行此项目,请按照下列步骤操作:
(可选)创建并激活virtualenv(您可能希望使用virtualenvwrapper)。
确保您的计算机上有可执行文件
pg_config
。你可以用which pg_config
来检查。如果没有,请使用以下方法之一安装依赖项。
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中运行命令:
检查以下命令的输出以查找与给定标签匹配的pod的名称:
oc get pods -l <your-label-selector>
在您选择的pod中打开一个shell。由于CentOS和RHEL生成的镜像当前是在工作的,我们需要使用
bash
来启用任何可能使用的软件集合(在每个bash shell中自动完成)。oc exec -p <pod-name> -it -- bash
最后,执行您需要的任何命令并退出shell。
相关的GitHub问题:
包装器脚本将上述步骤合并为一个。你可以像这样使用它:
./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