Ubuntu下配置dotCloud环境配置和使用介绍

网上想找点Dotloud到中文资料简单介绍下DotCloud,Google到这篇文章,直接转载了 原文:http://blog.maxiang.net/dotcloud-2nd-generation-paas/54/ DotCloud 第二代平台即服务提供商(platform as a service,PaaS)。它让开发者部署和扩展应用变得非常简单,同时提供重要商业软件所需的灵活和建壮。DotCloud 给予开发者多种语言,数据库,缓存以及消息组件的选择,让他们完全控制技术,而不用考虑系统管理。

如何部署第一个应用 工作流 (workflow) 如下:

  1. 设置账户
  2. 创建 stack (官方称 deployment) – 为代码或数据建立服务
  3. 本地编辑代码
  4. 上传到 DotCloud
  5. 部署成功,或者回到步骤3

设置账户 DotCloud 现在仍需要邀请码注册。可以填写这个表格获得。 如果想要快速获得邀请,那么看这里。Tweet DotCloud 的使用过程,或者赞美下 DotCloud 团队,大家都喜欢听赞扬的。 接下来需要安装 DotCloud CLI。由于 DotCloud 提供的很多功能是旧版本 Python 没有的,因此,检查 Python 版本 (运行”python -V”) 确定为 Python 2.6。如果不是,请更新或者另外安装。 『补充下:如果遇到执行sudo easy_install dotcloud出错,解决方法是 系统 -系统管理-新立得-搜索-easy_install-勾选python-pip -应用即可』 接下来就可以安装 DotCloud CLI, PyPI 让一切都变得简单:

(dotcloud_cli)$ sudo easy_install dotcloud
Searching for dotcloud
Reading http://pypi.python.org/simple/dotcloud/

Reading http://www.dotcloud.com
Best match: dotcloud 0.1.2
Downloading http://...
[some pages of easy_install doing its usual job]
Finished processing dependencies for dotcloud

尝试运行 CLI 不带任何命令参数:首次运行的时候,会要求输入 API key。可以在 DotCloud 的账户设置页找到 (account setting page) API key (先打开页面会更方便些):

$ dotcloud
Warning: /home/jpetazzo/.dotcloud.conf does not exist.
Enter your api key (You can find it at http://www.dotcloud.com/account/settings): ...
error: usage: dotcloud [-h]

 
{status,info,run,logs,deploy,setup,list,alias,ssh,destroy,push,rollback,create,restart}
...

建立应用命名空间 (application namespace) 你能够再 DotCloud 部署多种服务:PHP, MySQL, Python, Redis… 你可能多次部署其中的一些服务。每一个服务都有自己的名称,分两部分(参看 FAQ) 在部署服务之前,你需要建立你的应用命名空间。官方文档使用 “ramen” 作为部署名称。每一个部署名称必须是唯一的。如果是已经存在相同的部署名称,会得到错误提示,那么你就需要更换不同名称的。

$ dotcloud create ramen
Created "ramen"

我们已经准备好了。

部署第一个服务 DotCloud 允许建立服务,因为它们是部署的一部分。一个服务是执行特定任务的一个组件:数据库,web 应用,消息对列,后台进程等等。 看看都有那些可以使用的服务:

$ dotcloud deploy
error: usage: dotcloud deploy [-h] -t

                       {java,mongodb,mysql,nodejs,php,php-worker,postgresql,
                        python,python-worker,rabbitmq,redis,ruby,ruby-worker,
                        smtp,static}
                       [-c '{"arg1":"value1", ...}']
                       namespace.deployment

以上的服务列表在不断增加,不要惊讶看到了其它服务,或者服务名称的该面。关于将要提供的服务,可以看 components/roadmap。 让我们部署一个简单的 PHP 服务。需要设定:

  • 服务类型 - 使用 PHP;这个服务使用 nginx 处理静态文件, PHP FastCGI Process Manager 管理所需的 PHP 进程。
  • 服务名称 - 格式为 <部署名称>.<服务名称> (.);如上所述,部署名称只用来将你的服务归类,可以是任何名称 (没有被其他人使用);服务名称选择也完全取决于你。 让我们先使用 “www” 作为服务名称。
$ dotcloud deploy -t php ramen.www
Created "ramen.www"

访问 http://www.ramen.dotcloud.com/ 显示 phpinfo 页,是默认随 PHP 服务安装的。 如果是错误页面或空白页面,可能说明你的服务还有启动。可通过 “dotcloud info” 查看服务状态。

$ dotcloud info ramen.www
config:
    path: /
    static: static
deployment: ramen
name: ramen.www
ports:
-   name: ssh

    url: ssh://dotcloud@www.ramen.dotcloud.com:1060
-   name: http
    url: http://www.ramen.dotcloud.com/
type: php

将代码发布到服务 你不必在服务器上修改代码:修改本地的复本,当确定完成时,发布到服务。工作流与下面的非常相似:
* 编辑本地文件,使用 FTP 客户端上传;
* 编辑本地文件,提交到版本控制系统 (version control system); 让我们来进行一个实例 建立应用目录:

$ mkdir myapp
$ cd myapp

在 “myapp” 目新建 index.php 文件:

<?php
echo "40 + 2 = ".(40+2);

?>

发布代码到服务(注意:使用你自己的部署名称和服务名称 (deployment and service) ):

myapp$ dotcloud push ramen.www .
# rsync . code
sending incremental file list
created directory code
./
index.php
 

sent 121 bytes  received 34 bytes  103.33 bytes/sec
total size is 32  speedup is 0.21

Scheduling build
Build started. To read the build logs:
$ dotcloud logs --build ramen.www

push 命令将上传你的代码到服务,并执行一些编译步骤 (对于 PHP,没有什么需要做的) 浏览器带开服务地址 (mine is http://www.ramen.dotcloud.com/):就会看到 40+2=42.

在 dotCloud 使用 git 或 mercurial 当运行 “dotcloud push ramen.www myapp” 时,会发生不同的事情: 如果 “myapp” 是 mercurial repository (如包含 ”.hg” 子目录), 推送到 dotCloud 与 “hg push” 完全相同。 如果 “myapp” 是 a git repository (如包含 ”.git” 子目录), 推送到 dotCloud 与 “git push” 完全相同。 如果以上均不是,将会上传所有文件。 这样的好处是什么? 如果你使用 git/mercurial repository,你必须提交所有的改变; 任何明显的改变不会影响 dotCloud (由于使用 “git push”/”hg push”). 如果你不想每次发布到 dotCloud 时都要提交,可以照如下所做: 建立 “myapp” 目录; 移动 hg/git repository 作为子文件夹 (e.g. “myapp/repository”); 在 “myapp” 目录,创建 “dotcloud_build.yml” 文件,包含如下的 (替换 “www” 你的服务名):

www:
    approot: repository

再进行 “dotcloud push myapp.www myapp” (而不是 “myapp/repository”). 因为 “myapp” 本身并不是 repository,“完全同步” 算法会包含没有提交的改变。。 关于 dotcloud_build.yml 文件的详细信息,参看 ../build。

配置数据库服务 让我们来看如何使用 MySQL 数据库。 部署 MySQL 服务:

myapp$ dotcloud deploy -t mysql ramen.db
Created "ramen.db"

使用“dotcloud info” 获得详细信息:

myapp$ dotcloud info ramen.db
config:
    mysql_password: ^jq+7k}>nDdVk/dIq|OG
deployment: ramen
name: ramen.db
ports:
-   name: mysql
    url: mysql://root:^jq+7k}>nDdVk/dIq|OG@db.ramen.dotcloud.com:1061

-   name: ssh
    url: ssh://dotcloud@db.ramen.dotcloud.com:1062
type: mysql

数据库参数在 mysql:// URL。没有什么特殊的,但是有可能你的数据库端口不是标准端口 (这里是 1061 而不是 MySQL 通常的 3306)。 写一个新的 index.php 文件来访问数据库。

<?php
$db = mysql_connect("db.ramen.dotcloud.com:1061",
                     "root", "^jq+7k}>nDdVk/dIq|OG");

$result = mysql_query("SELECT 40+2");
$row = mysql_fetch_row($result);

$column = $row[];
echo "SQL says 40 + 2 = ".$column;

?>

发布新代码到服务:

$ dotcloud push ramen.www .
...

检查日志 检查日志如 PHP 错误及警告,通过 “dotcloud logs ramen.www”。



关于 McKelvin

a hacker who's interested in `music computing` and `network security`.
此条目发表在 Interest, Work 分类目录。将固定链接加入收藏夹。