如何在Ubuntu 14.04上使用Sandstorm安全地运行流星应用程序

介绍

Meteor是一个JavaScript框架,允许Web开发人员编写一次JavaScript代码并在客户端和服务器端重用它。本教程介绍了部署Meteor应用程序的不同方法:创建和运行Sandstorm软件包。

Sandstorm是个人服务器的开源平台,这意味着它可以用于在一台服务器上安装许多不同的应用程序,并且界面非常简单。本教程介绍了如何运行自定义应用程序,就像您自己编写的那样。

在Sandstorm中,安装应用程序使您可以使用该应用程序创建新文档。每个文档都是应用程序的独立运行实例,默认情况下,为每个文档(Sandstorm称为粒度)提供支持的代码是私有的。这就是Sandstorm可以安全地运行Meteor应用程序的感觉; Sandstorm处理访问控制。在本教程中,您将了解如何安装应用程序,然后创建多个应用程序实例。

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

准备

要学习本教程,您需要:

  • 本地计算机,用于构建Sandstorm包。这台电脑需要:
    • 是一台64位机器,至少有1GB的RAM。本教程提供了有关Ubuntu 14.04和Mac OS X的说明。
    • 安装了Git,它将用于下载vagrant-spk和我们的示例应用程序。
    • 安装了Vagrant,您可以从Vagrant的安装页面进行安装。Vagrant用于创建Sandstorm在开发模式下运行的虚拟机。
    • 安装了一些虚拟化软件,如VirtualBox
  • 安装了一个安装了Sandstorm的Ubuntu 14.04 腾讯云CVM来测试你的软件包。
  • (可选)使用Meteor框架编写的要打包的应用程序。如果您没有其他要使用的应用程序,本教程将显示使用Meteor提供的示例待办事项列表应用程序的步骤。

没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

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

在这一步中,我们将下载Meteor应用程序,我们将为其创建一个Sandstorm软件包,以及Sandstorm的打包工具vagrant-spk

首先,创建并移动到一个名为projects的新目录,以避免主目录被新文件弄得乱七八糟。

mkdir ~/projects
cd ~/projects

我们将在本教程中使用的示例应用程序是简单的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 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中创建sandstorm-pkdef.capnp文件。我们需要对此文件进行一些更改。

连接到Vagrant VM。

vagrant-spk ssh

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

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行中的值更改为“Todo”。

. . .
    # 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行,下面以红色突出显示。然后保存并关闭该文件。

. . .
        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命令使Sandstorm VM在开发模式下运行,使您的包可用。因此,从应用程序的目录运行命令(在本例中为simple-todos)。

vagrant-spk dev

完成初始化后,将打印以下消息:

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

这意味着您现在可以访问http://local.sandstorm.io:6080/访问Sandstorm 。您现在可以通过使用开发帐户按下来登录

然后单击Alice(管理员)。这将使用管理员帐户登录,您可以使用该帐户创建新实例。您可以保留确认个人资料页面的默认值,然后按紫色的继续按钮而不进行任何更改。

接下来,单击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步 - 创建Todo列表

在本节中,我们将在腾讯云CVM上的Sandstorm服务器上安装该软件包,并创建该应用程序的新实例。

登录腾讯云CVM上的Sandstorm,您将在主屏幕上看到上传应用按钮。单击该按钮,然后通过在步骤6中创建的Web浏览器选择SPK文件。

这将在Sandstorm主屏幕中创建一个标记为Todo的新项目。在Sandstorm中安装应用程序使您能够创建新实例(或文档)。因此,单击项目Todo。这将带您进入以下屏幕:

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

每个实例在Sandstorm中称为粒子。此应用实例对于您的Sandstorm用户是唯一的。如果您尝试在Web浏览器的私人浏览窗口中打开URL,则会出现“ 禁止”错误。如果您希望其他人有权访问Todo列表,您可以使用Sandstorm顶部栏中的蓝色“ 共享”按钮创建共享链接。

您可以通过单击左上角的Sandstorm徽标离开此待办事项列表。完成后,您将看到可以创建另一个Todo列表。您输入到一个Todo列表实例中的任何数据都完全独立于其他数据。

结论

我们已经看到了如何使用Meteor编写的代码库并将其打包为Sandstorm。它依靠Sandstorm进行访问控制,并且可以轻松与其他人共享。

想要了解更多关于使用Sandstorm安全地运行流星应用程序的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Run A Meteor App Securely With Sandstorm on Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维一切

ceph基础运维操作 原

保存退出 开始安装ceph Yum install ceph –y 完毕之后初始化目录

17020
来自专栏向治洪

iOS WebDriverAgent 环境搭建

WebDriverAgent简介 WebDriverAgent是Facebook 在去年的 SeleniumConf 大会上推出了一款新的iOS移动测试框架。当...

70790
来自专栏魏艾斯博客www.vpsss.net

WP-Sweep 插件清理 WordPress 垃圾评论和数据结构

50620
来自专栏LeoXu的博客

[翻译]Ext JS 教程-MVC架构 原

大规模的客户端应用程序常常难于去编写、组织机构和维护。随着你加入更多的功能,并且投入更多的开发人员,它们渐渐趋向于失去控制。ExtJS 4 带来了一种新的不仅...

19610
来自专栏生信宝典

Linux学习-文件和目录

为什么要用Linux系统 个人认为,Linux操作系统和类Linux操作系统的命令行界面是最适合进行生物信息分析的操作系统。原因有三点: 长期运行的稳定性 多数...

26550

如何在Linux上搭建Terraria 游戏服务器?

Terraria是一款二维沙盒游戏,类似于Minecraft(我的世界),允许玩家在开放的世界中探索,构建和战斗。2015年,Terraria开发者宣布支持Li...

90730
来自专栏信安之路

从面试题中学安全

根据 Github 上的面经总结的一些安全岗面试的基础知识,这些基础知识不仅要牢记,而且要熟练操作,分享给大家,共勉。

19400
来自专栏移动端开发

iOS 封装.framework 以及使用

.framework是什么? ----       .framework是什么?       这个问题相信做iOS的都知道答案。 在我们的日常开发中,经常会用到...

62560
来自专栏星回的实验室

JavaScript中的沙箱机制探秘[二]:iFrame沙箱实现方案详解

在上一篇文中,我们接触了JavaScript中的sandbox的概念,并且就现阶段的一些实现思路做了总结,包括YUI的闭包、iframe的sandbox以及No...

37310
来自专栏沈唁志

宝塔面板Mysql 5.6版本无法正常启动的解决方法

朋友找我的时候说的是 Mysql 启动不了,看他发的截图是宝塔面板,就要来了面板信息去看了一下

3K20

扫码关注云+社区

领取腾讯云代金券