そらいろさんぽ

個人で開発したアプリやウェブサイトの情報をまとめたブログです

Red5を使ったチャットサーバー構築

Red5を使ったチャットサーバー構築

こんばんは。そらのくろうさぎです。
去年の始め頃からスマホでもリアルタイムのオンラインゲームが流行り始めましたね〜。node.jsやpeer.jsなどのリアルタイム用のライブラリも充実し、双方向通信がより身近な技術になったように感じます。今日はそんなリアルタイム通信を行うためのチャットサーバー構築手順についてお話したいと思います。

Red5とは

双方向通信といえば一番最初にnode.jsを思い浮かべると思いますが、今回は新うさゴヤに導入しているRed5の構築手順をご紹介します。

Red5はAdobeFlashMediaServerの互換として開発されたオープンソースのメディアサーバーです。元々はFlash用のメディアサーバーでしたが、最近のバージョンではHLSやWebSocketが使えるようになり、HTML5やモバイルアプリケーションにも対応出来るようになりました。サーバーアプリケーションの開発言語はJavaですので、柔軟性の高いチャットサーバーを運用・構築することが可能です。

ダウンロード

Red5はGitHabからダウンロードします。
Red5 Server

インストール手順

Quartzインストール

$ su -
# yum install quartz

JDKインストール

# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

ApacheAntインストール

# cd /usr/local/src/
# wget http://www.apache.org/dist/ant/binaries/apache-ant-1.9.5-bin.tar.gz
# tar xfz apache-ant-1.9.5-bin.tar.gz
# mv apache-ant-1.9.5 /usr/local/ant

ApacheAntのパスを通す

# vi ~/.bash_profile

下記の内容を.bash_profileに追記する

export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin

パスを反映する

# source ~/.bash_profile

Red5インストール

# cd /usr/local/src/
# wget https://github.com/Red5/red5-server/releases/download/v1.0.6-RELEASE/red5-server-1.0.6-RELEASE-server.zip
# unzip v1.0.6-RELEASE/red5-server-1.0.6-RELEASE-server.zip
# mv v1.0.6-RELEASE/red5-server-1.0.6-RELEASE-server.zip /usr/local/red5
# chown -R root:root /usr/local/red5/

Red5起動スクリプト作成

# vi /etc/init.d/red5

下記の内容を記述する
起動スクリプト

JAVA_HOMEにJavaのパス、RED5_HOMEにRed5のパスを追記する

#! /bin/sh

# For RedHat and cousins:
# chkconfig: 2345 85 85
# description: Red5 flash streaming server
# processname: red5

# Source function library
. /etc/rc.d/init.d/functions

export JAVA_HOME=/usr/bin/java
if [ -z "$JAVA_HOME" ]; then
    echo -n "need to set JAVA_HOME in red5.init" && failure
    echo
    exit 1
fi

PROG=red5
if [ -z "$RED5_HOME" ]; then
    export RED5_HOME=/usr/local/red5
fi
DAEMON=$RED5_HOME/$PROG.sh
PIDFILE=/var/run/$PROG.pid

[ -r /etc/sysconfig/red5 ] && . /etc/sysconfig/red5

RETVAL=0

case "$1" in
    start)
        echo -n $"Starting $PROG: "
        $DAEMON >/dev/null 2>/dev/null &
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
            echo $! > $PIDFILE
            touch /var/lock/subsys/$PROG
        fi
        [ $RETVAL -eq 0 ] && success $"$PROG startup" || failure $"$PROG startup"
        echo
        ;;
    stop)
        echo -n $"Shutting down $PROG: "
        killproc -p $PIDFILE
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    status)
        status $PROG -p $PIDFILE
        RETVAL=$?
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        RETVAL=1
esac

exit $RETVAL

起動スクリプトのパーミションを変更する

# chmod 0755 /etc/init.d/red5

ログ用のディレクトリを作成する

# mkdir /usr/local/red5/log/
# chmod 0755 /usr/local/red5/log/

ログローテーションの設定

# vi /usr/local/red5/conf/logback.xml

logback.xmlのノードを変更する
※maxHistoryで保存ログ数を指定

<appender class="ch.qos.logback.core.FileAppender" name="FILE">
  <File>log/red5.log</File>
  <Append>false</Append>
  <encoder>
    <pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</pattern>
  </encoder>
</appender>

↓下記に変更

<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE">
  <File>log/red5.log</File>
  <Append>false</Append>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>red5.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d{ISO8601} [%thread] %-5level %logger{35} - %msg%n</pattern>
  </encoder>
</appender>

WebSocketの設定

# vi /usr/local/red5/conf/red5.xml

red5.xmlに下記のノードを追記する

<!-- websocket -->
<bean id="webSocketTransport" class="org.red5.net.websocket.WebSocketTransport">
  <property name="port" value="8081"/>
</bean>

Red5を起動する

# /etc/init.d/red5 start

Red5のログ確認

# tail -f /usr/local/red5/log/red5.log

動作確認

設置したサーバーのURLにポート番号5080を指定してブラウザからRed5デモページを開きます。ドメインがxxxx.comならxxxx.com:5080でアクセスします。

f:id:soranokurousagi:20151017203528p:plain
Red5が問題なくインストールされていれば、上の図のようなデモページが表示されます。

おわりに

現在のRed5はコンパイルを行わなくてもサーバーに設置するだけで動作するようになりました。設置に手間がかからず、容易にチャットサーバーを構築することが可能です。これからリアルタイムコンテンツを開発しようと考えている方はRed5も選択肢の1つとして検討してみてはいかがでしょうか。

次回はRed5のサーバーアプリケーション開発についてお話したいと思います。
ではでは!