기존에 운영하던 RTC 서버가 노후화되면서 검사 도중 서버가 다운되는 현상이 잦아졌다. 따라서 새로운 서버 2대를 임대했는데, RTC 서버를 직접 세팅하게 되어서 해당 과정을 기록용으로 남기고자 한다.
※ sudo 권한으로 실행해야한다.
sudo su -
최신 패키지로 업데이트
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git curl wget vim
limits.conf 파일 업데이트 (서버의 각 유저들이 열 수 있는 최대 파일 개수를 업데이트한다)
/etc/security/limits.conf 파일의 맨 아래에 다음과 같은 내용을 추가한다.
* soft nofile 1048576
* hard nofile 1048576
ulimit -a 으로 확인만약 초기 설정값인 1024를 그대로 사용하면, 동시 접속자가 많아질 경우 "too many open files" 에러가 발생할 수 있다.
그렇다고 max값(1048576)으로 무조건 크게 늘리는 것도 좋은 선택은 아니다.
프로세스가 백그라운드로 실행될 때, 시작 단계에서 열려 있을 수 있는 파일들을 정리하는 작업을 수행한다.
이때 nofile 값만큼 반복하면서 close()를 호출하는데, 값이 1000만이라면 프로세스가 시작될 때마다 close()를 1000만번 호출하게 된다
close(3)
close(4)
close(5)
...
close(10000000) // nofile이 천만이면 여기까지
실제로 열린 파일은 몇 개 되지 않지만, "혹시 몰라서" 1000만번을 전부 확인하는 셈이다. 따라서 프로세스 시작이 1~2초 느려질 수 있다
참고: https://lunatine.net/2014/05/28/limits-conf-nofile-big-value-effect/
sysctl.conf 파일 업데이트 (시스템의 전체적인 설정 값을 넣어주는 작업이다)
/etc/sysctl.conf 파일에 다음과 같은 내용을 추가한다.
fs.file-max = 2097152
net.core.somaxconn = 65535
net.core.netdev_max_backlog= 8192
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.optmem_max = 262144
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes= 5
net.netfilter.nf_conntrack_max = 1048576
net.nf_conntrack_max = 1048576
저장 후, reboot 진행
sudo sysctl -p or sudo reboot
sudo apt install -y certbot python3-certbot-nginx
<유료 도메인>
가비아에서 도메인 추가
혹은
후이즈에서 도메인 추가
<무료 도메인>
내도메인.한국에서 도메인 추가
sudo apt install nginx
인바인드 보안규칙 설정
default 파일 업데이트
/etc/nginx/sites-available/default 파일에 아래 내용을 넣는다.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
server {
server_name 도메인명;
client_max_body_size 500M;
location / {
proxy_pass http://localhost:포트번호;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-NginX-Proxy true;
proxy_pass_header Set-Cookie;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 60;
keepalive_timeout 75;
}
}
(참고)
🔽 새로 등록한 도메인에 대해 Https 및 포트 연동 하기 (Certbot 실행하기)
만약 certbot 인증서를 발급할 때 에러가 발생한다면, 80(443) 포트에 대한 방화벽을 허용해야한다. (인바운드 규칙을 설정했어도, 서버 방화벽이 80번 포트를 막고 있을 수 있다)
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
(+) iptables -L : 리눅스 시스템의 방화벽 규칙을 조회해서 내부 포트가 잘 열려있는지 확인해주기
Nginx 자동 시작 설정
# Nginx 서비스 상태 확인
sudo systemctl status nginx
# 자동 시작 설정 여부 확인
sudo systemctl is-enabled nginx
# enabled: 자동 시작 O
# disabled: 자동 시작 X
# Nginx를 부팅 시 자동으로 시작하도록 설정
sudo systemctl enable nginx
sudo apt install coturn
→ coturn을 설치하면 TURN 서버 (턴서버)를 운영할 수 있다.
※ TURN 서버란?
WebRTC는 P2P(개인-개인) 통신을 기본으로 하기 때문에 클라이언트끼리 직접 연결해서 영상/음성을 주고받는다.
문제는 대부분의 사용자가 공유기(NAT) 뒤에 있어 서로의 주소(IP)를 알 수 없어 직접 연결이 불가능하다는 점이다.
이 경우 각 단말기는 공인 IP를 가진 서버를 경유해서 통신해야 한다.
TURN 서버는 이러한 상황에서 중계 서버 역할을 해주고 coturn은 TURN 서버를 구현한 오픈소스 프로그램이다.
WebRTC가 연결을 시도하는 방법에는 STUN과 TURN이 있다.
A ──→ STUN 서버: "내 공인 IP가 뭐야?"
A ←── STUN 서버: "너 203.0.xxx.x이야"
A ──→ B에게 직접 연결 시도A ──→ TURN 서버 ──→ B
A ←── TURN 서버 ←── B모든 트래픽이 서버를 경유하기 때문에 NAT/방화벽 뒤에서도 100% 연결이 가능하다.
모든 환경에서 안정적인 연결을 보장하려면 TURN 서버가 필요하고, 이를 위해 coturn을 설치하여 사용한다.
/etc/turnserver.conf 파일 업데이트
turnserver 세팅
https://velog.io/@tmd0110/TURN-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0
/etc/default/coturn 파일 업데이트
TURNSERVER_ENABLED=1conturn 실행
sudo systemctl enable coturn
sudo systemctl start coturn
service coturn stats # 실행 확인
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
service redis-server status # 설치 확인
※ redis.conf 세팅도 필수!
npm install pm2@5.1.0 -g
Node.js 14버전 설치
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
소스코드 업로드
/main/WEBRTC_2022 업로드 후, 폴더 권한 설정
chown -R root:root WEBRTC_2022
스레드 수 40으로 설정
nano ecosystem.config.js 파일에서 instances: 40으로 설정소스코드 실행
npm install
npm start
# pm2 list → 스레드 수 40개 확인