싸권's IT Story

자체 서버로 화상회의 시스템(Jitsi Meet)을 구축해보자_#2_Jitsi Meet 설치

싸권 2020. 4. 15. 21:02



오픈소스로 자유롭게 사용할 수 있는 화상회의 솔루션 "Jitsi Meet"를 설치해보자.

Jitsi Meet는 현재 지원하는 OS는 Ubuntu와 Debian 계열만을 지원하고 있다.

원하는 Linux 배포판을 이용하면 되겠지만, 많이 사용하고 있는 Ubuntu Server를 이용했다.

솔직히 이미 설치를 해봤기에 단순히 공유기 설정만 잘하면 되지 않을까 생각했는데,

너무 쉽게 생각했던지 몇가지 실수가 있었다.

그래도 설치는 했지만 지속적인 서버로 사용하기엔 또 걸림돌이 있었다.

그 부분은 설치를 설명하면서 언급하도록 하겠다.


전체적인 설치 가이드는 https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md#advanced-configuration 를 참고하면된다.



1. 공유기 설정 변경 


OS 설치는 생략하기로 하고, 공유기 설정을 변경하는 부분을 보도록 하자.

서버의 IP는 서버 설치 시 IP를 설정하거나 공유기에서 서버의 MAC Address에 IP를 할당하는 방법으로 고정으로 IP를 할당할 수 있다.

취향차이이긴 한데, 공유기에서 MAC Address에 IP를 할당하는 방법으로 설정했다.



내가 사용하고 있는 IPTime 공유기에서 제공하는 화면이다.

서버의 IP를 선택하고 등록하면 향후에는 MAC Address를 확인하고 항상 해당 IP를 할당한다.

별도 IP를 주고 싶다면 수동 주소 입력 후 MAC Address를 입력하여 수동등록하고 서버를 재부팅해준다.

이렇게 하면 재부팅시에도 항상 동일한 IP를 할당한다.


Jitsi Meet에서 사용하는 포트는 80, 443(또는 4443), 10000 으로 나와있다.

해당 포트는 공유기에서 서버 IP로 포트포워딩해준다.



공유기에서 포트포워딩을 해주는 부분인데, 4443은 혹시나 해서 추가해뒀다.

간략히 설명하면 외부에서 해당 공유기(DDNS 도메인명)로 들어오는 포트별로 내부 IP로 포트를 전달해주는 것이다.

필요시에는 포트 번호를 변경하여 전달해주면 되는데, Jitsi Meet 포트를 바꾸는 건 또다른 문제라서 일단 동일하게 포트포워딩을 해준다.

수정사항 ==> 10000 Port는 UDP 프로토콜 설정



2. Jitsi Meet 설치


기본적인 설치 방법은 위에 언급한 Install Guide와 동일하다.

일단 서버의 도메인명을 수정한다.(실제 화면캡쳐를 사용했으니 커맨드는 직접 치거나 Install Guide에서 복사하면 된다)


1. 외부에서 접속을 하기 위하여 서버의 도메인명을 지정한다.

   /etc/hosts 파일을 열어 127.0.0.1 옆에 공유기에서 설정한 DDNS 명을 추가한다.

  ubuntu의 경우 root 유저는 제공하지 않고(별도로 생성은 할 수 있다)있기 때문에 대부분의 명령은 sudo 명령을 이용한다.

  sudo 명령을 내릴 시에는 현재 유저의 패스워드를 입력한다(아마도 현재 유저는 초기 설치시 만들었을텐데 root 권한을 가지고 있다)



2. 패키지 다운로드 경로 지정

  jitsi meet 패키지를 다운로드 할 수 있도록 패키지 저장소를 추가한다.



  위와 같이 sudo 명령어로도 권한 거부가 나타난다.

  이럴때는 해당 디렉토리 모드를 변경해준다.




  위 두명령어로 패키지 저장소를 지정한다.


3. 패키지 설치

  Jitsi Meet는 기본적으로 Nginx를 사용하게 된다.

  기존에 웹서버를 사용하고 있다면 443 포트 충돌이 일어날 수 있지만, 

  신규 OS를 설치했기때문에 그런 걱정 없이 그냥 패키지를 설치하도록 한다.  

  아래와 같이 커맨드를 입력하여 패키지를 설치한다.


  sudo apt-get install apt-transport-https



  sudo apt-get update



  sudo apt-get -y install jitsi-meet




  설치 도중 위와 같이 hostname을 물어보는데, /etc/hosts 파일에 입력했던 DDNS 도메인명을 입력한다.



  인증서 생성을 하는 부분인데, 기존에 있을리가 없으니 신규로 생성하기로 한다.



  이렇게 정상적으로 패키지는 설치가 완료되었으며, TLS 인증을 위한 인증서 생성을 추가로 한다.

  데스크탑에서 크롬만 이용한다면 이 부분은 필요가 없다.

  하지만, 모바일 특히 Android에서는 꼭 필요한 부분이다. 인증서 생성을 하지 않으면 아이폰은 문제가 없는데 Android는 접속이 불가능하다.

  하는 김에 스마트폰도 연결되면 당연히 좋지 않겠나.


  sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh



  설치 시 이메일을 입력하는 부분이 있는데, 본인 이메일 아무거나 입력하면 된다.

  이 부분은 외부에서 서버 접근이 가능해야 한데, 80포트를 이용하기 때문에 공유기의 포트포워딩이 반드시 먼저 설정되어 있어야 한다.


4. NAT 환경에서의 설정 변경

  서버가 설치된 환경이 공유기를 통한 NAT로 구성된 환경이다.

  그래서 포트포워딩도 해주었는데, NAT 환경에서는 하나더 설정 변경이 필요하다.

  왜인지는 잘 모르겠지만, 화면을 보내주는 부분에서 외부에서의 접근 시 IP가 변경되는 것을 미리 알려줘야하는 듯 하다.

  아래 파일에 다음과 같이 내용을 추가한다.


  /etc/jitsi/videobridge/sip-communicator.properties  <- 파일에 아래 내용 추가

   org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>  <- 본인 서버의 IP 입력

   org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>  <- 공유기에서 확인되는 공인 IP 입력



   공인 IP는 네이버에 "내 IP"를 입력해도 되고, 공유기에서 확인하면 된다.



  공유기 메뉴에서 "시스템 요약 정보" 또는 "인터넷 설정 정보"를 보면 "외부 IP" 부분이 해당 공유기의 공인IP이다.

  변경 후 Jitsi Meet 서비스를 재시작해준다.


  sudo systemctl restart jitsi-videobridge2


  그런데 여기서 문제가 생긴다.

  대부분의 가정용 인터넷은 Dynamic IP이다. 주기적으로 IP가 변경될 수 있다는 것이다.

  그래서 지금은 당장 문제없이 사용할 수는 있으나 공인 IP를 재할당 받게 되면 이 부분도 변경이 필요하다.

  Jitsi Meet 서비스를 사용하기 전에 꼭 공인 IP를 확인해보고 만약 변경되었다면 위 파일을 재수정하고 서비스를 재가동하도록 하자.



3. Jitsi Meet로 화상회의를 해보자


여기까지 완료되면 이제 자유롭게 서버에 접속해서 화상회의를 할 수 있다.

Jitsi Meet는 Chrome만 지원하고 있으니 반드시 Chrome에서 접속한다.

화상회의내 기능들은 생략한다. 크게 어렵지 않은 편이다. 어느정도 한글화도 되어 있어서 접근이 쉬운 편이다.



https://DDNS 호스트명 <- 공유기의 DDNS 호스트명을 입력하면 위와 같이 화면이 나타난다.

기본적으로 계정은 없으며, 오른쪽 위 톱니바퀴를 눌러 프로필, 기기 설정이 가능하다.

아래에 화상회의 방 이름을 적고 "계속"을 누르면 방이 생성된다.

"test"를 입력하고 방을 생성해보았다.



이렇게 화면이 나타난다. 아직은 나만 있으니 화면에는 내 화면만 나타난다.

메뉴를 보다시피 화면공유, 채팅, 패스워드 설정 등 다양한 기능이 존재한다.

해당 방의 URL은 "https://DDNS이름/test"가 된다.

다른 데스크탑에서는 서버 접속 후 "test"입력하면 해당 방에 입장이 가능하다.

스마트폰(LG V40, Android)에서 접속을 추가로 해보겠다.



Google Play 스토어에서 "Jitsi Meet"를 검색해서 앱을 설치한다.



앱 설치 후 설정(세티라고 오타가 나있다) 서버 URL에 DDNS의 도메인을 입력한다.



위와 같이 화면에서 "test"를 입력하면 방에 입장이 가능하다.

기본적으로 해당 이름의 방이 있으면 입장이 되는 것이고, 없으면 방이 생성된다.



핸드폰에서 방에 입장시 이미 방이 있어서 핸드폰 화면이 아닌 상대방의 화면이 보인다.



데스크탑에서의 화면이다. 오른쪽 위에 내화면이 보이고 큰 화면으로 핸드폰에 입장한 사람의 화면이 나타난다.

순서는 클릭하면 조정이 가능하다.



아래쪽 여러화면 보기를 누르면 위와 같이 화면을 타일 형식으로 보여주고 선택시 해당 화면이 크게 나타난다.


정말 훌륭한 솔루션이다.

상용 솔루션 못지 않은 많은 기능이 있어서 정말 다양하게 이용할 수 있을 듯 하다.


이렇게 설치는 마쳤지만 이렇게 아무나 접속이 가능하다면 서버부하나 회선 트래픽에도 문제가 생길 수 있다.

그래서 특정 계정만 방을 생성할 수 있도록 수정이 가능하다. 물론 방 생성 후 초대자들은 계정입력 없이 입장이 가능하다.

다만, 그 계정이 웹에서 설정이 아닌 Command로 설정해야해서 좀 번거롭긴 하다.

패스워드도 맘대로 바꿀 수 있는 것도 아니고...


다음에 계정을 설정하는 법을 알아보도록 하겠다.