サンドストームとのコラボレーションで書かれました

序章

MeteorはJavaScriptのフレームワークであり、Web開発者がJavaScriptコードを一度記述して、クライアント側とサーバー側の両方で再利用できるようにします。 別のチュートリアルでは、NginxとUpstartを使用してMeteorアプリをデプロイする方法について説明していますが、このチュートリアルでは、Meteorアプリをデプロイするための別のアプローチであるSandstormパッケージの作成と実行について説明します。

Sandstormは、パーソナルサーバー用のオープンソースプラットフォームです。つまり、非常に使いやすいインターフェイスを使用して、1台のサーバーにさまざまなアプリをインストールするために使用できます。 前のチュートリアルでは、SandstormをインストールしてWordPressやMediaWikiなどのアプリを実行する方法を示しました。 このチュートリアルでは、自分で作成したようなカスタムアプリケーションを実行する方法について説明します。

Sandstormでは、アプリをインストールすると、そのアプリを使用して新しいドキュメントを作成できます。 各ドキュメントはアプリの個別の実行インスタンスであり、各ドキュメントを強化するコード(Sandstormはgrain と呼びます)はデフォルトでプライベートです。 これは、SandstormによってMeteorアプリを安全に実行するのが簡単になるという意味です。 Sandstormはアクセス制御を処理します。 このチュートリアルでは、アプリをインストールしてから複数のアプリインスタンスを作成する方法を説明します。

Sandstormアプリを作成するための複数のユースケースがあります。 最初のユースケースは、個人または企業での使用です。 これは、アプリをパッケージ化して、あなたまたはあなたの会社のSandstormサーバーにデプロイし、Sandstormのサンドボックス化とアクセス制御を利用することを意味します。 もう1つのユースケースは、他のSandstormユーザーに公開するSandstormアプリの作成です。 これは、たとえば apps.sandstorm.io で公開できますが、自分で配布することもできます。 ユーザーは、アプリの開発者がデータを読み取れないことを知っています。 このチュートリアルは、両方のシナリオに適用されます。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Sandstormパッケージのビルドに使用されるローカルコンピューター。 このコンピューターは次のことを行う必要があります。

    • 1GB以上のRAMを搭載した64ビットマシンであること。 このチュートリアルには、Ubuntu14.04とMacOSXの手順が含まれています。

    • Gitをインストールします。これは、vagrant-spkとサンプルアプリケーションのダウンロードに使用されます。 Gitをインストールするには、Ubuntu 14.04の場合はこのGitチュートリアル、OSXの場合はGitMacインストールガイドに従ってください。

    • Vagrantのインストールページから実行できるVagrantをインストールします。 Vagrantは、Sandstormが開発モードで実行される仮想マシンを作成するために使用されます。

    • VirtualBoxなどの仮想化ソフトウェアをインストールします。

  • パッケージをテストするためにSandstormがインストールされた1つのUbuntu14.04ドロップレット。これは、この前のチュートリアルに従うことで実行できます。

  • オプションで、Meteorフレームワークを使用して作成されたパッケージ化するアプリ。 このチュートリアルでは、使用する別のアプリがない場合にMeteorが提供するサンプルのToDoリストアプリケーションを使用する手順を示します。

ステップ1—サンプルアプリとvagrant-spkをダウンロードする

このステップでは、Sandstormパッケージを作成するMeteorアプリケーションと、Sandstormのパッケージツールvagrant-spkをダウンロードします。

まず、projectsという新しいディレクトリを作成して移動し、ホームディレクトリが新しいファイルで乱雑にならないようにします。

  1. mkdir ~/projects
  2. cd ~/projects

このチュートリアルで使用するサンプルアプリケーションは、Meteorが提供するsimple-todosです。 ただし、独自のMeteorアプリケーションを使用する場合は、これをスキップすることもできます。

MeteorのGitHubからクローンを作成して、このアプリケーションをダウンロードします。

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

次に、SandstormのGitHubからvagrant-spk(Sandstormのパッケージツール)をインストールします。

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

vagrant-spkディレクトリに移動します。

cd vagrant-spk

最後に、/usr/local/binでバイナリへのシンボリックリンクを作成して、vagrant-spkコマンドを使用できるようにします。

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

インストール後、以下を実行してvagrant-spkがインストールされているかどうかを確認できます。

  1. vagrant-spk --help

次のようなメッセージが表示されます。

Output
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—SandstormVMを実行する

このセクションでは、実際のサンドストームパッケージを作成します。 まず、ローカルマシンのアプリケーションディレクトリに移動します。

  1. cd ~/projects/simple-todos

次に、パッケージのビルドに使用する仮想マシンをセットアップします。

  1. vagrant-spk setupvm meteor

次のような出力が表示されます。

Output
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.

次に、仮想マシンを起動します。

  1. vagrant-spk up

このコマンドの実行には少し時間がかかります。

ステップ3—パッケージ定義の作成

このセクションでは、実際にMeteorアプリケーションをパッケージ化します。

まず、Sandstormが使用するパッケージ定義を作成します。

  1. vagrant-spk init

このコマンドは、ディレクトリ.sandstormsandstorm-pkdef.capnpというファイルを作成します。 このファイルにいくつかの変更を加える必要があります。

VagrantVMに接続します。

  1. vagrant-spk ssh

次に、nanoまたはお気に入りのテキストエディタを使用して/opt/app/.sandstorm/sandstorm-pkdef.capnpを開きます。

  1. 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—アプリにサンドストームログインを追加する

現在、TodosアプリにはSandstormとは別の認証があります。 ただし、SandstormにログインするときにTodosアプリケーションでログインする必要があるため、Meteorアプリに別のパッケージを追加する必要があります。

VMに接続したまま、メインパッケージディレクトリに移動します。

  1. cd /opt/app

次に、kenton:accounts-sandstormパッケージをMeteorアプリに追加します。これにより、現在のSandstormアカウントがMeteorアプリに公開されます。

  1. meteor add kenton:accounts-sandstorm

これで、VagrantVMとの接続を終了できます。

  1. exit

このTodoアプリケーションの場合、ページにはまだログインボタンとログアウトボタンが含まれていますが、これらは必要ありません。 次に、それらを削除します。

お気に入りのテキストエディタを使用して、project/simple-todosディレクトリにあるファイルsimple-todos.htmlを開きます。

  1. nano simple-todos.html

次のセクションを見つけて、下の赤で強調表示されているloginButtons行を削除します。 次に、ファイルを保存して閉じます。

simple-todos.html
. . . Hide Completed Tasks </label> {{> loginButtons}} {{#if currentUser}} . . .

次に、ファイルsimple-todos.jsを開きます。

  1. nano simple-todos.js

前と同じように、赤で強調表示されている次の行を削除してから、ファイルを保存して閉じます。 最後の中括弧を削除しないように注意してください。

simple-todos.js
. . . "click .toggle-private": function () { Meteor.call("setPrivate", this._id, ! this.private); } }); Accounts.ui.config({ passwordSignupFields: "USERNAME_ONLY" }); } . . .

現在、アプリはMeteorアカウントの代わりにSandstormアカウントを使用しています。

ステップ5—開発中のアプリをテストする

vagrant-spkにはdevコマンドがあり、Sandstorm VMを開発モードで実行して、パッケージを利用できるようにします。 そのため、アプリのディレクトリ(この場合はsimple-todos)からコマンドを実行します。

  1. vagrant-spk dev

初期化が完了すると、次のメッセージが出力されます。

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

これは、http://local.sandstorm.io:6080/でSandstormにアクセスできることを意味します。 これで、開発アカウントを押してログインできます。

Login screen

次に、アリス(管理者)をクリックします。 これにより、管理者アカウントでログインし、新しいインスタンスを作成できるようになります。 プロファイルの確認ページのデフォルト値をそのままにして、何も変更せずに紫色の続行ボタンを押すことができます。

次に、Todoアプリをクリックし、新しいインスタンスの作成をクリックします。

New Instance

ステップ6—SPKの作成とアップロード

Sandstormパッケージを作成する最後のステップは、アプリ、Meteorのコピー、およびアプリのその他の依存関係を含むSPKファイルを作成することです。 このステップは、meteor-spkツールによって完全に自動化されています。

まず、CTRL+Cを押して開発サーバーを停止します。 次に、アプリをパッケージ化します。

  1. vagrant-spk pack todo.spk

これにより、現在のディレクトリにSPKファイルが作成されます。

余談ですが、この場合、SPKファイルは約11MBです。 Sandstormアプリは、アプリと、オペレーティングシステムの依存関係を含むすべての依存関係が含まれている場合でも、通常は数メガバイトです。

アプリの開発が終了したら、2つ目のアプリを作成する前に、仮想マシンをシャットダウンする必要があります。 したがって、次のコマンドを実行します。

vagrant-spk halt

何らかの理由で開発を継続したい場合は、vagrant-spk upを実行するだけです。

ステップ7—Todoリストを作成する

このセクションでは、DropletのSandstormサーバーにパッケージをインストールし、アプリの新しいインスタンスを作成します。

ドロップレットでサンドストームにログインすると、ホーム画面にアプリのアップロードボタンが表示されます。 そのボタンをクリックし、手順6で作成したWebブラウザを介してSPKファイルを選択します。

Sandstorm Upload App

これにより、サンドストームのホーム画面にTodoというラベルの付いた新しいアイテムが作成されます。 Sandstormにアプリをインストールすると、新しいインスタンス(またはドキュメント)を作成できるようになります。 したがって、アイテムTodoをクリックします。 これにより、次の画面が表示されます。

Todo App Screen

新しいインスタンスの作成をクリックします。 これにより、Todoリストアプリの一意のインスタンスを利用した新しいTodoインスタンスが表示されます。

Todo list

Sandstormでは、各インスタンスはgrainと呼ばれます。 このアプリインスタンスは、Sandstormユーザーに固有のものです。 WebブラウザのプライベートブラウジングウィンドウでURLを開こうとすると、Forbiddenエラーが発生します。 他の人にTodoリストへのアクセスを許可したい場合は、Sandstormトップバーの青い共有ボタンを使用して共有リンクを作成できます。

左上のSandstormロゴをクリックすると、このToDoリストを離れることができます。 それが完了すると、別のTodoリストを作成できることがわかります。 1つのTodoリストインスタンスに入力するデータは、他のインスタンスから完全に独立しています。

結論

Meteorで記述されたコードベースを取得し、Sandstorm用にパッケージ化する方法を見てきました。 アクセス制御はSandstormに依存しており、他のユーザーと簡単に共有できます。 Meteorの詳細については、のWebサイトにアクセスしてください。 Sandstormの詳細については、sandstorm.ioにアクセスしてください。