Ubuntu14.04でSandstormを使用してMeteorアプリを安全に実行する方法
サンドストームとのコラボレーションで書かれました
序章
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
という新しいディレクトリを作成して移動し、ホームディレクトリが新しいファイルで乱雑にならないようにします。
- mkdir ~/projects
- cd ~/projects
このチュートリアルで使用するサンプルアプリケーションは、Meteorが提供する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
最後に、/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—SandstormVMを実行する
このセクションでは、実際のサンドストームパッケージを作成します。 まず、ローカルマシンのアプリケーションディレクトリに移動します。
- 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
というファイルを作成します。 このファイルにいくつかの変更を加える必要があります。
VagrantVMに接続します。
- 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
これで、VagrantVMとの接続を終了できます。
- 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"
});
}
. . .
現在、アプリは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にアクセスできることを意味します。 これで、開発アカウントでを押してログインできます。
次に、アリス(管理者)をクリックします。 これにより、管理者アカウントでログインし、新しいインスタンスを作成できるようになります。 プロファイルの確認ページのデフォルト値をそのままにして、何も変更せずに紫色の続行ボタンを押すことができます。
次に、Todoアプリをクリックし、新しいインスタンスの作成をクリックします。
ステップ6—SPKの作成とアップロード
Sandstormパッケージを作成する最後のステップは、アプリ、Meteorのコピー、およびアプリのその他の依存関係を含むSPKファイルを作成することです。 このステップは、meteor-spk
ツールによって完全に自動化されています。
まず、CTRL+C
を押して開発サーバーを停止します。 次に、アプリをパッケージ化します。
- vagrant-spk pack todo.spk
これにより、現在のディレクトリにSPKファイルが作成されます。
余談ですが、この場合、SPKファイルは約11MBです。 Sandstormアプリは、アプリと、オペレーティングシステムの依存関係を含むすべての依存関係が含まれている場合でも、通常は数メガバイトです。
アプリの開発が終了したら、2番目のアプリを作成する前に仮想マシンをシャットダウンする必要があります。 したがって、次のコマンドを実行します。
vagrant-spk halt
何らかの理由で開発を継続したい場合は、vagrant-spk up
を実行するだけです。
ステップ7—Todoリストを作成する
このセクションでは、DropletのSandstormサーバーにパッケージをインストールし、アプリの新しいインスタンスを作成します。
ドロップレットでサンドストームにログインすると、ホーム画面にアプリのアップロードボタンが表示されます。 そのボタンをクリックし、手順6で作成したWebブラウザを介してSPKファイルを選択します。
これにより、サンドストームのホーム画面にTodoというラベルの付いた新しいアイテムが作成されます。 Sandstormにアプリをインストールすると、新しいインスタンス(またはドキュメント)を作成できるようになります。 したがって、アイテムTodoをクリックします。 これにより、次の画面が表示されます。
新しいインスタンスの作成をクリックします。 これにより、Todoリストアプリの一意のインスタンスを利用した新しいTodoインスタンスが表示されます。
Sandstormでは、各インスタンスはgrainと呼ばれます。 このアプリインスタンスは、Sandstormユーザーに固有のものです。 WebブラウザのプライベートブラウジングウィンドウでURLを開こうとすると、Forbiddenエラーが発生します。 他のユーザーにTodoリストへのアクセスを許可する場合は、Sandstormトップバーの青い共有ボタンを使用して共有リンクを作成できます。
左上のSandstormロゴをクリックすると、このToDoリストを離れることができます。 それが完了すると、別のTodoリストを作成できることがわかります。 1つのTodoリストインスタンスに入力するデータは、他のインスタンスから完全に独立しています。
結論
Meteorで記述されたコードベースを取得し、Sandstorm用にパッケージ化する方法を見てきました。 アクセス制御はSandstormに依存しており、他のユーザーと簡単に共有できます。 Meteorの詳細については、のWebサイトにアクセスしてください。 Sandstormの詳細については、sandstorm.ioにアクセスしてください。