appRTC

AppRTC server set up

https://github.com/webrtc/apprtc.git

  1. 구성
    • apprtc : session room server
    • colider : signaling server
    • nginx : reverse proxy server; HTTPS 접속을 위해 설정 필요
    • coturn : turn server
  2. 환경설정
    • NodeJS 및 패키지 설치
      $ cd apprtc
      $ npm install
      
    • Grunt 설치
      $ npm -g install grunt-cli
      
    • Nginx 설치
    • Python, Python-webtest 설치
    • Google cloud SDK 설치
    • GO 설치
      $ sudo apt-get install golang
      $ mkdir -p $HOME/goWorkspace/src
      $ mkdir -p $HOME/goWorkspace/bin
      
    • PATH 설정(/ete/profile)
      export GOPATH=$HOME/goWorkspace
      
  3. 빌드 및 실행

1) coturn

2) colider

  • signaling server 소스코드(written by go) 연결
    $ ln -rs $HOME/apprtc/src/collider/collider $GOPATH/src/
    $ ln -rs $HOME/apprtc/src/collider/collidermain $GOPATH/src/
    $ ln -rs $HOME/apprtc/src/collider/collidertest $GOPATH/src/
    
  • $GOPATH/src/collidermain/main.go 파일, room server 변경
    //var roomSrv = flag.String("room-server", "https://appr.tc", "The origin of the room server")
    var roomSrv = flag.String("room-server", "https://apprtc.diveinedu.com", "The origin of the room server")
    
  • $GOPATH/src/collider/collider.go 파일, HTTPS certificate 설정
    //e = server.ListenAndServeTLS("/cert/cert.pem", "/cert/key.pem")
    e = server.ListenAndServeTLS("/etc/nginx/apprtc.diveinedu.com.crt", "/etc/nginx/apprtc.diveinedu.com.key")
    
  • 테스트용 인증서 파일 사용시 아래 참고
    $ makedir -p /cert
    $ cd /cert
    // Generate CA private key
    $ openssl genrsa -out key.pem 2048
    // Generate Self Signed certificate
    $ openssl req -new -x509 -key key.pem -out cert.pem -days 1095
    
  • 8089(TCP) 방화벽 포트 허용(for websocket을 통한 signaling 통신)
  • collidermain 컴파일 및 실행
    go get collidermain     // go 환경에서의 websocket package 설치
    go install collidermain
    $GOPATH/bin/collidermain -port=8089 -tls=true
    

3) apprtc

  • src/app_engine/constant.py 파일 수정
    //1. turnserver
    ICE_SERVER_OVERRIDE  = [
    {
      "urls": [
        "turn:hostname/IpToTurnServer:3478?transport=udp",
        "turn:hostname/IpToTurnServer:3478?transport=tcp"
      ],
      "username": "TurnServerUsername",
      "credential": "TurnServerCredentials"
    },
    {
      "urls": [
        "stun:hostname/IpToStunServer:19302"
      ]
    }
    ]
    //2. modify to own room server url
    //ICE_SERVER_BASE_URL = 'https://appr.tc'
    ICE_SERVER_BASE_URL = 'https://api.diveinedu.com'
    ICE_SERVER_URL_TEMPLATE = '%s/apprtc/iceconfig.php?key=%s'
    ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')
    
  • apprtc server 빌드
    $ cd apprtc
    $ grunt build
    

    ~/apprtc/out/app_engine 폴더 내에 결과물 컨텐츠가 생성된다?

  • apprtc server 실행: google app engine 이용
    //dev_appserver.py --host=[local network card ip] $HOME/apprtc/out/app_engine
    dev_appserver.py --host=172.31.4.236 home/apprtc/out/app_engine
    
  • apprtc 서버 실행 스크립트 (참고용)
    // start_apprtc.sh
    export PATH=$PATH:$HOME/google_appengine
    export APPRTC_APP=$HOME/apprtc/out/app_engine/
    export HOST="--host=0.0.0.0"
    export ICE_SERVER_API_KEY="AIzaSyAJdh2HkajseEIltlZ3SIXO02Tze9sO3NY"
    dev_appserver.py $HOST $APPRTC_APP
    

4) Nginx

  • 8080 방화벽 포트 허용(for web access)
  • config 파일(/etc/nginx/sites-enabled/apprtc.diveinedu.com) 설정
    upstream roomserver {
          server localhost:8080;
    }
    server {
          listen 80 ;
          server_name apprtc.diveinedu.com;
          return  301 https://$server_name$request_uri;
    }
    server {
          listen 443 ;
          ssl on;
          # SSL certificate file with domain name apprtc.diveinedu.com
          ssl_certificate      /etc/nginx/apprtc.diveinedu.com.crt;
          ssl_certificate_key  /etc/nginx/apprtc.diveinedu.com.key;
          server_name apprtc.diveinedu.com;
          access_log  /var/log/nginx/apprtc.diveinedu.com.log;
          location / {
                  proxy_pass http://roomserver$request_uri;
                  proxy_set_header Host $host;
          }
    }
    
  • /etc/nginx/sites-available/default 적용?
    #apprtc visit the http address
    upstream roomserver {
      server 47.104.210.66:8080;
    }
    # Listening on port 80 and redirects the access to the https port 443
    server {
      listen 80 ;
      server_name 47.104.210.66;
      return  301 https://$server_name$request_uri;
    }
    # Redirect over access this reverse proxy, visit http forwarded to the address apprtc
    server {
      root /usr/share/nginx/html;
      index index.php index.html index.htm;
      listen 443 ;
      ssl on;
      ssl_certificate      /cert/cert.pem;
      ssl_certificate_key  /cert/key.pem;
      server_name 47.104.210.66;
      access_log  /var/log/nginx/jwcqc.log;
      location / {
          proxy_pass http://roomserver$request_uri;
          proxy_set_header Host $host;
      }
      location ~ .php$ {
          fastcgi_pass unix:/var/run/php5-fpm.sock;
          fastcgi_index index.php;
          include fastcgi_params;
      }
    }
    
  • nginx 재시작
    $ killall -9 nginx
    $ nginx
    

참고자료

https://www.programmersought.com/article/80884473841/ https://www.programmersought.com/article/37293142061/ https://www.programmersought.com/article/64962025497/ https://m.blog.naver.com/nakim02/221451297596

Categories:

Updated: