appRTC
AppRTC server set up
https://github.com/webrtc/apprtc.git
- 구성
- apprtc : session room server
- colider : signaling server
- nginx : reverse proxy server; HTTPS 접속을 위해 설정 필요
- coturn : turn server
- 환경설정
- 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
- NodeJS 및 패키지 설치
- 빌드 및 실행
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