[Openvidu] Openvidu 배포하기

ttaho·2024년 2월 6일
2
post-thumbnail

싸피의 공통 프로젝트에서 webRTC를 기반으로 영상통화 팬싸인회 플랫폼을 만들었다.
우리가 선택한 webRTC 프레임워크는 Openvidu 였는데, 이를 처음으로 배포한 과정을 기록하고자 한다.

우선 webRTC에 대해서 알아보자.

WebRTC 란?

WebRTC: Web Real-Time Communication 웹 브라우저 간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API

MDN Web Docs에 의하면 웹 어플리케이션과 사이트가 중간자 없이 브라우저 간에 오디오나 영상 미디어를 포착하고 마음대로 스트림할 뿐 아니라, 임의의 데이터도 교환할 수 있도록 하는 기술이라고 한다.

하지만 WebRTC 라고 해서 진짜로 서버를 사용하지 않는것이 아니다.

  1. 서버는 단지 웹 브라우저를 특정하기 위한 시그널링(Signaling)과정으로만 쓰인다.
  2. 시그널링을 마친 뒤 실제 데이터는 P2P 혹은 중개 서버를 통해 주고받는다.
    Signaling(시그널링) : 데이터를 교환하기 위한 RTCPeerConnection을 통해 메시지를 주고받기 위한 일련의 과정.

우리 프로젝트는 팬과 아티스트 간의 영상통화를 구현해야 하므로 webRTC 기술이 필요하다. 그 중 Openvidu 프레임워크를 사용해서 webRTC를 구현하였다.

Openvidu 배포하기

이제부터 Openvidu를 ec2 인스턴스에 배포해보겠다.

우선 Openvidu가 내부적으로 사용하는 포트를 열어주어야 한다.
Openvidu의 docs를 보면 할당하는 포트를 확인할 수 있다.

해당되는 포트를 모두 아래의 명령어를 통해 열어주자.

sudo ufw allow 포트번호

Openvidu를 배포하기 위해서 루트 권한이 필요하다.

sudo su

Openvidu를 설치하는데 권장되는 위치는 /opt 경로이므로 이동해주자.

cd /opt

다음 명령을 실행하여 Openvidu 설치 스크립트를 다운로드하고 실행한다.

curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh | bash

설정하기 .env

Openvidu를 배포하기 위해 Openvidu 관련 파일들을 설정해주어야 한다.

Openvidu 플랫폼 설정은 환경변수와 함께 .env 파일에 지정된다.
/opt/openvidu 경로로 이동하고 .env 파일을 수정하자.

cd openvidu
vi .env
# OpenVidu configuration
# ----------------------

# 도메인 이름. 만약 도메인이 없다면 public IP주소로 설정
DOMAIN_OR_PUBLIC_IP=도메인주소 or 탄력적 IP

# OpenVidu 서버에 연결하고 사용자가 OpenVidu 대시보드에 액세스하는 데 사용되는 OpenVidu Secret
OPENVIDU_SECRET=지정할 시크릿 키

# Certificate type:
# - selfsigned:  Self signed certificate. Not recommended for production use.
#                Users will see an ERROR when connected to web page.
# - owncert:     Valid certificate purchased in a Internet services company.
#                Please put the certificates files inside folder ./owncert
#                with names certificate.key and certificate.cert
# - letsencrypt: Generate a new certificate using letsencrypt. Please set the
#                required contact email for Let's Encrypt in LETSENCRYPT_EMAIL
#                variable.
# certbot에서 발급받은 ssl 인증서를 사용할 것이므로 letsencrypt
CERTIFICATE_TYPE=letsencrypt

# If CERTIFICATE_TYPE=letsencrypt, you need to configure a valid email for notifications
LETSENCRYPT_EMAIL=ssafy@gmail.com

# Proxy configuration
# If you want to change the ports on which openvidu listens, uncomment the following lines

# Allows any request to http://DOMAIN_OR_PUBLIC_IP:HTTP_PORT/ to be automatically
# redirected to https://DOMAIN_OR_PUBLIC_IP:HTTPS_PORT/.
# WARNING: the default port 80 cannot be changed during the first boot
# if you have chosen to deploy with the option CERTIFICATE_TYPE=letsencrypt
HTTP_PORT=8442

# Changes the port of all services exposed by OpenVidu.
# SDKs, REST clients and browsers will have to connect to this port
HTTPS_PORT=8443

위의 한글 주석을 참고한다.
또한 HTTP_PORT와 HTTPS_PORT를 변경해주었다.
왜냐하면 우리의 프로젝트는 80포트와 443포트를 이미 프론트엔드 Web Server에 할당해주고 있기때문에 변경이 필수적이었다.

다음으로 대망의 docker-compose.yml 이다.

설정하기 docker-compose.yml

우리의 프로젝트는 EC2 서버 한개에 여러개의 포트를 할당해서 배포된 상태이다.

이미 우리의 도메인에 HTTPS를 적용 시킨 상태이므로 해당 SSL 인증서가 호스트(EC2)의 /etc/letsencrypt 에 존재한다.

또한, Openvidu도 HTTPS를 기반으로 서비스가 동작하므로 이를 위한 SSL 인증서도 필요했다.

하지만 Openvidu는 도커 컨테이너로 실행중이므로, 호스트의 SSL 인증서를 Openvidu가 실행중인 컨테이너에도 적용시켜 주어야 한다!

처음에는 ssl 인증서를 컨테이너로 scp 명령어를 사용하여 복사시켜 주었는데, 이는 별로 좋은 방법이 아닌것 같아 호스트의 SSL 인증서가 들어있는 /etc/letsencrypt 디렉토리를 해당 컨테이너에 볼륨 마운트 해주는 방법을 선택했다.

하지만 기존에 도커 이미지를 run 시켜주는 방법과는 달리 Openvidu는 /opt/openvidu에서 ./openvidu start 명령어를 통해 실행시키므로 어떻게 볼륨 마운트를 해주어야 할지 어려웠다.

그러던 중 /opt/openvidu 의 docker-compose.yml을 열어보니, openvidu의 Nginx 관련 실행 명령어를 찾을 수 있었다.

volumes의 첫번째 라인을 위와 같이 수정해주었다.
/etc/letsencrypt를 도커 컨테이너의 /etc/letsencrypt로 볼륨 마운트 하게 설정해주었다.

실행하기

마지막으로, Openvidu를 실행시켜보자.

# /opt/openvidu
sudo ./openvidu start

서비스에 해당하는 모든 도커 이미지가 다운로드 되고 실행된다.
그리고 아래의 화면을 만날 수 있다.

----------------------------------------------------

   OpenVidu Platform is ready!
   ---------------------------

   * OpenVidu Server: https://DOMAIN_OR_PUBLIC_IP:8443/

   * OpenVidu Dashboard: https://DOMAIN_OR_PUBLIC_IP:8443/dashboard/

----------------------------------------------------

.env 파일에서 설정해준 HTTPS 포트인 8443으로 배포 되었다.

profile
백엔드 꿈나무

1개의 댓글

comment-user-thumbnail
2024년 11월 4일

안녕하세요. openvidu 인증서 관련 글을 찾아보다가 보게되어서 여쭤봅니다.
openssl로 인증키를 생성하고 letsencrypt 로 했는데, 인증서 문제가 계속 나오는 상황인데, 도움을 받을수 있을까 하여 여쭤봅니다.

답글 달기