[카카오 프로젝트] 오픈비두 설정

paduck·2023년 3월 18일
0

프로젝트

목록 보기
2/11

1) 오픈비두 사용

2) 프로젝트 환경은 EC2 인스턴스 위에 WebRTC 어플리케이션 배포

배포 가능한 방법은 2가지 (이해가 정확하지 않을 수 이씀...)

    1. 공식 문서에 따라 AWS Cloudformation 을 활용해서 등록
      - 이 부분에서의 문제는 사용자가 적용할 어플리케이션 파일을 어떻게 탑재시킬 것인가
      - 공식 유트브 에 따르면 aws 자체적으로 배포한 서비스의 주소를 스택에 연결
    1. 공식 문서 에 따라 인스턴스 안에 openvidu 기반 앱을 만들고 도커 이미지를 활용해 실행
      - docker-compose 파일에 모든 컨테이너가 들어있어 하나씩 확인해봐야 많은 커스텀이 가능

이 이외의 서비스가 많이 존재하여 빠른 개발과 배포를 위해 2번 방법 적용

그러면 어떻게 배포하는가?

2.26.0 버전을 기반으로 작성된 문서입니다

1. EC2 보안 그룹 설정

openvidu 이미지는 굉장히 많은 포트를 자체적으로 이용합니다.

해당 포트에 대한 설정을 해줄 필요가 있습니다.

2. 도커 와 도커 컴포스 설치

openvidu 에서 배포하는 파일은 도커 컴포스 기반 파일입니다.
그래서 도커와 도커 컴포스를 필수적으로 깔아주어야 합니다.
(실질적으로 도커와 도커 컴포스의 기능이 사용되지는 않으니, 이 부분에 대한 학습은 불필요해 보입니다)

3. 오픈비두 배포 파일 받기

// 관리자 권한 설정
sudo su

// 오픈비두 다운로드 받을 폴더 지정
// 해당 경로는 권장일 뿐, 필수는 아님
cd /opt

// 다운로드 스크립트 실행
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh | bash
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_${특정버전}.sh | bash

파일 안에는 오픈비두 실행에 핵심적인 내용이 들어있습니다.
추후 실행 명령어를 작성하면 docker-compose.override.yml 파일이 돌아 오픈비두를 실행시켜줍니다.
(커스텀 역시 저 파일을 변경하면 되겠죠?)

4. 오픈비두 실행

다운로드가 완료되면 쉘에 해당 문구가 확인될 것입니다.

다만, 실행하려면 환경 설정 파일에서 몇 가지를 수정해주어야 하는데

DOMAIN_OR_PUBLIC_IP 에 EC2 의 퍼블릭 IP 를 작성하고,
OPENVIDU_SECRET 에 사용자 임의 암호를 설정합니다

이렇게 실행했을 경우 dashboard 로 접근해 테스트와 로그를 확인할 수는 있지만,
실질적인 WebRTC 통신이 이루어지지는 않습니다.
아마, 기본으로 주어지는 docker-compose 파일의 server에는 로그인 처리 기능이 없는 것 같습니다.

5. 오픈비두 커스텀

일단, 테스트를 위한 작업만 진행하고 있었기 때문에 server 코드에 대한 학습이나 확인은 이루어지지 않았습니다.
해당 내용도 확인하게 되면 추가 포스팅으로 업로드 하겠습니다.

결국, 중요한 것은 오픈비두에서 얘기하는 것처럼 세션과 토큰의 발급 등이 정상적으로 이루어지는지 확인하는 것이 아닐까 생각됩니다.

저희 프로젝트의 프론트엔드 작업은 react로 진행될 예정이기 때문에 openvidu-react 샘플 파일을 사용하였습니다.

해당 파일 안에는 docker 이미지를 자동으로 생성해주기 위한 스크립트가 이미 작성되어 있기 때문에,
openvidu-react/docker 폴더에 접속하여 이미지 생성 명령어를 작성해주시면 됩니다.

./create_image.sh openvidu/openvidu-react-demo:X.Y.Z
./create_image.sh openvidu/${사용자 이미지 이름}

이 모든 과정이 EC2 내에서 이루어지기 때문에 추가적인 도커 이미지 푸쉬의 과정은 불필요 합니다.

사용할 클라이언트 파일이 만들어졌다면, openvidu deploy 파일이 이를 적용할 수 있게 설정해줘야 합니다.

// 기존에 존재하던 파일 삭제
rm docker-compose.override.yml

재실행해도 당연하게도 docker-compose.override 파일은 재생성되지 않습니다.
그렇다면, 수기로 해당 파일을 만들어줘야겠죠?

// docker-compose.override.yml 파일 예시
version: '3.1'

services:
    app:
        image: ${사용자 이미지:태그}
        restart: on-failure
        network_mode: host
        environment:
            - SERVER_PORT=5442
            - OPENVIDU_URL=http://localhost:5443
            - OPENVIDU_SECRET=${사용자 secret}

재실행시 설정한 이미지로 정상 작동됨을 확인할 수 있습니다.

6. SSL 설정

너무 당연하게도 해당 과정은 http로 진행이 되고 있습니다.
테스트 단에는 전혀 문제가 없지만, 사용자가 해당 경로로 접근한다면 보안 관련 팝업이 계속 나타나겠죠.
또, IP 주소를 치고 접속해야 하기 때문에, 접근성도 떨어질 것입니다.

이를 위해 도메인과 SSL 설정을 해줄 필요가 있습니다.
다행인 점은 openvidu 에서 권장하는 letsencrypt 방식을 직접 설정해준다는 점입니다.

실행되고 있는 도커 컨테이너를 확인해보면 서버와 프록시가 존재합니다.
해당 프록시내 접근시 기본적으로 nginx가 사용되고 있고, letsencrypt에 대한 설정이 적용되어 있습니다.

그래서 이를 적용하기 위해서 위에서 언급했던 openvidu .env 파일의 일부 항목을 수정해야 합니다

CERTIFICATE_TYPE=letsencrypt
LETSENCRYPT_EMAIL=사용자 이메일

두 항목만 수정한다면 자동으로 ssl 설정이 완료됩니다.
다만, 도메인 발급은 직접 하셔야겠죠..?

실질적인 커스텀에 대한 의문

그런데 지금까지 진행했던 과정을 '커스텀'이라고 하기에는 많은 부족함이 있을 것 같습니다.
결국 이미지 하나만 바꾸고, ssl 설정만 해줬을 뿐이니까요.

흔히 생각할 수 있는 입장 인원의 제한, 비공개 세션 유무 등의 기본적인 기능에 대해서 어떤 식으로 처리할지가 문제라고 생각합니다.

이 역시 제공해주는 도커 컴포즈 파일을 변경하거나, server 파일을 이미지로 만들어 도커 실행시 같이 실행해주게 하는 방식으로 적용하는 방법이 일단은 생각이 나더라구요

또, letsencrypt에서 ssl 설정을 완료했을 때 해당 주소로 최초 접속시 시간이 굉장히 오래걸린다는 점입니다.
만약 이게 ssl 발급 과정에서의 문제라면 결국 다른 방식을 통해 인증 처리를 해줘야 되지 않을까 고민이 됩니다

앞으로,

결국 프로젝트 완성을 위해 해당 부분은 개선이 되어야 할 것 같습니다.
추후 포스팅을 통해 어떤 부분을 수정했는지, 참고했는지에 대한 내용을 누적해나가겠습니다.

profile
끈질기게 들러붙기

0개의 댓글