Xubuntu + Nginx + Go(+ Pion/WebRTC) + Node.js
소개
Xubuntu, Nginx, Go로 개발 환경을 만들어 보도록 하겠습니다.
환경
쉬분투
먼저 디렉토리 이름을 영어로 변경합니다.
LANG=C xdg-user-dirs-gtk-update
그런 다음 몇 가지 응용 프로그램을 설치합니다.
apt에 의해 설치됨
패키지 설치
Go 및 Node.js 설치
가다
설치 가이드에 따라 Go를 다운로드하여 설치할 수 있습니다.
PATH 환경 변수에 "/usr/local/go/bin"을 추가하기 위해 이 명령을 실행합니다.
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
설치 후 my Go project을 복제합니다.
Node.js
TypeScript, Webpack 등을 사용하기 위해 Node.js 설명서에 따라 NodeSource를 사용하여 Node.js를 설치합니다.
엔진엑스
설치 중
설명서에 따라 Nginx를 설치합니다.
Go 프로젝트 제공
인터넷의 일부 블로그 게시물 및 문서에서 찾은 내용에 따르면 Nginx는 Reverse Proxy를 사용하여 Go 프로젝트를 제공하는 것으로 보입니다.
그리고 로컬 네트워크로 연결된 일부 PC와 스마트폰에서 WebRTC 샘플 페이지에 접근하고 싶기 때문에 htttps를 통해 서비스해야 합니다.
리버스 프록시
리버스 프록시를 사용하기 위해 Nginx 구성 파일을 편집할 수 있습니다.
보통은 "/etc/nginx/nginx.conf"에 쓸 수 있지만 Port:80의 경우 "/etc/nginx/conf.d/default.conf"에 써야 합니다.
default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# When clients access "http://localhost/webrtc", Nginx redirect to "http://localhost:8080"
location /webrtc {
proxy_pass http://localhost:8080;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
https
htttps를 통해 페이지를 제공하려면 인증서를 만들고 구성해야 합니다.
이번에는 개발용으로만 mkcert로 로컬에서 신뢰할 수 있는 개발 인증서를 생성합니다.
README에 따라 미리 빌드된 바이너리를 설치합니다.
"mkcert -install"을 실행한 후 인증서 및 키 파일을 생성할 수 있습니다.
mkcert -key-file local_key.pem -cert-file local_cert.pem 192.168.XX.YYY
"192.168.XX.YYY"는 내 컴퓨터의 IP 주소를 나타냅니다.
이번에는 홈디렉토리(/home/example)에 저장했습니다.
그런 다음 "/etc/nginx/nginx.conf"를 업데이트합니다.
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
#when clients access "https://192.168.XX.YYY:443/webrtc",
#the server will serve "webappsample".
server {
listen 443 ssl;
server_name 192.168.XX.YYY;
ssl_certificate /home/example/local_cert.pem;
ssl_certificate_key /home/example/local_key.pem;
location /webrtc {
proxy_pass http://localhost:8080;
}
}
}
내 WebRTC 프로젝트 제공(webappsample)
내 WebRTC 프로젝트를 제공하려면 업데이트해야 합니다.
경로
페이지는 리버스 프록시와 함께 제공되기 때문에 해당 URL이 변경됩니다.
index.html
<!DOCTYPE html>
<html>
<head>
<title>WebRTC Sample</title>
<meta charset="utf-8">
<link href="{{.}}/css/site.css" rel="stylesheet" />
</head>
<body>
...
<script src="{{.}}/js/main.page.js"></script>
<script>Page.init('{{.}}');</script>
</body>
</html>
main.go
...
func main() {
hub := *newSSEHub()
go hub.run()
http.Handle("/webrtc/css/", http.StripPrefix("/webrtc", http.FileServer(http.Dir("templates"))))
http.Handle("/webrtc/js/", http.StripPrefix("/webrtc", http.FileServer(http.Dir("templates"))))
http.HandleFunc("/webrtc/sse/message", func(w http.ResponseWriter, r *http.Request) {
sendSSEMessage(w, r, &hub)
})
http.HandleFunc("/webrtc/sse/", func(w http.ResponseWriter, r *http.Request) {
registerSSEClient(w, r, &hub)
})
http.Handle("/", &templateHandler{filename: "index.html", serverUrl: "https://192.168.XX.YYY:443/webrtc"})
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}
서버 전송 이벤트(SSE)
페이지와 미디어 스트림에 액세스할 수 있지만 여전히 WebRTC에 연결할 수 없습니다.
Server Sent Events에 연결하려고 하면 301(영구적으로 이동됨)이 표시되기 때문입니다.
이를 방지하려면 nginx.conf에 더 많은 속성을 추가해야 합니다.
nginx.conf
...
server {
listen 443 ssl;
server_name 192.168.XX.YYY;
proxy_buffering off;
proxy_cache off;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
ssl_certificate /home/example/local_cert.pem;
ssl_certificate_key /home/example/local_key.pem;
location /webrtc {
proxy_pass http://localhost:8080;
}
}
}
자원
Reference
이 문제에 관하여(Xubuntu + Nginx + Go(+ Pion/WebRTC) + Node.js), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/masanori_msl/xubuntu-nginx-go-pionwebrtc-nodejs-3lgl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)