应用部署
应用部署
本文档从更高的层次介绍了如何在tsuru上面应用部署是如何工作的。
准备应用
如果你遵守12 Factor
原则,你不需要做任何修改就可以在tsuru上部署。下面是应用部署在tsuru云上需要做的事情:
- 从语言层面和操作系统层面定义好的依赖
- 通过环境变量做好外部资源配置
- 使用Procfile描述如何运行你的应用
接下来我们稍微深入下这些话题。
1. 依赖
现在,实现的比较好的应用中依赖的定义都很清晰。在Python中,所有的依赖都写在requirements.txt或者类似的文件,Ruby中是Gemfile,Node.js中是package.json,以此类推。有些依赖还存在操作系统级别的依赖,像Ruby的Nokogiri gem或者MySQL-Python包,tsuru的单元启动时都很干净,所以你需要在一个名为requirements.apt的文件中声明这些操作系统依赖。这些文件中,应当像下面的列表一样声明包:
python-dev
libmysqlclient-dev
2. 配置环境变量
部署不同的所有地方(不同的环境,比如开发或者产品环境)都应当通过环境变量管理。tsuru很重视这个原则,所以它使用的所有服务需要的配置都是通过环境变量去设置,这样在tsuru上部署不同的环境就会很轻松。比如,如果要使用tsuru上的服务,如MySQL,当你把应用绑定到服务时,tsuru会从service API收到连接MySQL的所需要的设置,如用户名,密码,地址和数据库名。有了这些信息,tsuru会在应用所在的每个单元中对应的环境变量设置这些值。这些变量的名字由服务提供,在这个例子中,是MySQL服务。
让我们来看看在tsuru上部署的Django应用的设置:
import os
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": os.environ.get("MYSQLAPI_DB_NAME"),
"USER": os.environ.get("MYSQLAPI_DB_USER"),
"PASSWORD": os.environ.get("MYSQLAPI_DB_PASSWORD"),
"HOST": os.environ.get("MYSQLAPI_HOST"),
"PORT": "",
}
}
你可能会问自己,“我怎么才能知道这些变量名字?”,不过别害怕!在tsuru上绑定应用时,它会返回运行所有服务要求tsuru在应用的单元上设置的所有变量(没有值,因为你不需要它们),如果你在命令行历史中丢失了这些环境变量,别担心!你总是可以通过<insert command here>去检查你的应用使用的服务,都生成了哪些变量。