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
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 규칙 (외부 → 서버로 들어오는 요청 허용)