겸손하기 꾸준하기 건강하기

[맛,잇다] 배포/트러블슈팅 EP1 (SSL 인증서 발급 및 OpenVidu 배포) 본문

project

[맛,잇다] 배포/트러블슈팅 EP1 (SSL 인증서 발급 및 OpenVidu 배포)

seminss 2024. 9. 1. 22:44

맛잇다에서 ①팀장, ②인프라, ③ 화상채팅(오픈비두+제스처 감지+ STT) 를 맡아 개발했다.

배포 과정에서 겪은 문제들, 배운 점들을 중점으로 간단하게 회고하고자 한다.

1. SSL 인증서 발급 및 OpenVidu 배포
2. 어플리케이션 및 인프라 구성
3. Nginx와 리버스 프록시 설정

 

🙇‍♀️ 공부하면서 작성한 내용이기 때문에, 틀린 부분이 있다면 여과 없이 지적해 주시면 감사하겠습니다. 🙇‍♀️


🎯 SSL 인증서 발급 및 Openvidu 배포

  • Nginx는 설치되어 있지 않은 상태. (설치되어 있다면 완전 삭제)
  • 실행 중인 컨테이너가 없는 상태 (docker ps로 확인)
  • 추가적인 포트 점유가 없는 상태 (netstat -lntp로 확인)

 

📌 SSL 인증서 발급 및 적용

오픈비두 같은 경우, 카메라를 사용하기 위해 반드시 https로 이용해야 하기 때문에, SSL인증서를 발급받아야 한다.

인증서 발급을 위해서는 도메인이 필요하다.

SSL 인증서 발급 시, 80 또는 443 포트가 방화벽에서 열려있는지 확인하자.

해당 포트가  Let's Encrypt에서 발급하는 과정에서 사용되기 때문이다.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
  • 또는 배포하는 과정에서 ufw disable을 통해 방화벽 설정을 해제하고, 추후 다시 닫아도 된다. (비권장)
sudo apt-get install letsencrypt
sudo letsencrypt certonly --standalone -d <도메인명:i11b206.p.ssafy.io>

위 명령어를 통해 인증서를 발급받는다.

 

인증서 발급이 성공하면 Congratulations! 어쩌구가 나와야한다.

 

발급 과정이 성공하면 /etc/letsencrypt/live/도메인명/ 디렉터리에 fullchain.pem, privkey.pem이 저장된다.

이 인증서는 추후 nginx에서 사용되기 때문에 경로에 잘 존재하는지 확인하는 것을 권장한다.

 

(사용 예시)

server {
    listen 443 ssl;
    server_name i11b206.p.ssafy.io;

    ssl_certificate /etc/letsencrypt/live/i11b206.p.ssafy.io/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/i11b206.p.ssafy.io/privkey.pem;

    ...
}

📌Openvidu 배포

sudo su

root 권한을 미리 얻는다.

cd /opt

오픈비두는 주로 /opt에 설치하는 것이 권장된다.(optional)

/opt는 시스템 관리 디렉터리다.

curl <https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_2.30.0.sh> | bash

오픈비두를 설치 한다.

알파 버전 중 가장 최신 버전을 사용했다. (2024.08.24)

 

설치가 완료되면 Openvidu의 환경 설정을 수정해야 한다.

nano .env

 

1차적으로는 아래와 같이 설정한다.

# OpenVidu configuration
# ----------------------
# 도메인 또는 퍼블릭IP 주소
DOMAIN_OR_PUBLIC_IP=i11b206.p.ssafy.io

# 오픈비두 서버와 통신을 위한 시크릿
OPENVIDU_SECRET=패스워드

# Certificate type
CERTIFICATE_TYPE=letsencrypt

# 인증서 타입이 letsencrypt일 경우 이메일 설정
LETSENCRYPT_EMAIL=seminkim1432@gmail.com

 

CERTIFICATE_TYPE=letsencrypt를 설정하여 자동으로 SSL 인증서가 적용되게 했다. 해당 설정은 HTTPS 통신을 위해 자동으로 SSL 인증서를 적용하도록 한다. Openvidu는 HTTPS를 통해 웹소켓 통신을 처리하기 때문에, 반드시 SSL 인증서가 필요하다.

# 실행
./openvidu start

# 종료
./openvidu stop

오픈비두를 실행 해보자. 실행해 보면, 설정한 도메인을 기반으로 접속할 수 있는 링크가 나온다.

openvidu 페이지에 접속이 되는지 확인한다.

 

성공이 되었다면 netstat -lntp로 포트를 확인해 보자.

 

포트 확인 시 성공적으로 80과 443이 nginx에 의해 사용되고 있다면 확인을 마치고 openvidu를 종료하자. 우리가 사용자에게 보여줄 페이지는 openvidu가 제공하는 페이지가 아닌, 우리 팀의 프론트 페이지어야 하기 때문에, 오픈비두가 다른 포트를 사용하도록 변경할 것이다.

nano .env

이번에는 HTTP와 HTTPS 설정을 한다.

# HTTP port
HTTP_PORT=8442

# HTTPS port
HTTPS_PORT=8443

 

기본 포트(80, 443)를 추후 자체 어플리케이션에서 사용할 것이기 때문에, 오픈비두는 8442와 8443을 사용하도록 설정했다. 당연하게도 동일한 포트를 여러 어플리케이션에서 사용할 수는 없다.

 

설정을 완료한 후에는 다시 오픈비두를 실행 해 포트 사용 상태를 확인해 본다.

# 실행
./openvidu start

# 포트 확인
netstat -lntp

이전에는 80, 443 포트를 Nginx가 점유하고 있었다면, 지금은 8442, 8443 포트가 점유하고 있어야 한다.

 

위 과정이 성공했다면,

  • USER : OPENVIDUAPP
  • 비밀번호 : 패스워드
  • :8443/dashboard로 하여 오픈비두 대시보드에 접속이 가능해야 한다.

 

++ 오픈비두 관련해서 팀원들을 위해 정리해둔 문서를 공유한다. (사실 별거 없어요..)

오픈비두 아키텍쳐 (OpenVidu 2.30.0) (notion.site)

오픈비두 뿌시기 (notion.site)

 


오픈비두를 처음 배포했을 때, 이미 리버스 프록시용 Nginx가 함께 배포되고, 80번과 443을 사용 중인 상태라 엄청 혼란스러웠다. 그렇지만 openvidu start(또는 docker compose up)로 실행되는 모든 컨테이너 중 실제 사용하는 것은 사실 오픈비두 서버뿐이라고 생각하면 이해하기 편하다..

 

오픈비두가 점유하는 포트를 수정하니 추후 자체 어플리케이션을 배포할 때 리버스 프록시 설정이 수월했다.

 


https://github.com/Tasty-Ties

 

Tasty-Ties

맛잇다: 온라인 쿠킹 클래스 서비스. Tasty-Ties has one repository available. Follow their code on GitHub.

github.com

 

참고 자료