반응형

 

안녕하세요. 애드소프트 입니다.

오늘은 화상회의 오픈 소스인 Jitsi Meet의 self hosting을 주제를 다뤄 보려합니다.

설치 환경은 Ubuntu 18.4LTS 입니다.

 

설치에 관련된 정보는 다음을 참고하였습니다.

해당 문서의 설치 환경에 대한 제약 조건은 다음과 같습니다.

  • Debian 10 (Buster) 이상
  • Ubuntu 18.04 (Bionic Beaver) 이상

 

네트워크 통신 규격 및 프로세스 관계도

 

개요

  • 필수 패키지 설치
  • 도메인 등록
  • Universe repository(저장소) 활성화 및 jitsi 저장소 추가
  • jitsi 설치
  • 방화벽 설정구성
  • Let's Encrypt 인증서 생성
  • 설정 변경
  • 추가기능 설치 (Jigasi) SIP 클라이언트
  • 제거

 

필수 패키지 설치

필수로 설치해야 할 항목들입니다.

gnupg2, apt-transport-https

 

시스템이 최신 상태이고 필수 패키지가 설치되어 있는지 확인합니다.

#해당 명령령은 root 권한으로 변경 후 실행하거나 앞에 sudo를 붙여 실행
#등록된 모든 저장소의 최신패키지를 검색해 업데이트
sudo apt update

sudo apt install gnupg2

#HTTPS를 사용하는 저장소의 지원을 위한 패키지를 설치
sudo apt install apt-transport-https

 

▶ Universe 패키지 저장소 종속성 활성화

Ubuntu의 Universe 패키지 저장소를 활성화 합니다.

sudo apt-add-repsitory universe

sudo apt update

 

▶ 도메인등록

외부도메인을 사용 할 경우 포트포워딩 만으로 쉽게 설치 가능 하지만 도메인이 없을 경우엔 설정할 부분들이 꽤 있습니다.

 

1. 외부도메인(FQDN)을 사용할 경우.

* FQDN은 Full Query Domain Name, meet.example.org가 FQDN이라면 www는 호스트이고 example.org는 도메인이 된다. 이를 합쳐 FQDN이라고 하는 듯 하다.

sudo hostnamectl set-hostname meet

명령을 실행한 후 /etc/hosts 파일에 동일한 FQDN을 추가하여 루프백 주소와 연결합니다.

 

 

sudo nano /etc/hosts

#nano가 존재하지 않을 경우
sudo apt-get install nano
127.0.0.1 localhost
x.x.x.x meet.example.org meet

meet.example.org는 FQDN으로 유료 DNS에 가입되어 있는 URL를 의미 합니다.

x.x.x.x 는 해당 PC가 외부로 나가는 공인 IP를 의미 합니다. (나의 공인IP 찾기)

PC가 공인아이피를 사용하지 않을 경우는 꼭 공유기에서 포트포워딩을 해줘야 됩니다.

 

포트포워딩은 인터넷 상에 정보가 많으니 참고 바랍니다. 참고

 

포워딩할 포트 목록

  • 80 TCP - Let 's Encrypt를 사용한 SSL 인증서 확인 / 갱신 용
  • 443 TCP - Jitsi Meet에 대한 일반 액세스 용(HTTPS)
  • 10000 UDP-일반 네트워크 비디오 / 오디오 통신용
  • 22 TCP-SSH를 사용하여 서버에 액세스하는 경우 (22가 아닌 경우 적절하게 포트 변경)

 

ping "$(hostname)"

모두 설정이 되었다면 meet.example.org가 표시되어야 합니다.

 

이 부분은 딱히 설정하지 않고 건너뛰어도 무방한거 같습니다.

 

::todo 추후 페이지 추가

2. 도메인이 없을 경우.

   -> 공유기의 DDNS 기능을 이용하여 추가하는 방법은 다음을 참고 : 공유기 DDNS 설정하기(todo link)

▶ Jitsi meet 저장소 추가

    Jitsi meet 패키지를 사용하기 위해서 다음 명령을 실행하여 저장소를 추가합니다.

curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null

sudo apt update

한줄씩 따로 실행하는게 오류 났을때 처리가 쉽습니다.

 

▶ 방화벽 설정 구성

 

Jitsi Meet 서버에 대한 연결을 허용하려면 방화벽에서 다음 포트를 열어야합니다.

  • 80 TCP - Let 's Encrypt를 사용한 SSL 인증서 확인 / 갱신 용
  • 443 TCP - Jitsi Meet에 대한 일반 액세스 용(HTTPS)
  • 10000 UDP-일반 네트워크 비디오 / 오디오 통신용
  • 22 TCP-SSH를 사용하여 서버에 액세스하는 경우 (22가 아닌 경우 적절하게 포트 변경)
  • 3478 UDP-스턴 서버 (coturn, 옵션, 활성화하려면 config.js 변경 필요)
  • 5349 TCP-TCP를 통한 대체 네트워크 비디오 / 오디오 통신 (예 : UDP가 차단 된 경우), coturn에서 제공

방화벽 변경은 ufw 명령어를 이용하여 변경 가능합니다.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 22/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable

다음을 사용하여 방화벽 상태를 확인

sudo ufw status verbose

▶ Jitsi Meet 설치

동일한 시스템에 443 포트를 사용하고 있는지 확인합니다.

netstat -nap | grep 443

사용하고 있다면 Apache나 Nginx가 설치 되어 있으므로 turnserver 설정이 스킵 됩니다.

sudo apt install jitsi-meet

설치를 시작하면 다음 사항을 입력하게 됩니다.

SSL/TLS certificate generation.

인증서를 새로 생성하거나 기존 인증서가 있을 경우 선택하라고 물어봅니다.

그냥 새로 생성하기를 눌러줍니다.

Hostname 부분은 IP나 domain을 입력합니다.

 

모바일을 사용하기 위해서는 Let's Encrypt 인증서를 생성해야 합니다.

모바일을 지원하지 않을 경우 그냥 지나치셔도 됩니다.

 

80포트가 열려 있어야 하고, domain이 정확하다면 이메일 입력 만으로 쉽게 처리됩니다.

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

마지막으로  공유기를 사용하시는 분들은 

sudo nano /etc/jitsi/videobridge/sip-communicator.properties

입력하고 최상단에 다음 구문을 넣어 줍니다.

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<로컬아이피 ex. 192.168.x.x>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<공인IP ex. 211.222.x.x>

<> 안의 아이피는 보인에게 할당된 IP를 입력하시면됩니다.

변경사항이 있다면 다음과 같은 명령어로 데몬을 재시작 하실 수 있습니다.

#systemd 재시작
sudo systemctl daemon-reload

#videobridge2 재시작
sudo systemctl restart jitsi-videobridge2

#상태확인
sudo systemctl status jitsi-videobridge2

이상으로 Jitsi meet 설치가 완료 되었습니다.

 

웹브라우저를 열고 설치한 hostname을 입력 하시면 해당 페이지가 열릴 것입니다.

 

▶ 추가기능 설치 SIP-Gateway

sudo apt install jigasi

설치하는 동안 SIP 계정과 암호를 입력하라는 메시지가 표시됩니다. 이 계정은 다른 SIP 참가자를 초대하는 데 사용됩니다.

 

jigasi를 설치 하시면 sip-gateway를 추가 하실 수 있습니다.

이는 SIP 클라이언트가 회의에 참가할 수 있도록 합니다.

 

 

▶ Jitsi Meet 제거

sudo apt purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-turnserver jitsi-meet-web jicofo jitsi-videobridge2

패키지가 제대로 제거되지 않을 경우가 있습니다.

이 경우 제저 명령을 두 번 실행하면 정상입니다.

 

▶ Nginx를 제거 하고 싶다면...

sudo apt-get purge nginx nginx-common

#Ubuntu 14.04 버전을 사용한다면
sudo apt-get remove nginx-full nginx-common

#실행 후 종속성이 없어진 패키지를 자동으로 정리해 줍니다.
sudo apt-get autoremove

#남은 환경설정 파일도 지워줍니다.
rm -rf /etc/nginx

 

이상으로 포스팅을 마치겠습니다.

항상 행복하길 바랍니다.

반응형

'개발기록 > 기타개발기록' 카테고리의 다른 글

무료 인증서 소개 ( sslforfree )  (0) 2021.04.01
무료 SSL ( ZeroSSL )이 있었네요.  (0) 2021.04.01
반응형

안녕하세요. #애드소프트 입니다.

오늘은 어제 작업하다만 기능을 완성 시킬려고 합니다.

아무도 보지 않는 글을 어김없이 찾아와서 쓰고 있습니다. ㅎㅎ

조이스틱(게임패드)를 넣었는데 크기가 너무커 화면을 많이 가려지게 되더군요.

이것은 쉽게 수정 가능합니다.

파란색 원을 드레그 하여 크기를 조정하고, 오브젝트를 선택하여 이동하시면 됩니다.

점프 기능을 추가해보겠습니다.

Hierarchy 창에서 Canvas 밑에 Button을 추가합니다.

그 다음 위치와 크기를 조이스틱 처럼 이동 시킨 후 다음 작업을 시작합니다.

Inspector 창에서 Image 속성을 보면 위 화면 처럼 나오는데 붉은색으로 표시된 타겟 버튼을 누르시면

소스 이미지를 변경할 수 있습니다. 간단히 샘플에 들어 있는 Knob를 선택했습니다.

단순히 버튼 모양을 원으로 바꾸는 작업입니다.

그리고 버튼에 적혀진 택스트는 지워줬습니다. 간단히 지울 수 있으니 한번 찾아보시기 바랍니다

다음 창에서 PlayerController를 열어 Visual Studio 2019를 실행합니다.

상단에 다음 변수를 선언합니다.

public Button jumpButton; 
private bool bJumpButtonClick = false;

Update 함수를 다음과 같이 수정합니다.

protected override void Update() 
{ 
	if (controlEnabled) 
    { 
    	move.x = joystick.Horizontal; 
    	if (jumpState == JumpState.Grounded && bJumpButtonClick) 
        	jumpState = JumpState.PrepareToJump; 
        else if (!bJumpButtonClick) 
        { 
            	stopJump = true; Schedule<PlayerStopJump>().player = this; 
        } 
        else 
        { 
        	move.x = 0; 
        } 
        
        UpdateJumpState(); 
        base.Update(); 
     }
}

맨 아래에 다음코드를 삽입합니다.

public void JumpOnClick() 
{ 
	bJumpButtonClick = true; 
} 

public void JumpOnClickUp() 
{ 
	bJumpButtonClick = false; 
}

 

소스 수정이 끝났으니 수정 후 유니티로 돌아 옵니다.

잠시 소스가 적용되는 동안 버퍼링 되니 기다려 줍니다.

 

Hierarchy창의 Player를 선택한 후 Inspector 창의 PlayerController 스크립트에 추가된 Jump Button 속성에

Canvas에 생성 된 버튼을 드래그하여 적용 시켜 줍니다.

 

마지막으로 Hierarchy창의 Button 오브젝트를 찾아 선택합니다.

Button 속성을 보면 On Click () 항목이 비어 있는데 여기 밑쪽을 보면 Add Component라는 버튼이 있습니다.

Event => Event Trigger를 찾아 추가해주시고 Add New Event Type버튼을 누른 후 Point Down과 Pointer Up을 찾 아 주가해 줍니다.

추가된 트리거 안에 + 버튼을 누르시면 새로운 함수를 연결 할 수 있도록 항목이 생깁니다.

처음 드랍박스에는 Editor And Runtime을 선택합니다.

이걸 선택하는 이유는 유니티 플레이어에 적용되는지 간단히 확인하기 위함입니다.

첫 드랍박스 밑에 있는 타켓 속성은 옆에 있는 원을 찾아 누른 후 검색창에 Player라고 검색한 후

플레이어 오브젝트를 선택하여 줍니다.

Down 트리거의 함수는 PlayerController -> JumpOnClick 함수를 선택합니다.

Up 트리거의 함수는 PlayerController -> JumpOnClickUp 함수를 선택합니다.

플레이 버튼을 눌러 보시면 동작하는 것을 확인 하실 수 있습니다.

화면을 가로모드로 고정해야 겠어요. ㅎㅎ

앞이 안보이니 게임이 재미가 없을 것 같습니다.

File -> Build Settings -> Player Settings 로 이동합니다.

위 이미지에서 보이는 Auto Rotation을 변경하면 될 것 같네요.

Landscape Right나 Landscape Left 맘에 드시는 방향을 선택하면 되겠네요.

기준 화면에서 왼쪽이나 오른쪽이나 돌리는 방향을 말하는거 같습니다.

다음은 무엇을 해볼 지 고민 좀 해보고 돌아 오도록 하겠습니다.

수고하셨습니다.

반응형
반응형

안녕하세요.

오늘은 학습도구를 이용하여 게임 이름 설정 및 안드로이드 빌드 방법 및 안드로이드 상에서 터치를 구현하도록 하겠습니다.

게임 이름 설정은 튜토리얼에 잘 기록 되어 있으니 참고 하시면 좋을거 같습니다.

전 게임 이름을 Running Franken 이라고 하였습니다.

링크를 따라 제작 하셨다면 화면색은 저렇진 않아도 앞에 메뉴바가 나오는거 까진 가능 할 것으로 보입니다.

튜토리얼을 쭉 찾아봤지만 모바일을 위한 스크립팅이 없어 추가 해 보기로 했습니다.

저의 목표는 안드로이드에서 구동하는 것이니까요

우선 모바일 개발을 위한 유니티의 터치 시스템은 터치의 여러 속성을 모니터링 할 수 있는것으로 보입니다.

우선 터치의 여러 속성중 터치가 될때 즉 화면이 눌러질때 상태에 대해 보겠습니다.

Began

손가락으로 화면을 누르기 시작했다.

Moved

손가락으로 화면을 누른채 이동했다.

Stationary

손가락으로 화면을 누른채 대기중이다

Ended

손가락으로 화면을 더이상 누르지 않는다

Cancelled

이 터치에 대한 추적을 취소했다

유니티에서 터치 될때 동작 방식 정도는 알고 넘어가는게 좋을거 같아 설명해 뒀는데 저희는 미리 잘 만들어 진게 있다면 찾아 쓰는게 최고 겠지요?

Asset Store탭으로 이동해보면 검색 창이 하나 있습니다. 거기에 Joystick Pack 이라고 검색합니다.

내려 보시면 다음과 같은 에셋을 찾을 수 있습니다.

꽁짜니 그냥 다운받아 줍니다.

 

 

다운 받고 난 후에는 Import라고 바뀌어 있습니다. 눌러서 프로젝트로 가져옵니다.

 

다음과 같은 창이 뜨면 Import 눌러 프로젝트에 포함시켜 줍니다.

Hierarchy 창에서 마우스 오른쪽을 눌러 Canvas를 하나 만들어 줍니다.

Hierarchy 창의 Canvas가 생성되면 Project 창에서 Joystick Pack을 찾고

서브 항목 중 Prefabs를 찾습니다.

Prefabs로 이동 후 fixed Joystick을 찾아 생성한 Canvas 밑으로 끌어다 놓습니다.

다시 Player 오브젝트를 선택합니다.

Inspector 창에서 Player Controller (Script)를 찾아 속성 중 PlayerController찾아 더블클릭해 줍니다.

그러면 Visual Studio 2019가 열리며 소스를 불러옵니다.

조이스틱 정보를 사용할 변수를 선언합니다.

Update 함수를 다음과 같이 수정합니다.

 

public Joystick joystick; 
...
protected override void Update() 
{ 
	if (controlEnabled) 
    { move.x = joystick.Horizontal; 
...

잘이해가 안되신다면 다음 코드를 봐주세요.

저장 후 Unity로 돌아 옵니다.

Unity에서 Hirerarchy의 Player 오브젝트를 다시 선택해 보면

Inspector창의 Player Controller 스크립트 속성 중 좀전에 추가한 Joystick이 생성 되어 있습니다.

이 곳으로 Canvas에 생성한 Fixed Joystick 오브젝트를 끌어다 놓습니다.

한번 플레이 해 볼까요?

위의 빨간 표시된 버튼을 누르시면 실행 됩니다.

조이스틱 창이 엄정 크지만 동작을 하긴 합니다. ㅎㅎ

오늘은 시간이 없어 여기에서 정리해야 할 듯 합니다.

다음에는 조이스틱 크기와 위치를 조정하고 점프 기능도 추가 해보도록 하겠습니다.

반응형
반응형

설치할 때는 잘 몰랐습니다.

설치하고 공부하려고 하니 학습 탭이 보이더군요.

개발자에게 호기심은 어쩔 수 없나 봅니다.

그래서 학습 탭에 가보았습니다.

 

학습 탭으로 이동한 페이지입니다.

학습 탭에 가보니 너무 많은 게임을 학습할 수 있게 되어있었어요.

제가 좀 결정 장애가 있다 보니 30분 넘게 탐색하고 있더라 했죠.

 

그래서 처음 걸 주저 없이 골랐습니다.

위 이미지에 노란 별표 넣어 놨습니다.ㅎㅎ

한번 해봐야 할 것 같아서 먼저 다운로드해 보았어요.

별표 된 프로젝트를 선택하면 다음과 같이 팝업이 뜹니다.

프로젝트 열기를 누르면 허브를 통해 프로젝트를 Unity로 열어 줍니다.

팝업창을 보면 에디터 버전이 2019.4 버전이 확인되실 겁니다.

여기에서 에디터를 같은 버전으로 설치하는 것이 정신건강에 좋은 거 같아 권장 드립니다.

다른 버전으로 설치해도 상관은 없지만 이왕이면 안정적인 것으로 시작하는 게 좋을 거 같아요.

저희는 생초보니까요. ㅎㅎ 해보면 알겠지만 10년이 개발 경험에도 처음 보는 오류는 항상 당황스럽습니다.

시간을 들이면 문제 못 할 것까진 없지만 일하면서 하려고 하니 시간이 짧아 안정적으로 가는 걸로 하겠습니다.

여기까지 왔다면 튜토리얼도 한번 열어 보고 했는데 잘 모르겠네요 ㅎㅎ

무슨 게임인지는 알 거 같네요.

일단 프로젝트를 가져올 수 있을까 싶어 프로젝트 열기 먼저 해보겠습니다.

눌러보니 이런 창이 뜨면서 뭔가 실행되고 있습니다.

미리 한번 해본 거긴 하지만 첨엔 잘 안됐다는 게 함정...

로딩이 완료되면 다음과 같은 프로그램 화면을 볼 수 있습니다.

한번 해본 거지만 너무 생소해 별로 떠오르는 게 없습니다.

같이 한 번씩 눌러 보도록 할게요.

Get Started의 푸른색의 버튼을 선택해 보겠습니다.

저는 아무 반응도 없네요. 아니 처음에 뜬 팝업창 만 없어졌는데 아마도 Tutorials 패널이 생긴 건가 싶어요.

튜토리얼 패널은 맨 오른쪽의 회색 창입니다.

그곳을 보면 저는 이미 한번 진행해서 v 표시가 초록색으로 들어가 있는데 다시 해보겠습니다.

 

 

내용을 보니 프로그램 화면 중간에 존재하는 플레이 버튼을 선택하라고 표시되고 있습니다.

플레이한 후 종료하라고 다시 알려줘 스크린숏은 제외하도록 하겠습니다.

 

 

Next를 누르면 다음에 뭘 할지 다 알려 주네요. ㅎㅎ

내용을 보니 Hierachy 창 안에서 Player 게임 항목 찾아서 선택하는 거 같네요.

시키는 대로 해보겠습니다.

위의 세 번째 이미지를 확인해보면 inspector 창에서 Max Speed를 숫자 형식으로 변경하라고 알려줍니다.

 

전 Inspector의 Max Speed를 0으로 선택하고 다음을 선택하니 플레이 버튼을 선택하라고 하더군요

0을 넣었더니 방향만 바뀔 뿐 앞으로 뒤로 이동할 생각조차 않습니다.

여기 가지 완료하셨다면 다음 튜토리얼을 진행할 건지 문의합니다.

진행하겠다고 정하셨다면 확인을 누르면 현재 프로젝트가 변경된 것을 확인하고 저장할 것인지 Alert 창이 띕니다.

만약 이것을 저장하지 않는다면 이 프로젝트는 임시 폴더에 저장된 상태로 저장하지 않고 종료할 경우 자동으로 사라지는 것 같습니다.

다시 찾으려고 해도 찾을 수 없으니 저장하시는 걸 권장합니다.

저희는 저장할 거니 Save를 누르도록 하겠습니다.

저장을 누른 후 New Unity Project라고 저장되는데 다음에도 이 튜토리얼을 사용하고 싶다면 임시 폴더 이외에 File -> Save As를 통해 관리 중인 프로젝트 폴더로 저장하실 것을 권장합니다.

저 같은 경우 시간을 쪼개다 보니 잠시 멈췄다가 하려니 다시 이 프로젝트를 찾을 수 없었습니다.

그래서 다시 받아 다시 튜토리얼부터 시작하여 시키는 대로 하니 5-10 정도 안에 튜토리얼을 완성할 수 있었습니다.

글을 쓰다 보니 그저 튜토리얼인데 글까지 설명하는 게 무의미하다고 느껴져 생략하겠습니다.

튜토리얼 창에 뜬 것을 모두 완료 후 다음에 진행하기 위해 프로젝트를 제가 관리하는 폴더에 잘 모셔두고 왔습니다.

 

혹시 튜토리얼 진행 중 모르시는 것이 있다면 댓글 남겨 주시면 설명 업데이트하여 진행하겠습니다.

다음 강의에서는 이번 튜토리얼 진행 중 안드로이드 버전을 생성하기 위해 문제 발생하였는데 해결 방법을 다뤄 보겠습니다.

PC나 웹 GL를 이용하면 키보드를 이용할 수 있기 때문에 플레이 가능하지만 모바일은 동작하지 않는 것 함정이었습니다.

다음 강의는 툴에서 진행하는 튜토리얼 완료한 후 게임 에셋과 같이 프로젝트로 저장해 두었습니다.

다음 시간에 보어요.

반응형

+ Recent posts