云帮支持部署和伸缩Python应用程序。无论您喜欢DjangoFlask等框架,云帮都可以使用。

一、代码识别

云帮通过检测到您代码的根目录下存在requirements.txt文件而识别您的应用为Python应用。您可以通过命令生成 requirements.txt 文件,命令如下:

copy



# icon/buttons/copy

  1. pip freeze > requirements.txt

演示应用程序(python-demo)已经有一个requirements.txt,它的内容如下:

  1. Flask==0.12.1
  2. Jinja2==2.9.6
  3. Werkzeug==0.12.1
  4. gunicorn==19.7.1

requirements.txt文件列出应用程序依赖关系及其版本。部署应用程序时,云帮会读取此文件,并使用命令安装Python依赖关系。

copy



# icon/buttons/copy

  1. pip install -r requirements.txt

提示:

若程序没有依赖关系,可使requirements.txt为空文件。

二、版本选择

云帮默认使用Python2.7.15版本,您也可以通过在根目录下增加一个 runtime.txt文件来指定版本:

  1. $ cat runtime.txt
  2. python-3.4.3

2.1 推荐的python版本

  • Python-2.7.15
  • Python-3.6.6

三、工具库

系统使用以下的库来管理和解决 Python 依赖,您不可以自定义它们:

  • setuptools 35.0.2
  • pip 9.0.1

四、构建(build)

系统会在您代码部署的环境运行以下命令来解决依赖:

  1. $ pip install -r requirements.txt --allow-all-external

构建时支持自定义PIP源,需配置环境变量,否则默认中科大镜像源:

  1. 变量名:变量值
  2. BUILD_PIP_INDEX_URL:https://pypi.tuna.tsinghua.edu.cn/simple

五、启动命令

需要您在代码根目录创建 Procfile 文件来指定启动应用的命令,并写入如下内容:

copy



# icon/buttons/copy

  1. web: gunicorn hello:app --log-file - --access-logfile - --error-logfile -

提示:

web : 定义该应用的服务类型为web 平台会自动将该应用添加到全局负载均衡中。后续会添加其他类型的应用。

gunicorn : Python WSGI HTTP Server for UNIX 详细设置文档参见 命令行参

六、Django 静态文件支持

由于 Django 的静态文件支持(CSS、图片等)不是很容易配置而且不方便调试,这里给出一个示例:

settings.py

  1. # Static files (CSS, JavaScript, Images)
  2. # https://docs.djangoproject.com/en/1.7/howto/static-files/
  3. BASE_DIR = os.path.dirname(os.path.abspath(__file__))
  4. STATIC_ROOT = 'staticfiles'
  5. STATIC_URL = '/static/'
  6. STATICFILES_DIRS = (
  7. os.path.join(BASE_DIR, 'static'),
  8. )

默认情况下系统会在构建 Django 应用时自动执行以下命令尝试检测(—dry-run)静态文件配置是否正确:

  1. $ python manage.py collectstatic --dry-run --noinput

如果此命令没有出错,将执行真正的命令拷贝静态文件到 STATIC_ROOT 目录:

  1. $ python manage.py collectstatic --noinput

用户可以手工禁用上述特性,只需要在应用的环境变量里配置 DISABLE_COLLECTSTATIC 的值为 1。

七、Whitenoise

默认情况下,Django 在生产模式下不支持托管静态文件,我们推荐在生产环境下使用 Whitenoise项目托管静态文件作为最佳实践,以下是具体的安装和配置方式:

参考文档: 具体细节请查看 Django 文档的 Managing static filesDeploying static files 章节。

7.1 安装 Whitenoise

  1. $ pip install whitenoise
  2. ...
  3. $ pip freeze > requirements.txt

settings.py

  1. # Simplified static file serving.
  2. # https://warehouse.python.org/project/whitenoise/
  3. STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

wsgi.py

  1. from django.core.wsgi import get_wsgi_application
  2. from whitenoise.django import DjangoWhiteNoise
  3. application = get_wsgi_application()
  4. application = DjangoWhiteNoise(application)

八、示例代码