電脳麻将 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/ |
認証設定については後述します。
majiang-server の起動方法
フロントエンド側の 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
nginx の設定
フロントエンド側の HTML/CSS/JavaScript の配信と、麻雀サーバーへのリバースプロキシ(WebSocketプロキシ)での接続を設定します。/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認証
Google Cloud Platform でアプリ登録します。承認済みのリダイレクト URI には以下の2つを設定しました。
- https://kobalab.net/majiang/server/auth/google (麻雀サーバーの /server/auth/google に相当)
- https://kobalab.net/majiang/netplay.html (電脳麻将のネット対戦のページ)
同様に 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
*1:macOSでのインストール手順、Linuxでのインストール手順
*2:環境変数 PATH の指定が必要かもしれません
*3:認証には Express ミドルウェアの Passport を使用しています
*4:電脳麻将の登録情報は供与しません
*5:用語が違いますが、役割としては同じものです