ubuntu 배포서버 세팅
Public 서버
sudo apt update
sudo apt upgrade -y
# 깃 설치
sudo apt install -y git
# nginx 설치
apt install -y nginx
# cd /opt/ 해서 opt에 설치
# 프로젝트 클론 받기
git clone <https://github.com/law-n-road/law-n-road-release.git>
# Docker 설치
sudo apt install -y docker.io
# Docker 실행 및 부팅 시 자동 시작
sudo systemctl start docker
sudo systemctl enable docker
# Docker Compose 설치
sudo apt install -y docker-compose
# 도커 권한 추가 (현재 사용자 기준) root 상태면 생략
sudo usermod -aG docker $USER
# /opt/에 설치
# OpenVidu 최신버전으로 설치
curl [<https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh>](<https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh>) | bash
cd openvid
- openvidu는 배포환경에서 https 를 사용해야하므로, LetsEncrypt를 통해 발급받기
sudo apt-get install letsencrypt
sudo systemctl stop nginx # 반드시 끈 상태여야 함
sudo letsencrypt certonly --standalone -d lawnroad.kr
# 이메일 쓰고 Yes
# 뉴스레터 no
# 발급 확인
cd /etc/letsencrypt/live/lawnroad.kr
ls
# cert.pem chain.pem **fullchain.pem privkey.pem** README
nano /opt/openvidu/.env
# .env 파일 설정
DOMAIN_OR_PUBLIC_IP=lawnroad.kr
OPENVIDU_SECRET=lawnroad1234
CERTIFICATE_TYPE=letsencrypt
LETSENCRYPT_EMAIL=등록한 이메일
HTTP_PORT=8442
HTTPS_PORT=8443
# 아래는 필수는 아님
# 약한 네트워크에서 적절한 비트레이트로 연결이 유지
OPENVIDU_STREAMS_VIDEO_MAX_RECV_BANDWIDTH=1500
OPENVIDU_STREAMS_VIDEO_MIN_RECV_BANDWIDTH=300
OPENVIDU_STREAMS_VIDEO_MAX_SEND_BANDWIDTH=1500
OPENVIDU_STREAMS_VIDEO_MIN_SEND_BANDWIDTH=300
sudo chmod 755 /etc/letsencrypt/live/lawnroad.kr
sudo chmod 755 /etc/letsencrypt/archive/lawnroad.kr
sudo chmod 644 /etc/letsencrypt/live/lawnroad.kr/*
nano /opt/openvidu/docker-compose.yml
# compost 파일 수정
nginx:
volumes:
# 추가하기
- /etc/letsencrypt:/etc/letsencrypt:ro
sudo nano /etc/nginx/sites-available/lawroad-frontend
server {
# IPv4 전용으로 80 포트 리스닝
listen 80;
# 서비스할 서버 IP 또는 도메인
server_name lawnroad.kr;
# HTTP -> HTTPS 리다이렉션
return 301 https://$host$request_uri;
}
server {
# 프론트 빌드 결과물이 위치한 디렉토리
root /opt/law-n-road-release/frontend/dist;
index index.html;
# OpenVidu
listen 443 ssl;
server_name lawnroad.kr;
ssl_certificate /etc/letsencrypt/live/lawnroad.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/lawnroad.kr/privkey.pem;
# 파일 크기?
client_max_body_size 10G;
# /api 로 시작하는 모든 요청은 백엔드로 전달
location /api/ {
proxy_pass <http://10.0.2.6:8080>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 웹소켓 프록시 추가
location /ws/ {
proxy_pass <http://10.0.2.6:8080>; # 또는 localhost
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
# OpenVidu WebSocket 및 REST API
location /openvidu/ {
proxy_pass <https://localhost:443/>;
proxy_ssl_verify off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
location /oauth2/ {
proxy_pass <http://10.0.2.6:8080>;
proxy_set_header Host $host;
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 Cookie $http_cookie;
}
location /login/ {
proxy_pass <http://10.0.2.6:8080>;
proxy_set_header Host $host;
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 Cookie $http_cookie;
}
location /mail/ {
proxy_pass <http://10.0.2.6:8080>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# SPA 라우팅 대응: 존재하지 않는 파일요청은 index.html로 fallback
location / {
try_files $uri $uri/ /index.html;
}
}
# 확인 및 재시작
nginx -t && systemctl restart nginx
docker-compose up -d
# 확인
docker ps
🔒 Inbound 규칙 (외부 → 서버로 들어오는 요청 허용)