freedom-man.com

ブログは俺のセーブポイント

Tag: nodejs

FuelSDK-NodeとExactTarget APIあれこれ

ExactTargetのNode.js用SDKであるFuelSDK-NodeとExactTarget APIに関する備忘録

Continue reading

Dokku Alternative触ってみる。

Dokku AlternativeというOSSを使うと、Dockerを利用して

herokuみたいなPaaSを作れるということなので試してみましたー。

Dokku Alternativeは本家のDokkuに色々と機能を追加したOSSみたいです。

 

参考URLはこちら↓

Dokku Alternative·個人用PaaSにどうぞ。Dokkuに便利な機能を追加 MOONGIFT

Herokuのように簡単に使えるDockerベースのPaaS | KRAY Inc

Dockerを使ったミニPaaSのdokkuをパワーアップさせた「Dokku Alternative」を試す – さくらのナレッジ

 

今回はまっさらなVMに入れてみます。

1. Ubuntuインスタンスを立ち上げる

今回はDigitalOceanで立ち上げました。

スペックはメモリ512MBの一番安いプランで、OSはUbuntu 14.04×64を選択。

Dokku-altはUbuntu 14.04 LTSにしか対応してないっぽいです。

dokku-ubuntu-digitalocean

立ち上げたら、セキュリティ系の諸々の初期設定をした後、スワップファイルの設定をしてください。

これをしないとメモリ不足でインストールがコケます。

設定したら、以下のコマンドでswap領域が有効になっているかを確認

/etc/fstabにも登録しておきます

2. Dokkuのインストール

インストールは超簡単で以下のコマンドを実行するだけ。

インストールが成功すると初期設定用のサーバが立ち上がるので

http://{サーバーのIP or ホスト名}:2000にアクセスして設定を行います。

dokku-setup

IPアドレスだとアプリに対してサブドメイン形式のURLをアサインできません。

DNSレコードを設定するか、hostsファイル弄るかでホスト名でアクセスできるようにすれば

サブドメイン形式({アプリ名}.{サーバーのホスト名})が利用できます。

公開鍵は、git pushするときのsshの秘密鍵に対応する公開鍵を入力すればOK。

設定はこれだけ!

3. アプリをpushしてみる。

あと、テキトーなアプリをpushすればデプロイできちゃいます。

デプロイすると、http://{アプリケーション名}.{2で指定したサーバのホスト名}のURLでアクセスできます。

 

アプリはdockerで動いているので、デプロイするとdockerのインスタンスが立ち上がっているのを確認できます。

サーバにリモートログインしてdokkuコマンドを叩くと、アプリの作成や削除、DBインスタンスの作成等

dokkuのアプリ設定を色々と弄れます。

4. 管理用コンテナを作成する

このままでもgit pushだけでデプロイできる素晴らしい環境なんですが

DBコンテナ作って既存のアプリに紐付けたり、既存のアプリを削除したりするには

CUIでの操作になるため、ちょっと面倒です。

幸いdokku-altには管理画面用のコンテナがあり、以下のdokkuコマンドでインストールできます。

インストールがうまくいくと、http://dam.{ホスト名}のURLで管理画面UIにアクセスできます。

最初はUserが居ないとエラー画面が表示されるので

サイドメニューのUsersの[Add User]ボタンから、適当にユーザを作成して、ログインを行います。

dokku-manager-first

dokku-adduser

ダッシュボードを開くと、ホストサーバが表示されているので、設定マークをクリックします。

※Deploy New Appは押しても何も起こりませんでした…。

dokku-dashboard

Sync Appsを押すと、既にデプロイされているアプリと管理アプリ自体のコンテナが表示されます。

dokku-hosts

ここでアプリケーションの追加・削除したりできます。

Deploy Git Appで任意のgitリポジトリからデプロイ出来そうな雰囲気ですが

鍵の設定がよくわからず、断念orz

dokku-gitapp

よく見ると、Webhookはこれから対応するような文言が見当たるのでCIとかにも対応しそうな感じ。

 

今回は先ほど作成したnodeアプリのコンテナにMongoDBのコンテナをつなげてみます。

まずは、Add DBからDBコンテナを作成します。

dokku-adddb

初回はDBコンテナのイメージを取得するせいか、Ajaxのタイムアウトエラーが出たんですが

その場合でもちゃんとコンテナが作成されていました。

DB用のコンテナ作成後は対象のアプリのリンクをクリックします。

dokku-dev1

Add DB Linkをクリックして先ほど作成したMongoDBのコンテナとリンクさせます。

dokku-addlink

これでNode.jsのアプリからMongoDBに接続することが可能になりました。

接続情報はサーバ側で以下のコマンドを叩くことで確認することが可能です。

(もしかしたらGUIでの方法もあるのかも)

接続情報をソースにベタ書きするのはアレなので、コンテナ内の環境変数にセットします。

Add Configからキーバリューで値をセットします。

dokku-setdbconfig

こんな感じになります。

dokku-aftersetdbconfig

あとはソースコードの修正をします。

まずはNode.jsからmongo叩くためにパッケージをインストール

こんな感じでindex.jsを修正

あとはgit pushすると新しいアプリが立ち上がって

WebアプリにアクセスするとMongoDBにレコードが差し込まれます。

コマンドラインからMongoDBにアクセスするには

でMongoDBの対象コンテナ(イメージ=ayufan/dokku-alt-mongodb)のIDを確認して

でコンテナのプライベートIPアドレスを取得。

あとはプライベートIPを使って、MongoDBに接続すればOK。

こんな感じでドキュメントを取得できます↓

5. SSLの設定

Dokku-altの管理画面ですが、デフォルトのままだと非SSLで

クレデンシャル晒している状態なのでSSL対応します。

今回は検証用ということで、オレオレ証明書で。

キー、証明書を作ったら dokkuコマンドで、管理用Webアプリに登録します。

keyを登録した時点でコンテナが再起動してSSLが有効になります。

その他注意点

以下のようにdokkuコマンドを使ってアプリ再起動したときには

dockerのコンテナは起動しているものの

フォワーディング(ホストOSのnginxで受け取ってコンテナにフォワーディング)の設定が

されないようで、アクセスしようとすると500エラーが返って来てしまいます。

この場合は、以下のコマンドでリビルドすれば、適切にフォワーディングされるようになりました。

 感想

dokkuはシングルホストなのでスケールしないし、可用性的に問題が有ったりするので

商用には厳しい感じですが、アプリを検証したりプロトタイプ作ったりするような

簡単な用途には有用な気がします。

DigitalOceanの$5/monthのプランでもそれなりに動いていますし。

herokuとかのPaaSに移行するとしてもremoteリポジトリ変えるだけなので楽ちんです。

ただしherokuと違ってスケジューラやone-offなコンテナはありません。

ホスト側自由にいじれるんで、どうしても使いたい場合はcronとかシェルで対応しちゃえばOKですw

CasperJSでSalesforceのレコード詳細画面を自動キャプチャ

プロファイルのキャプチャを取るのにChromeExtensionとかでキャプチャを手動で取っていたのを

何とかしたかったのでCasperJSで自動化してみました。

 

CasperJSはPhantomJSのユーティリティで、ヘッドレスなブラウザをAPI経由で操ってテストしたり

キャプチャを取ったりすることが出来るツールになります。

 

今回は

1. SOQLを発行してレコードの一覧を取得

2. 1で取得したレコードIDを元に各レコード詳細画面に遷移後、キャプチャを取得

という流れでキャプチャを取ってみます。

 

作成物はこちら

ちなみにSOQLで取得できて、取得したIDを使ってhttps://{ドメイン}/{取得したID}のURLで

アクセスできるオブジェクトであれば何でも取得できます(プロファイルのキャプチャもOKです)。

1. 指定オブジェクトのSalesforceIDの一覧を取得

nodejsでjsforce使って指定のレコードIDの一覧を取得します。

クレデンシャルや実行SOQLをパラメータで与えるためcommanderを利用。

2. SalesforceIDの一覧から詳細ページにアクセスしてキャプチャを取得

1でファイルに保存されたレコードIDの一覧をCasperJSに食わせてキャプチャを取得していきます。

本当は標準入力から取得したかったんですが、うまくいかなかった…。

ログインのエンドポイント(https://login.salesforce.com or https://test.salesforce.com)に対して

un=***&pw=***のPOSTによる方式でログインを行い

そのあとはレコードIDの一覧から、https://{ドメイン}/{レコードID}のURLに

順々にアクセスしてキャプチャを保存するといった流れになります。

 

ログイン後3秒ほどWaitをかけているのは、ログイン後のSessionIDの割り当て(Cookieへの保存)と

最初のランディングに少々時間を要すためです。(もうちょっとスマートな方法があれば教えて下さい…。)

 

ちなみに、CasperJS(PhantomJS)を使っているのでWebKitベースなレンダリングでキャプチャされます。

IEのTridentを使ってキャプチャしたい場合は、TrifleJSを使用して上記スクリプトを書き換える必要があります。

TrifleJSはCasperJSがまだ対応していないみたいなので、PhantomJS形式で書く必要があり結構シンドイです。

© 2017 freedom-man.com

Theme by Anders NorenUp ↑