Pages

Monday, 3 August 2015

在webfaction.com的虚拟主机上一键部署Django app


Webfaction是一款聪明体贴的虚拟主机(除了hosting应用外,我每天都拿来Fuck G/F/W),对程序员友好是她的一大卖点。本文以部署Django应用为例,看看Webfaction是如何工作的。
在开始之前,先简单介绍一下Webfaction对网络应用所做的一些定义:域名(Domain)、应用程序(Application)、站点(Site)。
域名(Domain):指常规的域名,一个域名只可以对应一个站点(Site),但一个站点(site)可以绑定N个域名。webfaction同时可提供域名托管服务,只要把域名的NameServer指向webfaction的名字服务器即可,webfaction提供无限多个子域名哦。
应用程序(Application) :应用程序表示一个Web应用,如一个使用Django写的Blog,或是一个php的bbs。应用程序必须成为网站才可以被访问,所以建立完应用后,webfaction并不会马上运行。一个Web应用,可以用于多个站点。
站点(Site) :站点就是网站,可以通过域名表现出来的,如www.fallever.com就是一个站点,iloveu.fallever.com又是一个站点。
其实这些概念的关系很简单, 只是上面可能讲复杂了,看不懂不要紧,继续看就是了。

建立一个Django应用程序

通过https://panel.webfaction.com登录到控制台,点击 “Domains / websites -> Applications”进入应用程序列表。

进入应用程序列表后,在列表的右下角,有个新增应用程序的小图标,点击开始新建一个应用程序。
创建新应用
接下来会来到创建应用程序页面,我们需要填写一个表单,表单有几个项:
Name:填入应用的名称,如example。
App type:嘿,这里是魔术发生的地方,webfaction为我们准备了近百种内置应用程序模板,我们创建应用程序所要做的仅仅是选择应用的模板,然后点击创建即可。
App doc:这是对所选择应用类型的说明文档。
Extra Info:附加信息,依所选的应用类型而定。
创建应用表单
我们现在要创建一个名叫example的Django应用。那么,我们输入应用名字,接着,点击App type展开应用类型列表。OMG!
当Django就占满了一页!你想要使用任何版本的Django都可以,webfaction提供的Django部署方式有包含但不限两种:Django + mod_wsgi和Django + mod_python。
当然,除了Django以外,webfaction提供大量python和python以外的web应用框架和应用程序,如CherryPy,TurboGear,Rails,PHP,WordPress,Joomla,Durpal, 甚至Plone,Zope全系列。除此之外,还可以一键安装Trac,subversion,AWStats等协合工具,源码控制系统和网页统计应用。更 重要的是,webfaction不仅能做这些,你自己可以在上面跑列表里面没有的应用,如写一段代码监听端口,或者是跑Java虚拟机!这,正是 webfaction吸引我的一个重要原因。
有图有真相:
应用类型
最后,我选择了使用Django最新版本的代码与mod_python来架设新应用。现在点击Create来创建吧!
应用详情
千真万确,创建一个Django应用并让它跑起来就那么简单:填个名字,选个模板,点个Create。想起以前在其他主机上面部署个Django应用累得够呛,版本稍有与服务器的不一样的话,麻烦更大。而在webfaction,这一切都不用我担心。

创建一个子域名

应用是建立起来了,怎么样访问呢?那得有个域名!没错。得配个域名。
webfaction会给每一位用户一个二级域名,那就是“用户ID.webfactional.com”,比如我的二级域名就是“jeffjie.webfactional.com”,我们可以在此基础上建立三级域名来访问我们刚才建立的应用。
回到webfaction控制面板,我们通过点击”Domain / websites -> Domains”来访问域名列表。
域名列表
在域名列表里有一个默认的域名了,那就是”用户ID.webfactional.com”。点击该行右边的编辑按钮进行域名编辑页面。
编辑域名
在此,我们可以给一个域名添加无限多个子域名,而这一次,我们按照上图的指示,增加一个子域名,名叫example,也就是希望将来可以通过example.jeffjie.webfactional.com来访问到刚才创建的应用。

创建一个站点

有同学可能不禁要问,应用有了,域名有了,可以访问了吧?答案是差不多矣,只差绑定。
所谓的站点,不过是域名与应用的关系体现,域名与应用是多对多的关系,站点其实就像一张中间表,应用映射到不同的域名就是不同的站点了。webfaction这样的设计很聪明,极大程度地复用Web应用。
肺话不多讲,直指创建站点吧!还是在控制面板里,通过”Domain / websites -> Websites” 来访问站点列表。在列表右下方点击创建站点图标进入创建页面:
创建站点
填写表单来创建站点,站点命令还是叫example吧。Ip是指你正在用的虚拟主机地址,不用管。选择该站点相应的域名,可以多选,这里我们选择刚建好的example.jeffjie.webfactional.com。
值得注意的是Site apps,这里配置的是路径与应用程序的关系,如图所配置,代表着用户访问根目录时,所访问的是example应用,可以建多个这样的路径与应用的映射, 例如我要为站点加一个blog,我会配一个”/blog”的路径,指向一个wordPress应用。
最后,还是点击Create按钮,完成最后一步。

访问站点

现在马上看看我们努力的成果吧!访问http://example.jeffjie.webfactional.com 看看。。
咦,怎么是这个结果呢?
没配置好
是的,webfaction的域名绑定可能还没见效,稍等一两分钟就可以了。(同学们如果现在访问http://example.jeffjie.webfactional.com的话还会是这样,因为我写完这篇文章后马上删除了这个站点,减少资源占用)。
一两分钟后,再访问一次,结果变成了Django的欢迎页面:
首页

都发生了什么事

简简单单几步操作搞定了Django应用的安装,里面都有些什么样的玄机?其实很简单,Webfaction只是把一些脏活累活包揽了罢了。咱们SSH上去看看。
ssh
Webfaction在用户目录下的webapps下面创建了一个example应用,下面有四个文件夹,apache2,bin,lib,myproject。
apache2:是的,webfaction是使用apache来做为动态网页服务器,最外层的服务器是nginx。它给每个应用分配一个apache线程,可以独立启动,停止和重启。
lib:存放关于该应用的库,如python,Django源码等,正因为这样才使得每个应用可以有自己特殊的运行环境。
myprojects:webfaction创建的默认Django project。以后正式部署你自己的应用时,记得要修改apache2/conf/httpd.conf里面的内容。
这里也截一个http.conf的屏吧,算得上是经典的mod_python配置了。
配置

小结

Webfaction的特点就是方便,对程序员特别友好,使用webfaction后,我再没有在部署方面浪费太多工夫,这对我们说,已经是很大程度解放了。
如上面所讲的,不仅仅是Django哦,很多现在流行的应用或框架都可以容易地安装或部署。如果你看了觉得心动,那么,加入我们的队伍吧
from http://www.jeffkit.info/2009/11/484/