EC2에 OpenVidu 서버 배포
팀 프로젝트를 진행하면서 화상회의도 함께 구현하기로 하였다. 본인도 화상회의를 구현해 본 적도 없고 팀원들도 구현해 본 적이 없었기 때문에 열심히 구글링을 하였더니 많은 프로젝트에서 WebRTC 기술을 이용하여 화상회의를 구현하였다. 그래서 처음엔 우리도 WebRTC을 이용하여 구현하면 되겠구나 싶어서 열심히 이론을 공부했더니 몇 가지 문제점이 있었다.
문제점 1) WebRTC 서버 구현방식은 Signaling 서버, SFU서버, MCU서버 크게 3가지 방식으로 분류 된다.
Signaling 서버는 1:1 화상회의에 적합하다. 하지만 우리의 팀 프로젝트는 스터디그룹 간의 N:M 방식으로 구현해야 하기 때문에 적합하지 않았다.
SFU, MCU 서버는 N:M 방식이 가능하지만 중앙서버를 하나 만들어서 중앙서버로 통신을 해야 하는 구조였다.
중앙서버는 미디어 서버인 쿠렌토(Kurento)를 이용하여 구현할 수 있었다. 쿠렌토는 무료로 사용가능하기에 이 방법이면 우리가 원하는 N:M 방식으로 구현할 수 있겠구나 생각하였다.
문제점 2) 하지만 현실적인 문제가 있었다. WebRTC, Kurento에 대한 기초지식이 없기 때문에 공부를 하고 진행해야 하는데 얼마 안 남은 공모전 마감 기간과 더불어 팀 프로젝트에 핵심은 화상회의가 아니었다는 점을 고려한다면 현재 상황에서는 많은 시간을 투자하여 구현한다는 것은 쉽지 않을 것이라 판단하였다.
해결책) WebRTC을 구현한 프로젝트를 열심히 찾다 보니 Openvidu라는 오픈소스 플랫폼을 사용하여 구현한 방식을 보았다.
Openvidu는 웹과 모바일 환경에서 영상 통화 기능을 쉽게 추가할 수 있도록 하는 오픈소스 플랫폼이다. 애플리케이션에 매우 간편하게 적용할 수 있는 다양한 데모 코드와 기술 스택을 제공하고 있다. WebRTC 미디어 서버를 구현하는 데 소모되는 리소스를 절약해서 빠르게 실시간 통신을 추가할 수 있도록 도와주는 것이 큰 장점이다.
Kurento기반의 중개 서버를 애플리케이션에 쉽게 추가할 수 있도록 완전한 기술스택을 제공해 주기 때문에 이 방법을 이용하면 빠르게 WebRTC을 구현할 수 있겠구나 싶었다!!
참고 : https://github.com/Heongilee/Therapist/discussions/186
OpenVidu 서버 포트

EC2에 인바운드 규칙 추가
Openvidu는 서버를 제공해 준다 그렇기에 EC2에 보안그룹에 Openvidu와 관련된 서버포트를 모두 열어주어야 한다.
인바운드 규칙에 추가해 주도록 하자.
EC2에 Nginx가 설치되어 있다면 삭제를 하거나 서버를 끄고 진행해야 한다. 그렇지 않다면 서버 충돌이 일어날 수 있다.
Openvidu는 기본적으로 SSL인증서를 이용하여 HTTPS에서 실행된다. 그렇기에 도메인이 있어야 한다. 물론 공용 IP 만으로도 가능하겠지만 인증서에 대한 경고를 만날 수 있다.
EC2에 Docker와 Docker Compose 설치
Docker 설치
# 도커 설치
sudo amazon-linux-extras install docker
# 도커 시작
sudo service docker start
# 권한 부여
sudo usermod -a -G docker ec2-user
# auto-start에 docker 등록
sudo chkconfig docker on
# 인스턴스 재시작
sudo reboot
# 도커 버전 확인
docker version
Docker Compose 설치
# 최신 docker compose를 해당 링크에서 받을 수 있음
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
# 설치 확인
docker-compose version
# 심볼릭 링크 설정 (만약 루트 계정 설정이 안되어있다면)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Openvidu 서버를 받아오자
# Open vidu 을 배포하기 위해서 루트 계정이 필요 (루트 계정으로 접속)
sudo su
# 참고 < 루트 계정에서 나오는 방법 >
su - ec2-user
# OpenVidu 설치 권장 폴더는 /opt
cd /opt
# opt 폴더안에 Openvidu 설치 스크립트 다운로드
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh | bash
# 설치 후 오픈비두가 설치된 경로로 이동
cd openvidu
Openvidu 통신을 위한 환경설정
$ nano .env
# OpenVidu configuration
# ----------------------
# 도메인 또는 퍼블릭IP 주소
DOMAIN_OR_PUBLIC_IP=도메인 주소 or 퍼블릭IP 주소를 연결해주세요
# 오픈비두 서버와 통신을 위한 시크릿
OPENVIDU_SECRET=MY_SECRET
# Certificate type
CERTIFICATE_TYPE=letsencrypt
# 인증서 타입이 letsencrypt일 경우 이메일 설정
LETSENCRYPT_EMAIL=user@example.com
# 기본포트는 HTTP=80, HTTPS=443 으로 되어있다 일단 건들지 말자.
Nginx 설정과 SSL 발급 및 적용
Openvidu는 기본적으로 HTTPS로 통신하기 때문에 SSL 인증서가 반드시 필요하다. 카메라와 마이크 등 보안이 안될 경우 문제가 되기 때문이다.
nginx 설치
# 설치
sudo yum install nginx
# 설치 확인 및 버전 확인
nginx -v
letsencrypt 설치 (위에 Openvidu 환경설정을 보면 CERTIFICATE_TYPE을 letsencrypt로 바꾸었다 )
sudo yum install letsencrypt
sudo systemctl stop nginx
sudo letsencrypt certonly --standalone -d www제외한 도메인 이름
# 설치가 끝난 후 Congratulations!"로 시작하는 문구가 보이면, 인증서 발급이 완료된 것입니다.
nginx 폴더로 이동 후 example.conf 파일 생성
cd /etc/nginx
vim nginx.conf
nginx.conf 파일 설정
server {
location /{
proxy_pass http://localhost:9000; # 포트는 스프링부트 applicaton.yml 에서 확인 가능
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/i5a608.p.ssafy.io/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/i5a608.p.ssafy.io/privkey.pem; # managed by Certbot
# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = 도메인 주소) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name 도메인 주소;
return 404; # managed by Certbot
}
그 후에 차례대로 실행
# 다음 명령어에서 successful이 뜨면 nginx를 실행할 수 있다.
sudo nginx -t
sudo systemctl restart nginx
Openvidu을 실행해 보자
# openvidu 폴더안에서 실행 해야한다.
$ ./openvidu start

팀 프로젝트에서는 Openvidu 포트를 8443을 하였다. 이유는 Nginx 포트는 기본포트로 80 포트, 443 포트를 사용하기 때문이다.
8443을 사용하거나 다른 포트를 이용한다면 똑같이 EC2에 보안그룹에서 인바운드 규칙을 추가해 주면 된다.
포트를 바꾼다면 꼭 한 번은 기본포트로 Openvidu을 실행해야 한다!! (제일 중요!!!)
- Nginx을 사용한다면 꼭 Openvidu을 먼저 설치하고 그다음으로 Nginx 서버를 설치해야 한다.
# HTTP_PORT와 HTTPS_PORT는 letsencrypt 방식의 키를 발급 받기 전까진 기본 포트인 80, 443을 사용해야 합니다!
# 키를 발급받고 난 후부터는 포트 변경해도 무방합니다!
아마 이유는 SSL 인증서 발급받기 위해서인 거 같다.
처음부터 포트는 바꾸고 진행했더니 계속해서 인증서 오류가 나왔다.
# 무슨 오류인지 확인하고 싶다면
$ docker-compose logs -f nginx
URL을 복사하여 확인

참고 링크:
homedong/backend at develop · yesfordev/homedong
Openvidu 구축 과정 - 483759/Square4Us Wiki
Openvidu 구축 과정 - 483759/Square4Us GitHub Wiki
📺 WebRTC: Openvidu-Server 구축 과정 WebRTC 사용에 있어 Openvidu-Server를 구축하여 사용했습니다! Openvidu-Server를 구축하는데는 AWS EC2 Linux 환경, Docker와 Docker Compose가 필요합니다. Docker Install # 도커 설치
github-wiki-see.page
On premises - OpenVidu Docs
OpenVidu is deployed in production as a set of Docker containers managed with Docker Compose. You can deploy OpenVidu in any modern Linux distribution. You need root permissions to deploy OpenVidu. The recommended folder to install OpenVidu is /opt. Every
docs.openvidu.io
'Infra' 카테고리의 다른 글
| Docker + 스프링부트 SSL 인증서 적용해보기 (0) | 2023.04.04 |
|---|---|
| DockerFile 명령어 정리 (0) | 2023.04.04 |
| Docker로 개발서버 배포기 (0) | 2023.04.04 |