如何在Ubuntu14.04上使用Sandstorm安全地运行Meteor应用程序
与 Sandstorm 合作编写
介绍
Meteor 是一个 JavaScript 框架,它允许 Web 开发人员编写一次 JavaScript 代码并在客户端和服务器端重用它。 另一个教程描述了 如何使用 Nginx 和 Upstart 部署 Meteor 应用程序,但本教程介绍了部署 Meteor 应用程序的不同方法:创建和运行 Sandstorm 包。
Sandstorm 是个人服务器的开源平台,这意味着它可以用于在一台服务器上安装许多不同的应用程序,并且具有非常易于使用的界面。 之前的教程展示了 如何安装 Sandstorm 以运行 WordPress 和 MediaWiki 等应用程序; 本教程介绍如何运行自定义应用程序,就像您自己编写的应用程序一样。
在 Sandstorm 中,安装应用程序可让您使用该应用程序创建新文档。 每个文档都是应用程序的一个单独运行实例,支持每个文档的代码(Sandstorm 称之为 grain)默认是私有的。 这就是 Sandstorm 可以轻松安全地运行 Meteor 应用程序的意义所在。 Sandstorm 处理访问控制。 在本教程中,您将了解如何安装应用程序,然后创建多个应用程序实例。
想要创建 Sandstorm 应用程序有多个用例。 第一个用例是供个人或公司使用。 这意味着打包一个应用程序并将其部署在您或您公司的 Sandstorm 服务器上,并利用 Sandstorm 的沙盒和访问控制。 另一个用例是创建 Sandstorm 应用程序以将其发布给其他 Sandstorm 用户。 例如,这可以在 apps.sandstorm.io 上发布,但您也可以自己分发。 用户将知道应用程序的开发人员无法读取他们的数据。 本教程适用于这两种情况。
先决条件
要遵循本教程,您将需要:
- 一台本地计算机,将用于构建 Sandstorm 包。 这台电脑需要:
- 成为至少具有 1GB RAM 的 64 位计算机。 本教程包含 Ubuntu 14.04 和 Mac OS X 的说明。
- 安装 Git,它将用于下载
vagrant-spk
和我们的示例应用程序。 您可以按照 this Git tutorial for Ubuntu 14.04 或 the Git Mac installation guide for OS X 安装 Git。 - 已安装 Vagrant,您可以从 Vagrant 的安装页面 进行安装。 Vagrant 用于创建 Sandstorm 在开发模式下运行的虚拟机。
- 安装一些虚拟化软件,例如 VirtualBox。
- 一个安装了 Sandstorm 的 Ubuntu 14.04 Droplet 来测试你的包,你可以按照这个 previous tutorial 来做。
- (可选)您要打包的应用程序,使用 Meteor 框架编写。 如果您没有要使用的其他应用程序,本教程将展示使用 Meteor 提供的示例待办事项列表应用程序的步骤。
第 1 步 — 下载示例应用程序和 vagrant-spk
在这一步中,我们将下载 Meteor 应用程序,我们将为其创建 Sandstorm 包,以及 Sandstorm 的打包工具 vagrant-spk
。
首先,创建并移动到一个名为 projects
的新目录,以避免您的主目录被新文件弄得杂乱无章。
mkdir ~/projects cd ~/projects
我们将在本教程中使用的示例应用程序是 simple-todos,这是 Meteor 提供的应用程序。 但是,如果您想使用自己的 Meteor 应用程序,也可以跳过此步骤。
通过从 Meteor 的 GitHub 克隆来下载此应用程序。
git clone https://github.com/meteor/simple-todos.git
接下来,我们将从 Sandstorm 的 GitHub 安装 vagrant-spk
(这是 Sandstorm 的打包工具)。
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
您应该会看到如下消息:
Outputusage: 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 虚拟机
在本节中,我们将创建实际的 Sandstorm 包。 首先进入本地计算机上的应用程序目录。
cd ~/projects/simple-todos
然后,设置将用于构建包的虚拟机。
vagrant-spk setupvm meteor
您将看到与此类似的输出:
OutputInitializing .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
中创建一个名为 sandstorm-pkdef.capnp
的文件。 我们需要对此文件进行一些更改。
连接到 Vagrant 虚拟机。
vagrant-spk ssh
然后使用 nano
或您喜欢的文本编辑器打开 /opt/app/.sandstorm/sandstorm-pkdef.capnp
。
nano /opt/app/.sandstorm/sandstorm-pkgdef.capnp
找到以下部分:
Original ~/.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
行中的值更改为“Todo”。
Modified ~/.sandstorm/sandstorm-pkgdef.capnp. . . # 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 应用程序,页面仍然包含登录和注销按钮,这不是必需的。 接下来,我们将删除它们。
使用您喜欢的文本编辑器打开 project/simple-todos
目录中的文件 simple-todos.html
。
nano simple-todos.html
找到以下部分并删除 loginButtons
行,在下面以红色突出显示。 然后保存并关闭文件。
simple-todos.html. . . Hide Completed Tasks </label> {{> loginButtons}} {{#if currentUser}} . . .
接下来,打开文件 simple-todos.js
。
nano simple-todos.js
像以前一样,删除以下以红色突出显示的行,然后保存并关闭文件。 确保不要删除最后的花括号。
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
命令使 Sandstorm VM 在开发模式下运行,使您的包可用。 因此,从您的应用程序目录运行命令(在本例中为 simple-todos
)。
vagrant-spk dev
完成初始化后,它将打印以下消息:
OutputApp is now available from Sandstorm server. Ctrl+C to disconnect.
这意味着您现在可以通过 http://local.sandstorm.io:6080/ 访问 Sandstorm。 您现在可以使用开发帐户 按 登录。
然后点击爱丽丝(管理员)。 这将使用管理员帐户登录,这将允许您创建新实例。 您可以保留 Confirm your profile 页面的默认值,然后按紫色的 Continue 按钮而不进行任何更改。
接下来,单击 Todo 应用程序,然后单击 创建新实例 。
第 6 步 — 创建和上传 SPK
创建 Sandstorm 包的最后一步是创建一个 SPK 文件,其中包含应用程序、Meteor 的副本以及应用程序的任何其他依赖项。 此步骤由 meteor-spk
工具完全自动化。
首先,按 CTRL+C
停止您的开发服务器。 然后,打包应用程序。
vagrant-spk pack todo.spk
这会在您的当前目录中创建一个 SPK 文件。
顺便说一句,在我们的例子中,SPK 文件大约为 11 MB。 Sandstorm 应用程序通常只有几兆字节,即使它们包含应用程序和所有依赖项,包括任何操作系统依赖项。
完成应用程序开发后,您需要先关闭虚拟机,然后再创建第二个应用程序。 因此,执行以下命令:
vagrant-spk halt
如果你想继续开发,你可以简单地运行vagrant-spk up
。
第 7 步 - 创建待办事项列表
在本节中,我们将在您的 Droplet 上的 Sandstorm 服务器上安装包并创建应用程序的新实例。
在您的 Droplet 上登录 Sandstorm,您将在主屏幕上看到一个 Upload app 按钮。 单击该按钮,然后通过您在第 6 步中创建的 Web 浏览器选择 SPK 文件。
这将在您的 Sandstorm 主屏幕中创建一个标记为 Todo 的新项目。 在 Sandstorm 中安装应用程序使您能够创建新实例(或文档)。 因此,单击项目 Todo。 这将带您进入以下屏幕:
单击创建新实例。 这将带您进入一个新的 Todo 实例,该实例由 Todo 列表应用程序的唯一实例提供支持。
每个实例在 Sandstorm 中称为 grain。 此应用程序实例对于您的 Sandstorm 用户是唯一的。 如果您尝试在 Web 浏览器的隐私浏览窗口中打开 URL,您将收到 Forbidden 错误。 如果您希望其他人可以访问 Todo 列表,可以使用 Sandstorm 顶部栏中的蓝色 Share 按钮创建共享链接。
您可以通过单击左上角的 Sandstorm 徽标离开此待办事项列表。 完成此操作后,您会看到可以创建另一个待办事项列表。 您输入到一个 Todo 列表实例的任何数据都完全独立于其他数据。
结论
我们已经看到了如何使用 Meteor 编写的代码库并将其打包以供 Sandstorm 使用。 它依靠 Sandstorm 进行访问控制,并且可以轻松地与他人共享。 要了解有关 Meteor 的更多信息,请访问 他们的网站 。 要了解有关 Sandstorm 的更多信息,请访问 sandstorm.io。