その利点:
- 2つのサービスを無料で使用できます。 herokuとは異なり、本格的なデータベースアプリケーションを作成できます。
- ファイルシステムは書き込み可能です-ログを保持する方が便利です
- 良いドキュメント 。
しかし、欠点もあります:
- 過去30分間誰も使用しなかった場合、無料サービスは「眠りに落ちる」。 これは、この状況が発生する可能性があることを意味します。サイトにアクセスすると、代わりにサービスの標準ページが表示され、待機するように求められます。 しばらくすると(最大数分)、サービスが「起動」し、必要に応じて動作を開始します。
- デフォルトのバージョンは
node 0.4.10
です。 しかし、それは修正することができます。
警告:以下は、 公式ドキュメントの短い要約です。 もちろん、フルバージョンを読むことをお勧めします。
規約
DotCloudを使用する場合、 アプリケーションという用語は、使用するサービスのコレクションを意味します。 サービスは、単一のnode.jsプロセス(php、python、rubyなど)または単一のデータベースインスタンスです。 たとえば、phpおよびmysqlサービスから、ワードプレスブログアプリケーションを作成できます。
サイトに登録すると、[設定]セクションに、いわゆるAPIキー (ランダムに生成された文字と数字のシーケンス)が表示されます。 将来的には、このプラットフォームで作業する必要があります。
DotCloudでのすべてのアクションは、特別な
dotcloud
ユーティリティを使用して実行されます(ドキュメントでは、
dotcloud
コマンドラインインターフェイスと呼ばれます)。
CLIインストール
CLIは Python で書かれており、EasyInstallパッケージマネージャーを使用するため、最初にインストールする必要があります。
sudo apt-get install python-setuptools python-dev build-essential
そして
sudo easy_install pip && sudo pip install dotcloud
その結果、 dotcloudユーティリティがシステムに表示されます。 最初の起動時に、 APIキーを入力する必要があります。
アプリケーションのインストール
最も簡単なサンプルアプリケーションは、 ここにあります 。 しかし、それは何もしないため、特に興味深いものではありません。
ソースの準備
既に何らかの種類のnode.jsアプリケーションが動作しているとしましょう。 この記事の例を使用できます。 1つの変更を行う必要があります。dotCloudアプリケーションはポート8080でリッスンする必要があります 。 展開後、通常どおりポート80で使用可能になりますが、ソースでは正確に8080になります。
アプリケーションの説明
デプロイするには、ファイルシステム上の3つのファイル、
dotcloud.yml
、
supervisord.conf
、および
package.json
を作成して、適切な場所に配置する必要があります。 結果は次の構造になります。
ninja_on_dotcloud/ |_ dotcloud.yml |_ ninja-store/ |_ supervisord.conf |_ package.json |_ app.js |_ ...
dotcloud.yml
ファイルは、アプリケーションが使用するサービスのセットを記述しています。 サービスが1つあるため、
dotcloud.yml
は次のようになります。
www: type: nodejs approot: ninja-store
ここで、
www
はサービスの名前(理論的には何でもかまいません)、
ninja-store
はソースフォルダーです。
supervisord.conf
も簡単です。
[program:node] command = node app.js directory = /home/dotcloud/current
この場合、
app.js
がアプリケーションのメインファイルです。
package.jsonは標準のnpmファイルです。 dotCloudに配置する場合、 依存関係セクションのみが重要であり、アプリケーションで使用されるパッケージがリストされます。
展開
これらすべてをサーバーに送信するには、2つのコマンドを実行する必要があります。
最初にアプリケーションを作成します
dotcloud create -f sandbox nstore
-f
は、 アプリケーションのフレーバー (大まかに言えば、料金プランとホスティングオプション)を設定します。
nstore
はアプリケーションの名前であり、さらなる管理に必要です。
最後に、サイトのコードをサーバーに送信します
dotcloud push nstore ./ninja_on_dotcloud
その結果、すべてがうまくいけば、コンソールにアプリケーションが利用可能になるアドレスを書き込みます。 私の場合、これはhttp://nstore-beardog.dotcloud.com/です。 このURLを形成するルールは変更される可能性があります。1年前にランダムな文字列が生成されたばかりで、アプリケーションとアカウントの名前が結合されています。 無料アカウントで独自のドメインを使用することはできません。
悪い場合は、ログを確認する必要があります。
ログを見る
アプリケーションが正常に起動した場合、 コマンドでログを確認できます
dotcloud logs _._
(たとえば、package.jsonで依存関係を指定するのを忘れた場合など)アプリケーションを起動できないことがあります。 次に、非常に切り捨てられたsshアクセスのようなものを使用する必要があります 。 たとえば、バージョン0.4.10では、express.jsを機能させるために必要なzlibモジュールが不足していることがわかりました。
user@u5$ dotcloud ssh ninjastore.www # $SHELL dotcloud@ninjastore-default-www-0:~$ ls /var/log/supervisor/ node-stderr---supervisor-7vur0l.log node-stdout---supervisor-xqRYq7.log supervisord.log dotcloud@ninjastore-default-www-0:~$ tail --lines=20 /var/log/supervisor/node-stderr---supervisor-7vur0l.log node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Cannot find module 'zlib' at Function._resolveFilename (module.js:317:11) at Function._load (module.js:262:25) at require (module.js:346:19) at Object.<anonymous> (/home/dotcloud/node_modules/express/node_modules/connect/lib/middleware/compress.js:14:12) at Module._compile (module.js:402:26) at Object..js (module.js:408:10) at Module.load (module.js:334:31) at Function._load (module.js:293:12) at require (module.js:346:19) at Object.compress (/home/dotcloud/node_modules/express/node_modules/connect/lib/connect.js:89:14)
ログファイルの名前は、プラットフォームの新しいバージョンのリリースで変更される可能性があるため、明確な指示を与えることはできません。 ほとんどの場合、
/var/log/
どこかに必要な情報を含むファイルがあります。
ノードの他のバージョンのインストール
このリポジトリで実証されたハックのおかげで、dotCloudにnode.jsの任意のバージョンをインストールできます
必要:
- リポジトリをコピー
- dotcloud.ymlファイルで、
node_version
フィールドに必要なバージョンを指定します - 当然、
hellonode
をソースに置き換えます - 通常どおり
dotcloud push
を実行します。
重要:複製後に.gitフォルダーを削除します。 dotcloudがそれに気付くと、ローカルバージョンを使用する代わりにgithubからソースを取得しようとします。
その結果、インストールプロセス中に、
dotcloud
は指定されたバージョンのノードのソースコードをダウンロードして
dotcloud
ます。 次の
push
呼び出しはコンパイルされません。
おそらくログに問題があるので、 このバージョンを試すことができます
別の考えられる問題は、アプリケーションがリッスンするポートです。 何らかの理由で、その例では、次のように設定されています 。
}).listen(process.env['PORT_WWW'] || 8080);
ご清聴ありがとうございました。 dotcloud、mongodb、nodeに関する別の記事がありました。 そして1年前、同じ名前の記事がすでにハブに登場しました(残念ながら、私は自分の記事を書いた後で見つけました)