Sandstormと共同で作成

前書き

Meteorは、Web開発者が一度JavaScriptコードを記述し、クライアント側とサーバー側の両方で再利用できるようにするJavaScriptのフレームワークです。 別のチュートリアルでは、https://www.digitalocean.com/community/tutorials/how-to-deploy-a-meteor-js-application-on-ubuntu-14-04-with-nginx [Nginxを使用してMeteorアプリをデプロイする方法とUpstart]ですが、このチュートリアルでは、Meteorアプリをデプロイするための別のアプローチ、Sandstormパッケージの作成と実行について説明します。

Sandstormはパーソナルサーバー用のオープンソースプラットフォームです。つまり、非常に使いやすいインターフェイスを備えた1つのサーバーにさまざまなアプリをインストールするために使用できます。 prevoiusチュートリアルでは、https://www.digitalocean.com/community/tutorials/how-to-install-sandstorm-on-ubuntu-14-04 [Sandstormのインストール方法]でWordPressやMediaWikiなどのアプリを実行する方法を紹介しました。このチュートリアルでは、自分で書いたようなカスタムアプリケーションを実行する方法について説明します。

Sandstormでは、アプリをインストールすると、そのアプリを使用して新しいドキュメントを作成できます。 各ドキュメントはアプリの個別の実行中のインスタンスであり、各ドキュメント(Sandstormが_grain_と呼ぶ)を駆動するコードはデフォルトでプライベートです。 これが、SandstormがMeteorアプリの安全な実行を容易にする意味です。 Sandstormはアクセス制御を処理します。 このチュートリアルでは、アプリをインストールし、複数のアプリインスタンスを作成する方法について説明します。

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

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • Sandstormパッケージの構築に使用されるローカルコンピューター。 このコンピューターには以下が必要です。

  • 少なくとも1GBのRAMを備えた64ビットマシンであること。 このチュートリアルには、Ubuntu 14.04およびMac OS Xの手順が記載されています。

  • Gitをインストールします。これは、 `+ vagrant-spk +`とサンプルアプリケーションのダウンロードに使用されます。 Ubuntu 14.04のhttps://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-14-04 [このGitチュートリアル]またはhttps:// gitに従ってGitをインストールできます。 -scm.com/download/mac[Git Macインストールガイド] OS X用。

  • Vagrantをインストールします。これはhttps://www.vagrantup.com/docs/installation/[Vagrantのインストールページ]から実行できます。 Vagrantは、Sandstormが開発モードで実行される仮想マシンを作成するために使用されます。

  • VirtualBoxなどの仮想化ソフトウェアをインストールしてください。

  • パッケージをテストするためにSandstormがインストールされたUbuntu 14.04ドロップレット。これは、https://www.digitalocean.com/community/tutorials/how-to-install-sandstorm-on-ubuntu-14-04に従って実行できます[前へチュートリアル]。

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

手順1-サンプルアプリとvagrant-spkのダウンロード

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

最初に、 `+ projects +`という新しいディレクトリを作成して移動します。これにより、ホームディレクトリが新しいファイルで混雑するのを防ぎます。

mkdir ~/projects
cd ~/projects

このチュートリアルで使用するサンプルアプリケーションは、Meteorが提供するhttps://github.com/meteor/simple-todos[simple-todos]アプリケーションです。 ただし、独自の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

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

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

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

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 VMに接続します。

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 = ""),

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

次に、ファイルを保存して閉じます。

ステップ4-アプリへのSandstormログインの追加

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

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

cd /opt/app

次に、Meteorアプリに `+ kenton:accounts-sandstorm +`パッケージを追加し、現在の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>



     {{#if currentUser}}
. . .

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

nano simple-todos.js

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

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




}
. . .

現在、アプリはMeteorアカウントではなくSandstormアカウントを使用しています。

ステップ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にアクセスできることを意味します。 これで、「開発アカウントで」を押してログインできます。

image:https://assets.digitalocean.com/articles/meteor-sandstorm/8HOgzgk.png [ログイン画面]

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

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

画像:https://assets.digitalocean.com/articles/meteor-sandstorm/FjejSbS.png [新しいインスタンス]

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

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

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

vagrant-spk pack todo.spk

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

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

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

vagrant-spk halt

何らかの理由で開発を継続したい場合は、単に「+ vagrant-spk up +」を実行できます。

ステップ7-Todoリストの作成

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

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

image:https://assets.digitalocean.com/articles/meteor-sandstorm/GJPNJRX.png [Sandstorm Upload App]

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

image:https://assets.digitalocean.com/articles/meteor-sandstorm/Bfwx5XN.png [Todoアプリ画面]

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

image:https://assets.digitalocean.com/articles/meteor-sandstorm/27iAXMa.png [トドリスト]

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

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

結論

Meteorで書かれたコードベースをSandstorm用にパッケージ化する方法を見てきました。 アクセス制御はSandstormに依存しており、他のユーザーと簡単に共有できます。 Meteorの詳細については、https://www.meteor.com/ [their website]をご覧ください。 Sandstormの詳細については、https://sandstorm.io/ [sandstorm.io]にアクセスしてください。