序章

Parseは、2013年からFacebookが所有するサービスプラットフォームとしてのモバイルバックエンドです。 2016年1月、Parse は、ホストされているサービスが2017年1月にシャットダウンすることを発表しました

ユーザーがサービスから移行できるように、Parseは Parse Server と呼ばれるバックエンドのオープンソースバージョンをリリースしました。これは、Node.jsとMongoDBを実行している環境にデプロイできます。

このガイドは、DigitalOceanDropletなどのUbuntu14.04システムにParseServerをインストールするための詳細な手順で公式ドキュメントを補足します。 これは、何よりもまず、アプリケーションの移行を検討しているParse開発者の出発点として意図されており、公式の Parse ServerGuideと併せて読む必要があります。

前提条件

このガイドは、管理タスク用のsudo権限を持つroot以外のユーザーで構成されたクリーンなUbuntu14.04システムを使用していることを前提としています。 新しいUbuntu14.04サーバーチェックリストシリーズのガイドを確認することをお勧めします。

さらに、システムにはMongoDBの実行中のインスタンスが必要です。 Ubuntu14.04にMongoDBをインストールする方法から始めることができます。 MongoDBは、作成時にこのスクリプトをユーザーデータに追加することで、新しいドロップレットに自動的にインストールすることもできます。 ドロップレットユーザーデータの詳細については、このチュートリアルをご覧ください。

システムがsudoユーザーとMongoDBで構成されたら、このガイドに戻って続行します。

ステップ1—Node.jsと開発ツールをインストールします

現在の作業パスをsudoユーザーのホームディレクトリに変更することから始めます。

  1. cd ~

NodeSource は、DebianおよびUbuntuNode.jsパッケージ用のAptリポジトリを提供します。 これを使用してNode.jsをインストールします。 NodeSourceは、最新の安定版リリース(この記事の執筆時点ではv5.5.0)のインストールスクリプトを提供しています。これは、インストール手順にあります。 curlを使用してスクリプトをダウンロードします。

  1. curl -sL https://deb.nodesource.com/setup_5.x -o nodesource_setup.sh

このスクリプトの内容を確認するには、nano、または選択したテキストエディタでスクリプトを開きます。

  1. nano ./nodesource_setup.sh

次に、nodesource_setup.shを実行します。 sudo-Eオプションは、スクリプトからアクセスできるように、ユーザーの環境変数を保持するように指示します。

  1. sudo -E bash ./nodesource_setup.sh

スクリプトが終了すると、NodeSourceリポジトリがシステムで利用できるようになります。 apt-getを使用してnodejsパッケージをインストールできます。 また、build-essentialメタパッケージをインストールします。これは、後で役立つ可能性のあるさまざまな開発ツールと、GitHubからプロジェクトを取得するためのGitバージョン管理システムを提供します。

  1. sudo apt-get install -y nodejs build-essential git

ステップ2—サンプルのParseServerアプリをインストールします

Parse Serverは、Node.jsの一般的なWebアプリケーションフレームワークである Express と組み合わせて使用するように設計されており、定義されたAPIに準拠するミドルウェアコンポーネントを特定のパスにマウントできます。 parse-server-example リポジトリには、このパターンのスタブアウトされた実装例が含まれています。

gitを使用してリポジトリを取得します。

  1. git clone https://github.com/ParsePlatform/parse-server-example.git

クローンを作成したparse-server-exampleディレクトリを入力します。

  1. cd ~/parse-server-example

npmを使用して、parse-serverを含む依存関係を現在のディレクトリにインストールします。

  1. npm install

npmは、parse-serverに必要なすべてのモジュールをフェッチし、それらを~/parse-server-example/node_modulesに格納します。

ステップ3—サンプルアプリケーションをテストする

npmを使用してサービスを開始します。 これにより、package.jsonstartプロパティで定義されたコマンドが実行されます。 この場合、node index.jsを実行します。

  1. npm start
Output
> [email protected] start /home/sammy/parse-server-example > node index.js DATABASE_URI not specified, falling back to localhost. parse-server-example running on port 1337.

Ctrl-C を押すと、実行中のアプリケーションをいつでも終了できます。

index.jsで定義されたExpressアプリは、HTTPリクエストをparse-serverモジュールに渡します。このモジュールは、MongoDBインスタンスと通信し、~/parse-server-example/cloud/main.jsで定義された関数を呼び出します。

この場合、ParseServerAPI呼び出しのエンドポイントはデフォルトで次のようになります。

http://your_server_IP/parse

別の端末では、curlを使用してこのエンドポイントをテストできます。 これらのコマンドは特定のIPアドレスではなくlocalhostを参照するため、最初にサーバーにログインしていることを確認してください。

POSTリクエストとX-Parse-Application-Idヘッダーを送信してレコードを作成し、JSONとしてフォーマットされたデータとともにアプリケーションを識別します。

curl -X POST \
  -H "X-Parse-Application-Id: myAppId" \
  -H "Content-Type: application/json" \
  -d '{"score":1337,"playerName":"Sammy","cheatMode":false}' \
  http://localhost:1337/parse/classes/GameScore
Output
{"objectId":"fu7t4oWLuW","createdAt":"2016-02-02T18:43:00.659Z"}

送信したデータはMongoDBに保存され、curlを使用してGETリクエストを送信することで取得できます。

  1. curl -H "X-Parse-Application-Id: myAppId" http://localhost:1337/parse/classes/GameScore
Output
{"results":[{"objectId":"GWuEydYCcd","score":1337,"playerName":"Sammy","cheatMode":false,"updatedAt":"2016-02-02T04:04:29.497Z","createdAt":"2016-02-02T04:04:29.497Z"}]}

~/parse-server-example/cloud/main.jsで定義された関数を実行します。

curl -X POST \
  -H "X-Parse-Application-Id: myAppId" \
  -H "Content-Type: application/json" \
  -d '{}' \
  http://localhost:1337/parse/functions/hello
Output
{"result":"Hi"}

ステップ4—サンプルアプリケーションを構成する

元の端末で、 Ctrl-C を押して、実行中のバージョンのParseServerアプリケーションを停止します。

記述されているように、サンプルスクリプトは、6つの環境変数を使用して構成できます。

変数 説明
DATABASE_URI mongodb://localhost:27017/devのようなMongoDB接続URI
CLOUD_CODE_MAIN cloud/main.jsのようなParseCloudCode関数を含むファイルへのパス
APP_ID myAppIdなどのアプリの文字列識別子
MASTER_KEY アプリのすべてのセキュリティメカニズムをバイパスできる秘密のマスターキー
PARSE_MOUNT /parseのように、ParseServerAPIが提供されるパス。
PORT 1337のように、アプリがリッスンする必要のあるポート

exportコマンドを使用してスクリプトを実行する前に、これらの値のいずれかを設定できます。 例えば:

  1. export APP_ID=fooApp

index.jsの内容を一読する価値はありますが、何が起こっているのかをより明確に把握するために、例の独自の短いバージョンを作成することもできます。 エディターで新しいスクリプトを開きます。

  1. nano my_app.js

そして、必要に応じて強調表示された値を変更して、以下を貼り付けます。

〜/ parse-server-example / my_app.js
var express = require('express');
var ParseServer = require('parse-server').ParseServer;

// Configure the Parse API
var api = new ParseServer({
  databaseURI: 'mongodb://localhost:27017/dev',
  cloud: __dirname + '/cloud/main.js',
  appId: 'myOtherAppId',
  masterKey: 'myMasterKey'
});

var app = express();

// Serve the Parse API on the /parse URL prefix
app.use('/myparseapp', api);

// Listen for connections on port 1337
var port = 9999;
app.listen(port, function() {
    console.log('parse-server-example running on port ' + port + '.');
});

ファイルを終了して保存し、Node.jsで実行します。

  1. node my_app.js
Output
parse-server-example running on port 9999.

ここでも、いつでも Ctrl-C を押して、my_app.jsを停止できます。 上記のように、サンプルmy_app.jsは、提供されたindex.jsとほぼ同じように動作しますが、ポート9999でリッスンし、解析サーバーが/myparseappにマウントされている点が異なります。エンドポイントURLは次のようになります。

http:// your_server_IP :9999 / myparseapp

そしてそれは次のようにcurlでテストすることができます:

  1. curl -H "X-Parse-Application-Id: myOtherAppId" http://localhost:9999/myparseapp/classes/GameScore`

結論

これで、Ubuntu環境でParseServerのようなNode.jsアプリケーションを実行するための基本を理解する必要があります。 Parseからアプリを完全に移行することは、コードの変更とインフラストラクチャの慎重な計画を必要とする、より複雑な作業になる可能性があります。

このプロセスの詳細については、このシリーズの2番目のガイド Ubuntu14.04で解析アプリを解析サーバーに移行する方法を参照してください。 また、公式の解析サーバーガイド、特に既存の解析アプリの移行に関するセクションも参照してください。