如何运行一个应用程序Meteor安全地与Sandstorm在Ubuntu 14.04

Meteor是JavaScript的一个框架,允许Web开发人员编写一次JavaScript代码和重用客户端和服务器端。Sandstorm是个人服务器的开源平台,这意味着它可以用来安装许多不同的应用程序在一台服务器上的一个非常容易使用的界面。在本教程中,你将看到如何安装应用程序,然后创建多个应用实例。

合作编写与Sandstorm

介绍

Meteor是一个JavaScript框架,它允许Web开发人员编写一次JavaScript代码,并在客户端和服务器端都重用它。 另一个教程将介绍如何部署Meteor应用在使用Nginx的Upstart ,但本教程涵盖了部署Meteor应用不同的方法:创建并运行一个Sandstorm包。

Sandstorm是个人服务器的开源平台,这意味着它可以用于在一个服务器上安装许多不同的应用程序,并具有非常易于使用的界面。 一个prevoius教程展示了如何安装Sandstorm运行像WordPress和链接到MediaWiki应用; 本教程将介绍如何运行自定义应用程序,就像您自己编写的一样。

在Sandstorm中,安装应用程序可让您使用该应用程序创建新文档。 每个文档是应用程序的一个独立的运行实例,并且每个文件(其中Sandstorm调用 )供电的代码是默认私人。 这是一个意义,在Sandstorm使得它很容易安全地运行Meteor应用程序; Sandstorm处理访问控制。 在本教程中,您将了解如何安装应用程序,然后创建多个应用程序实例。

有多个用例想要创建Sandstorm应用程序。 第一种用例是用于个人或公司使用。 这意味着打包一个应用程序并将其部署到您或您公司的Sandstorm服务器上,并利用Sandstorm的沙盒和访问控制。 另一个用例是创建一个Sandstorm应用程序发布它为其他Sandstorm用户的。 例如,这可以被公布apps.sandstorm.io ,但你也可以自己发布。 用户将知道应用程序的开发人员无法读取其数据。 本教程适用于这两种情况。

先决条件

要遵循本教程,您需要:

  • 本地计算机,将用于构建Sandstorm包。 此计算机需要:

    • 是一个至少有1GB RAM的64位机器。 本教程包含Ubuntu 14.04和Mac OS X的说明。
    • 已安装的Git,这将被用来下载vagrant-spk和我们的示例应用程序。 您可以按照安装的Git 这个混帐教程的Ubuntu 14.04,或Git的Mac安装指南的OS X.
    • 已安装放浪,你可以从做流浪的安装页面 Vagrant用于创建Sandstorm在开发模式下运行的虚拟机。
    • 有一些虚拟化软件,比如VirtualBox的 ,安装。
  • 一个Ubuntu的14.04Droplet与Sandstorm安装测试你的包,你可以通过下面的做这前面的教程

  • (可选)您要打包的应用程序,使用Meteor框架编写。 本教程显示了使用Meteor提供的示例待办事项列表应用程序的步骤,如果您没有要使用的其他应用程序。

第1步 - 下载示例应用程序和vagrant-spk

在这一步中,我们将下载我们将创建一个Sandstorm包为Meteor应用程序,并且还Sandstorm的包装工具, vagrant-spk

首先,创建并进入新目录projects ,以避免与新文件得到堆满你的home目录。

mkdir ~/projects
cd ~/projects

我们将使用本教程中的示例应用程序是简单待办事项 ,由Meteor所提供的应用程序。 但是,如果要使用自己的Meteor应用程序,也可以跳过此步骤。

通过从Meteor的GitHub克隆它来下载此应用程序。

git clone https://github.com/meteor/simple-todos.git

接下来,我们将安装vagrant-spk (这是Sandstorm的包装工具)Sandstorm的GitHub上。

git clone git://github.com/sandstorm-io/vagrant-spk

移动到vagrant-spk目录。

cd vagrant-spk

最后,创建一个符号链接到二进制文件/usr/local/bin ,使vagrant-spk命令可用。

sudo ln -s $PWD/vagrant-spk /usr/local/bin

安装后,你可以检查是否vagrant-spk通过运行安装:

vagrant-spk --help

您应该会看到以下消息:

usage: vagrant-spk [-h]
                       [--work-directory WORK_DIRECTORY]
                       {destroy,dev,global-status,halt,init,pack,publish,setupvm,ssh,up}
                       [command_specific_args [command_specific_args ...]]
. . .

第2步 - 运行Sandstorm VM

在本节中,我们将创建实际的Sandstorm包。 首先移动到本地机器上的应用程序目录。

cd ~/projects/simple-todos

然后,设置将用于构建软件包的虚拟机。

vagrant-spk setupvm meteor

您将看到类似于以下的输出:

Initializing .sandstorm directory in /home/sammy/projects/simple-todos/.sandstorm
Creating /home/sammy/.sandstorm to hold developer keys.
Creating /home/sammy/.sandstorm/caches to hold sandstorm installer caches.

接下来,启动虚拟机。

vagrant-spk up

此命令需要一些时间才能执行。

第3步 - 创建包定义

在本节中,我们将实际打包Meteor应用程序。

首先,创建Sandstorm将使用的包定义。

vagrant-spk init

此命令将创建一个名为sandstorm-pkdef.capnp目录.sandstorm 我们需要对此文件进行一些更改。

连接到Vagrant VM。

vagrant-spk ssh

然后打开/opt/app/.sandstorm/sandstorm-pkdef.capnp使用nano或您喜爱的文本编辑器。

nano /opt/app/.sandstorm/sandstorm-pkgdef.capnp

查找以下部分:

. . .
    # This manifest is included in your app package to tell Sandstorm
    # about your app.

    appTitle = (defaultText = "Example App"),

    appVersion = 0,  # Increment this for every release.
. . .

在更改值appTitle线“待办事项”。

. . .
    # This manifest is included in your app package to tell Sandstorm
    # about your app.

    appTitle = (defaultText = "Todo"),

    appVersion = 0,  # Increment this for every release.
. . .

然后保存并关闭文件。

第4步 - 添加Sandstorm登录到应用程序

现在,Todos应用程序具有与Sandstorm单独的身份验证。 但是,当我们登录到Sandstorm时,我们希望使用Todos应用程序登录,因此我们需要向Meteor应用程序添加单独的软件包。

当仍然连接到VM时,切换到主软件包目录。

cd /opt/app

接下来,我们将添加kenton:accounts-sandstorm封装到应用程序Meteor,这暴露了当前Sandstorm账户Meteor应用。

meteor add kenton:accounts-sandstorm

您现在可以退出与Vagrant VM的连接。

exit

在这个Todo应用程序的情况下,页面仍然包含登录和注销按钮,这是不必要的。 接下来,我们将删除它们。

打开该文件simple-todos.htmlproject/simple-todos使用您喜欢的文本编辑器的目录。

nano simple-todos.html

查找以下部分并删除loginButtons线,下面红色高亮显示。 然后保存并关闭文件。

. . .
        Hide Completed Tasks
      </label>

      {{> loginButtons}}

      {{#if currentUser}}
. . .

接下来,打开文件simple-todos.js

nano simple-todos.js

像以前一样,删除以红色突出显示的以下行,然后保存并关闭文件。 确保不要删除最后的大括号。

. . .
    "click .toggle-private": function () {
      Meteor.call("setPrivate", this._id, ! this.private);
    }
  });

  Accounts.ui.config({
    passwordSignupFields: "USERNAME_ONLY"
  });
}
. . .

现在该应用程序使用Sandstorm帐户,而不是Meteor帐户。

第5步 - 测试开发中的应用程序

vagrant-spk有一个dev命令,这使得在开发模式SandstormVM上运行,从而提供你的包。 因此,运行应用程序的目录命令(在这种情况下, simple-todos )。

vagrant-spk dev

当它完成初始化时,它将打印以下消息:

App is now available from Sandstorm server. Ctrl+C to disconnect.

这意味着您现在可以在参观Sandstormhttp://local.sandstorm.io:6080/ 您现在可以通过与开发帐号按下登录。

登录屏幕

然后点击爱丽丝(管理员)。 这将使用管理员帐户登录,这将允许您创建新实例。 您可以保留默认值确认您的个人资料页,然后按紫色的继续按钮不做改变。

接下来,点击待办事项应用程序,然后单击创建新实例

新实例

第6步 - 创建和上传SPK

创建Sandstorm包的最后一步是创建一个包含应用程序,Meteor的副本以及应用程序的任何进一步依赖关系的SPK文件。 这个步骤是由全自动meteor-spk工具。

首先,按停止开发服务器CTRL+C 然后,打包应用程序。

vagrant-spk pack todo.spk

这将在当前目录中创建一个SPK文件。

另一方面,在我们的例子中,SPK文件大约是11 MB。 Sandstorm应用程序通常是少数兆字节,即使它们包含应用程序和所有依赖项,包括任何操作系统依赖项。

完成应用程序开发后,需要先关闭虚拟机,然后再创建第二个应用程序。 因此,请执行以下命令:

vagrant-spk halt

如果你想继续无论出于何种原因的发展,你可以简单地运行vagrant-spk up

第7步 - 创建待办事项列表

在本节中,我们将在您的Droplet上的Sandstorm服务器上安装该软件包,并创建一个新的应用程序实例。

登录到您的DropletSandstorm,你会看到在您的主屏幕的应用程序上传按钮。 单击该按钮,然后通过您在第6步中创建的Web浏览器选择SPK文件。

Sandstorm上传应用

这将标记的Todo你Sandstorm主屏幕上创建一个新的项目。 在Sandstorm中安装应用程序可让您创建新实例(或文档)。 因此,单击该项目的Todo。 这将带您到以下屏幕:

Todo应用程序屏幕

单击创建新实例 这将带你进入一个新的Todo实例,由Todo列表应用程序的唯一实例提供支持。

待办事项列表

每个实例被称为Sandstorm一粒 此应用程序实例是您的Sandstorm用户独有的。 如果您尝试在Web浏览器中打开一个隐私浏览窗口中的网址,你会得到一个禁止错误。 您可以使用蓝色共享按钮在Sandstorm顶部栏创建一个共享的链接,如果你希望别人能够访问待办事项列表。

您可以点击左上角的Sandstorm标志,留下此待办事项列表。 一旦你这样做,你会看到你可以创建另一个Todo列表。 您输入到一个Todo列表实例中的任何数据完全独立于其他实例。

结论

我们已经看到了如何获取在Meteor中编写的代码库,并将其打包为Sandstorm。 它依赖Sandstorm进行访问控制,并且可以轻松地与他人共享。 要了解更多关于Meteor,请访问他们的网站 要了解更多关于Sandstorm,请访问sandstorm.io