Python Tech

在Dotcloud上架设Django网站[更新为0.4版]

最近在做的项目需要用到CouchDB和Django,国内没有空间能支持(VPS又麻烦又贵不在考虑范围内),在国外也很难找到。幸好oppih同学推荐了Dotcloud这个网站,现在正在测试期,可以免费申请,支持几乎所有主流的Web编程语言和数据库。而且dotcloud的设置非常简单,每次coding以后运行一条命令就能把整个网站部署上去了。看看这华丽的列表,难道会找不到让你倍感亲切的语言吗?XD

Install

先安装dotcloud,可以在virtulenv里安装,以下是直接在真实环境中安装的方法:

$ sudo easy_install dotcloud
#也可以用pip
Searching for dotcloud
Reading http://pypi.python.org/simple/dotcloud/
……
Finished processing dependencies for dotcloud

记得在终端输入dotcloud命令测试是否安装成功。dotcloud也是利用ssh来连接服务器的,所以pulickey什么的自然要先设置好,作为github的常客相信大家这一步都是没问题的。

首先要创建一个命名空间(namespace),作为应用的名称,必须是唯一的。首次命令运行后会提示输入apikey,还很贴心的告诉了你要去哪找这个apikey。没看到?那我再友情提示一下:登录dotcloud点击上面的Setting就能找到了,是一串很长的加密字符:

$ dotcloud create dmyz
Warning: /home/perchouli/.dotcloud/dotcloud.conf does not exist.
Enter your api key (You can find it at http://www.dotcloud.com/account/settings): r9z7GDowBt7YlQo91rPE:08553355179041b0408a5563c74dad2ed159b21f
Created resp dmyz

这算是建立好一个namespace了,但还没告诉dotcloud这个网站要使用那种语言,所以接下来开始部署(deploy)。

Deploy

使用dotcloud,目录结构很重要,目录设置错误很容易引发404错误。比如django项目文件夹是dmyz,放在dmyz-on-dotcloud目录中,要在dmyz-on-dotcloud下(即django项目文件夹的父文件夹)创建一个requirements.txt文件,申明使用的模块,wsgi.py文件,指定使用的settings,还有dotcloud.yml文件,说明使用的语言:

$ mkdir dmyz-on-dotcloud
$ cd dmyz-on-dotcloud
dmyz-on-dotcloud$ echo django > requirements.txt
$ ls #正确目录结构如下
dmyz dotcloud.yml requirements.txt wsgi.py

一个Django项目就配置结束了,现在只要上传即可。dotcloud的上传命令和git差不多(而且都是ssh方式上传):

dmyz-on-dotcloud$ dotcloud push dmyz
# upload /home/perchouli/workspace/dmyz-on-dotcloud ssh://dotcloud@uploader.dotcloud.com:21122/dmyz
# rsync
……

从弹出的提示可以看到,dotcloud是会下载django程序到服务器上,然后自动安装脚本。和内测时不同,现在会自动生成一个URL地址,在push之后会显示,如果忘了的话可以dotcloud info命令来查看,这是搭建好Django环境后返回的信息:

$ dotcloud info dmyz.www
www:
config:
path: /
static: static
uwsgi_processes: 4
instances: 1
type: python
url: http://54bbccc9.dotcloud.com/

Afterword

利用dotcloud ssh可以连接上服务器,但不能切换成root(不知道密码……)。我顺便测试了一下Web2Py框架,和一个PHP页面,运行正常,但暂时还没有测试过CouchDB数据库和其他我不熟悉的语言(比如Perl)。总之Dotcloud实在是太方便了,终于不用再纠结于Coding – FTP 这个麻烦的过程了,希望正式发布的时候能提供更多的支持,还有,别被墙掉才好(乌鸦嘴)= =||

2011年6月28日更新
今天收到Dotcloud的邮件,这个产品已经开始收费了,专业版价格是99$/mo,免费版不支持SLA,对内测阶段注册的用户免费提供一年的专业版服务。坦白说这个价格没什么竞争力,用免费版做调试倒是很好,是否要继续使用就看自身情况了……

2011年7月13日更新
新版的dotcloud的环境配置更简单了,但之前配置的网站仍然是可以使用的,如果你不升级dotcloud的话。
升级后搭建:http://www.dmyz.dotcloud.com
内测时搭建:http://www.perchouli.dotcloud.com
如果其中某一个打不开,就说明官方更新布置方式了。

24 thoughts on “在Dotcloud上架设Django网站[更新为0.4版]”

  1. 正式收费,版本升到0.4.x,改动较大,deploy被移除,services需要dotcloud.yml配置文件…

    博主有空更新下吧

    1. 确实是更新到0.4.x了,但dotcloud deploy 还是能用…您说的被移除的意思是?…= =?

  2. 正式版改了以后,我升级到0.4.1,重新填了dotcloud.yml,结果之前架在上面的django没法用了,显示404。ssh连进去没有问题,uwsgi也在运行,这是咋回事呢。

    1. 目前常见的包括:
      1.使用nginx.conf设置了rewrite,导致页面重定向错误引起的404,请检查rewrite文件
      2.目录结构不正确引起的404,请参考本文的Deploy一节设置目录结构
      祝好运 =)

      1. 后续,通常只要上传新的应用之后,之前的helloworld页就会被替换,也就是说, http://www.dmyz.dotcloud.com 默认会是你的应用地址,但因为我在内测时已经注册了dmyz.www的应用,所以导致了这个Bug,见官方的回复:

        OK, I understand.

        Due to a rare bug, you actually had two different dmyz.www apps:

        the old one, deployed with the old CLI, accessible through http://www.dmyz.dotcloud.com;
        the new one, deployed with the new CLI, accessible through the hash URL.

        I destroyed the old one manually to avoid further confusion. Everything should be fine now! If you still have issues, tell us so we can fix them.

  3. 想问一下,我上传了一个app,上传过程没有任何错误,但是打开页面是404,请问博主遇到过这样的问题吗?

    1. 请问目录结构是?
      在不进行域名重定向的情况下,最常见的就是目录结构设置不当引起的404错误了。

      1. 是dotcloud push后的最后一段输出 *Deployment finished. Your application is available at the following URLs* 这里是No url found?
        还是说Django的报错?

          1. 请问目录结构是? 如果目录下没有正确的dotcloud.yml会报类似的错误。把运行dotclod push后所有的输出email一份给我吧。

    1. 邮件收到了,报错是 Expected a type dictionary but got a type string in “dotcloud.yml”
      yml格式要求很严格的,你写的是 type:python,冒号之后没有空格,系统就认为这是一个string而不是dict,加个空格修改成 type: python 再试试。

      1. 嗯,加空格后可以了。非常感谢,我想知道你怎么追踪到的报错信息呢?我怎么没找到呢?

        1. 顺便问下在这个服务器怎么调试我的出错信息呢?目前总报404错误,我看过你的那篇博客,感觉哪个都不符合我的。我还没用到静态文件和数据库呢,settings.py没动过它的配置,wsgi.py我对照了也没错。有什么办法把错误信息输出出来呢?

        2. dotcloud有报错了的,你可能看漏了,在你发给我的邮件里,”Screenshot-1.png”这张截图,倒数第四行就是:
          01:39:19 —> Expected a type dictionary but got a type string in “dotcloud.yml”, line 2, colum 5

Leave a Reply

Your email address will not be published. Required fields are marked *