概要


KDDIが提供するGluinサーバ/サイト以外に、自分のサーバにGluinサーバ/サイトを構築することができます。Gluinはnode.js、MySQL、apache/PHPを用いて構築されており、レシピテンプレートなど自由にカスタイマイズして自分専用に用いることができるほか、KDDIが提供している開発者向けGluinサイトで一部設けられているメッセージ数のレート制限などがありません。


構築環境


■サーバ要件

ITEM DESCRIPTION
推奨OS Ubuntu 12.04LTS以降
スペック 上記OSが動作する環境
メモリ 1GB以上推奨。デバイスの同時接続数、レシピ実行数が増えるほど、メモリを必要とします。
ネットワーク リアルタイムでデバイスを操作する場合、ネットワーク遅延の少ないサーバ、ホスティングを利用することをお勧めいたします。

■必要なソフトウェア

ITEM DESCRIPTION
データベース MySQL 5.5推奨
Webサーバ Apache 2.2/2.4推奨
ランタイム環境 php5以降推奨
Node.js 0.10.25以降推奨 (0.10.25/29で動作確認)
ソース管理 git
Gluin KDDIより公開しております。Gluinソースコードダウンロードページをご参照ください。


インストール


■ソフトウェアのインストール

必要なソフトウェアのパッケージをインストールします。

$ sudo apt-get install php5 php5-mysql php5-mcrypt
$ sudo apt-get install nodejs npm
$ sudo apt-get install mysql-server
$ sudo apt-get install git
$ sudo npm install pm2 -g

モジュールを有効化しておきます。

$ sudo php5enmod mcrypt
$ sudo a2enmod rewrite

■Gluinファイルの展開

Gluinをインストールするディレクトリを作成し、展開します。
$ mkdir /opt/gluin
$ cd /opt/gluin
$ tar zxvf gluin.tar.gz

主なファイル構成は次の通りです。
ITEM DESCRIPTION
default Gluinサーバ/サイトの最上位ディレクトリ
- app-node デバイスやアプリとWebSocketやXMLで通信するGluinサーバのプログラムです。node.jsで構成されています。
- node_modules node.js用のモジュールです
- app-php ブラウザ上でデバイスを管理するGluinサイトのPHP部です。
- public GluinサイトのHTMLやCSSなどのWebページ部分です。ApacheでのDocumentRootになります。
- storage ログやセッション情報などの動的なファイルを生成するディレクトリです。apacheからの読み書きの権限を与えておく必要があります。
db.sql SQLのデータベースです。MySQLにインポートして必要なテーブル等を作成します。
recipe_template.sql レシピテンプレートのデータです。追加することも可能です。

■MySQLサーバの設定

MySQLサーバの設定ファイルに文字コードに関する記述を追加します。

・my.cnf
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

[mysql]
default-character-set = utf8

[client]
default-character-set = utf8

次にMySQLサーバに、Gluin用のデータベースを作成し、dwmユーザからのアクセス権を指定します。なおパスワードやIPなど必要に応じて変更してください。
$ mysql -u root
create database dwm;
grant all on dwm.* to dwm@localhost identified by 'DWMPASS';

最後に、作成したDBにGluinで必要とされるテーブル等をインポートします。
$ mysql -u root < db.sql
$ mysql -u root < recipe_template.sql

■phpの設定

PHPのモジュールをインストールします。vendorディレクトリが新たに作成され、必要なモジュールがダウンロードされます。
$ cd /opt/gluin/default
$ php composer.phar install

■nodeの設定

node.jsのモジュールをインストールします。
$ cd /opt/gluin/default
$ npm install

■Apacheの設定(通常起動する場合にのみ必要)

コンフィグファイルに publicを公開するように指定します。rewriteモジュールの動作は、publicディレクトリの中にある.htacessファイルで指定されています。

・/etc/apache2/site-available/000-default.conf
…(中略)…
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /opt/gluin/default/public
    ServerName (サーバのIPアドレス)
    ErrorLog /opt/gluin/default/storage/logs/error_log
    CustomLog /opt/gluin/default/storage/logs/access_log common
</VirtualHost>
<Directory "/opt/gluin/default/public">
    AllowOverride all
    Require all granted
    Options FollowSymLinks

    SetEnv LARAVEL_ENV staging
</Directory>
…(中略)…


起動/停止


■簡易起動

node.jsとWebサーバをそれぞれコマンドで立ち上げます。ひとまずの動作確認などにご利用いただけます。停止する場合は、それぞれのプロセスを停止させます。

まずnode.jsでGluinサーバを立ち上げます。
$ cd /opt/gluin/defalut
$ npm start

node.jsを起動したまま、別のシェルでビルトインのWebサーバを立ち上げます。
$ cd /opt/gluin/defalut
$ php artisan serve

Webブラウザで localhost:8000 にアクセスし、Gluinサイトが表示されたら成功です。アクセスに必要なURLは下記のとおりです。
ITEM DESCRIPTION
Gluinサイト用URL
(ブラウザアクセス)
http://localhost:8000/
デバイス用URL ws://localhost:8080/dx
Webアプリ用URL http://localhost:8080/ax/


■通常起動

通常起動では、WebサーバとしてApacheを用い、またnode.jsをプロセス管理パッケージのpm2を用いて起動します。一般運用する場合はこちらをご利用ください。

起動前に起動オプションとして環境変数を指定しておきます。パスなどは必要に応じて変更してください。
$ export NODE_CONFIG_DIR=/opt/gluin/default/app-node/config
$ export NODE_ENV=staging
$ export LARAVEL_ENV=staging

node.jsは下記のように起動します。pm2によるプロセス管理はpm2のマニュアルをご参照ください。
$ cd /opt/gluin/defalut
$ pm2 start pm2.json

apacheは下記のように起動します。
$ sudo service apache2 start

Webブラウザで localhost にアクセスし、Gluinサイトが表示されたら成功です。アクセスに必要なURLは下記のとおりです。
ITEM DESCRIPTION
Gluinサイト用URL
(ブラウザアクセス)
http://localhost/
デバイス用URL ws://localhost:8080/dx
Webアプリ用URL http://localhost:8080/ax/
別の端末からアクセスする場合は、localhostを実際のサーバのIPアドレスに置き換えてご利用ください。


設定


■ユーザの管理

Gluinサイトにログインして利用するに当たり、事前にユーザの作成が必要です。作成にはシェル上で次のコマンドで作成します。
$ cd /opt/gluin/defalut
$ php artisan gluin:create-user [e-mail] [password]

引数は次の通りです。
ITEM DESCRIPTION
[e-mail] ログイン時のIDとなります。
[password] ログインパスワードです
なお、ユーザの変更、削除についてはコマンドがありませんので、dwmデータベースのauthorloginsテーブルを直接操作してください。またコマンドを用いず、直接DBにユーザを追加することも可能です。

■動作設定

Gluinの動作設定は、node.jsとPHPの両方に設定を行います。

node.jsの動作設定は下記のファイルで行います。
・default/app-node/config/default.json
{
  "port": {
    "http": 8080,	//待ち受けポート番号
    "https": 8443	//待ち受けポート番号(over SSL)
  },
  "ssl": {
    "key": "./app-node/config/password/server.pem",  //SSL使用時の秘密鍵(再度作成しなおすことをお勧めします)
    "cert": "./app-node/config/password/crt.pem" //SSL使用時のサーバ証明書
  },
  "db": { // データベース設定
    "dwm": {
      "host": "localhost", //DBのIPアドレス
      "user": "dwm",	//DBのユーザ名
      "password": "DWMPASS", //DBのパスワード。DBのパスワードを変更した場合は、この値も変更してください。
      "database": "dwm"	 // DB名
    }
  },
  "logger": { //ログ設定
    "level": "INFO",
    "appenders": [
      {
        "type": "file",
        "filename": "storage/logs/nodejs-prod.log",
        "maxLogSize": 20971520,
        "backups": 5
      }
    ]
  },
  "Dx": { // デバイスとの通信インタフェース設定
    "maxRequestBodySize": "10kb", // メッセージサイズ上限(kb | mb | gb | tb) //最大メッセージサイズ
    "device": {
      "maxProps": 10 //デバイスごとの最大属性値数
    }
  },
  "Ax": { // Webアプリとの通信インタフェース設定
    "maxRequestBodySize": "10kb", // メッセージサイズ上限(kb | mb | gb | tb) //最大メッセージサイズ
    "session": {
      "name": "gluin:ax:sess",
      "secret": "32文字のキー", //サーバごとに作成しなおすことをお勧めします
      "cookie": {
        "path": "/ax/",
        "domain": "localhost",
        "secure": false,	// SSLでのみ運用する場合はtrueにします
        "httpOnly": false,	// SSLでのみ運用する場合は、trueにします。
        "maxAge": 900000 // 15 minuites (milliseconds)
      },
      "rolling": true
    },
    "enableHttp": true // AxインタフェースをHTTPで有効にするかどうか
  }
}


PHPの動作設定は"default/app-php/config/"以下のファイル群で行います。例えばDBの設定は下記のファイルです。
・default/app-php/config/database.php
…(省略)…
    'connections' => array(

…(中略)…

        'dwm' => array(
            'driver' => 'mysql',
            'host' => 'localhost',	// DBのIPアドレスです
            'database' => 'dwm',	// DB名です。
            'username' => 'dwm', // DBのユーザ名です。
            'password' => 'DWMPASS', // DBのパスワードです。
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => ''
        ),
…(省略)…

■ログファイル

ログファイルは、"default/storage/logs/"以下に作成されます。
ITEM DESCRIPTION
laravel-*.log PHPのログです。標準の設定では、簡易起動の場合にlaravel-local.log、通常起動の場合にlaravel-staging.logになります。
nodejs-*.log node.jsのログです。標準の設定では、簡易起動の場合にnodejs-developement.log、通常起動の場合にnodejs-staging.logになります。