应用部署

应用部署

本文档从更高的层次介绍了如何在tsuru上面应用部署是如何工作的。

准备应用

如果你遵守12 Factor原则,你不需要做任何修改就可以在tsuru上部署。下面是应用部署在tsuru云上需要做的事情:

  • 从语言层面和操作系统层面定义好的依赖
  • 通过环境变量做好外部资源配置
  • 使用Procfile描述如何运行你的应用
    接下来我们稍微深入下这些话题。

1. 依赖

现在,实现的比较好的应用中依赖的定义都很清晰。在Python中,所有的依赖都写在requirements.txt或者类似的文件,Ruby中是Gemfile,Node.js中是package.json,以此类推。有些依赖还存在操作系统级别的依赖,像Ruby的Nokogiri gem或者MySQL-Python包,tsuru的单元启动时都很干净,所以你需要在一个名为requirements.apt的文件中声明这些操作系统依赖。这些文件中,应当像下面的列表一样声明包:

  1. python-dev
  2. libmysqlclient-dev

2. 配置环境变量

部署不同的所有地方(不同的环境,比如开发或者产品环境)都应当通过环境变量管理。tsuru很重视这个原则,所以它使用的所有服务需要的配置都是通过环境变量去设置,这样在tsuru上部署不同的环境就会很轻松。比如,如果要使用tsuru上的服务,如MySQL,当你把应用绑定到服务时,tsuru会从service API收到连接MySQL的所需要的设置,如用户名,密码,地址和数据库名。有了这些信息,tsuru会在应用所在的每个单元中对应的环境变量设置这些值。这些变量的名字由服务提供,在这个例子中,是MySQL服务。

让我们来看看在tsuru上部署的Django应用的设置:

  1. import os
  2. DATABASES = {
  3. "default": {
  4. "ENGINE": "django.db.backends.mysql",
  5. "NAME": os.environ.get("MYSQLAPI_DB_NAME"),
  6. "USER": os.environ.get("MYSQLAPI_DB_USER"),
  7. "PASSWORD": os.environ.get("MYSQLAPI_DB_PASSWORD"),
  8. "HOST": os.environ.get("MYSQLAPI_HOST"),
  9. "PORT": "",
  10. }
  11. }

你可能会问自己,“我怎么才能知道这些变量名字?”,不过别害怕!在tsuru上绑定应用时,它会返回运行所有服务要求tsuru在应用的单元上设置的所有变量(没有值,因为你不需要它们),如果你在命令行历史中丢失了这些环境变量,别担心!你总是可以通过<insert command here>去检查你的应用使用的服务,都生成了哪些变量。

原文: http://doc.oschina.net/tsuru-paas?t=52832