電脳麻将 ver.2.3.0 で ネット対戦 の機能を追加しましたが、麻雀サーバー の使い方を説明してませんでした。 README だけでは説明が不十分と思ったので、補足記事を書くことにします。
麻雀サーバーを動作させるには Node.js と npm が必要なので、あらかじめインストール*1しておいてください。
npm でインストールします。
$ npm i -g @kobalab/majiang-server
ネット対戦のフロントエンド側の機能(HTML/CSS/JavaScript)は電脳麻将にあるので、ダウンロードしてビルドします。
$ curl -L https://github.com/kobalab/Majiang/archive/master.tar.gz | tar xvfz -
$ cd Majiang-master
$ npm ci
$ npm run release
麻雀サーバーを起動します。 電脳麻将をビルドしたディレクトリで以下のコマンドを実行します。
$ majiang-server -c /netplay.html -d dist
http://localhost:4615/netplay.html にアクセスすればネット対戦のページを表示します。
-p オプションで起動するポート番号を変更できます。 以下のように実行すればWeb標準の80番ポートで起動するので、他にWebサーバが起動していなければ http://localhost/netplay.html でネット対戦できるようになるはずです。 *2
$ sudo majiang-server -p 80 -c /netplay.html -d dist
デフォルトではセッション情報をメモリで管理します。 このままだと麻雀サーバーを再起動する度にログイン情報が失われますが、セッション情報をファイルに保存することも可能です。
$ mkdir session
$ majiang-server -c /netplay.html -d dist -s session
麻雀サーバーを外部に公開するのであれば、nginx によるリバースプロキシで運用した方がよいでしょう。 nginx を使えばHTTPSの対応も容易になります。
kobalab.net では以下の設定でネット対戦を公開しています。
以下に配置しています。
ビルド済みの電脳麻将 | /home/www/majiang/ |
---|---|
認証設定 | /home/www/majiang-server/auth/ |
セッション情報 | /home/www/majiang-server/session/ |
認証設定については後述します。
フロントエンド側の HTML/CSS/JavaScript の配信は nginx に任せ、麻雀サーバーはバックエンドの処理だけを担当します。 起動オプションは以下となります。
$ majiang-server -c /netplay.html -o /home/www/majiang-server/auth/ -s /home/www/majiang-server/session/
ですが、Linuxであれば systemd を使用してデーモンとして動作させるのが普通でしょう。
/etc/systemd/system/majiang-server.service
を以下のように記述します。
[Unit]
Description=Majiang Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Environment=LANG=ja_JP.UTF-8
ExecStart=/usr/local/bin/node /usr/local/bin/majiang-server -c /netplay.html -o /home/www/majiang-server/auth -s /home/www/majiang-server/session
Restart=always
User=koba
Group=koba
[Install]
WantedBy=multi-user.target
フルパス指定で起動させています。 環境変数 LANG に ja_JP.UTF-8 を指定していますが、これは牌譜のタイトルに含まれる日時を日本人に馴染みのある形式にするためです。 User / Group は環境に合わせて設定してください。root である必要はありません。
以下のコマンドで麻雀サーバーを常駐させます。
$ sudo systemctl enable majiang-server
$ sudo systemctl start majiang-server
フロントエンド側の HTML/CSS/JavaScript の配信と、麻雀サーバーへのリバースプロキシでの接続を設定します。
/etc/nginx/default.d/majiang.conf
を以下のように設定しました。
location /majiang {
alias /home/www/majiang;
charset utf-8;
gzip on;
gzip_types text/css application/javascript application/json;
}
location /majiang/server/ {
proxy_pass http://127.0.0.1:4615/server/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect http://127.0.0.1:4615/ https://kobalab.net/majiang/;
proxy_redirect / /majiang/;
proxy_cookie_path / /majiang;
gzip on;
gzip_types text/plain text/css
application/javascript application/json application/xml;
}
nginxを再起動します。
$ sudo systemctl restart nginx
麻雀サーバーは、はてなとGoogleのOAuth認証に対応しています。*3 外部認証を使うにはそれぞれのサービスの「アプリ登録」が必要ですので、ご自分で登録してください。*4
http://www.hatena.ne.jp/oauth/develop でアプリ登録します。
登録すると OAuth Consumer Key と OAuth Consumer Secret が得られるので、これを /home/www/majiang-server/auth/hatena.json
に設定します。
{
"consumerKey": CONSUMER_KEY,
"consumerSecret": CONSUMER_SECRET,
"callbackURL": "https://kobalab.net/majiang/server/auth/hatena"
}
callbackURL には麻雀サーバーの /server/auth/hatena に転送されるURLを設定します。
Google Developers Console でアプリ登録します。 承認済みのリダイレクト URI には以下の2つを設定しました。
同様に client_id と client_secret *5が得られるので、これを /home/www/majiang-server/auth/google.json
に設定します。
{
"clientID": CLIENT_ID,
"clientSecret": CLIENT_SECRET,
"callbackURL": "https://kobalab.net/majiang/server/auth/google"
}
callbackURL には麻雀サーバーの /server/auth/google に転送されるURLを設定します。
設定したら麻雀サーバーを再起動します。
$ suro systemctl restart majiang-server