이 프로젝트는 실시간 모니터링 기능을 갖춘 Rust 기반 CDN 서버입니다.
/static디렉토리의 정적 파일을 루트 경로(/)에서 제공합니다./dashboard_assets디렉토리의 대시보드 자산을/dash경로에서 제공합니다.- WebSocket을 통한 실시간 CPU, 메모리 및 네트워크 사용량 모니터링.
- 지난 30일간의 일별 평균 네트워크 전송률 그래프.
config.toml을 통해 호스트, 포트, 로그 레벨을 설정할 수 있습니다.
- Rust (
rustup포함) - Node.js (
dashboard_assets/main.js를 수정할 계획이라면 필요하지만, 실행에는 필수는 아님)
-
의존성 설치:
cargo build
-
서버 실행:
cargo run
서버는
http://0.0.0.0:8080에서 시작됩니다 (config.toml에 설정된 경우). -
대시보드 접속:
브라우저를 열고
http://localhost:8080/dash로 이동합니다.대시보드가 올바르게 표시되지 않으면, 브라우저 캐시를 지우기 위해 강제 새로고침(Ctrl+Shift+R 또는 Cmd+Shift+R)을 시도해 보세요.
서버 설정은 config.toml에서 할 수 있습니다:
host = "0.0.0.0"
port = 8080
log_level = "info"이 섹션에서는 NAS 장비에서 Docker 이미지를 빌드하고 실행하는 방법을 설명합니다.
- NAS에 대한 SSH 접속.
- NAS에 Docker가 설치되어 있고 실행 중이어야 합니다.
-
프로젝트 파일을 NAS로 복사:
로컬 머신의 터미널에서
scp를 사용하여 전체 프로젝트 디렉토리를 NAS로 복사합니다.your_nas_username을 실제 NAS 사용자 이름으로,192.168.35.15를 NAS IP 주소로 바꾸세요.scp -r /media/gwkang/Projects/workspace/rust/cdn_v1 [email protected]:/volume1/.@root/docker_files/
-
NAS에서 Docker 이미지 빌드:
파일이 NAS로 복사된 후, SSH를 통해 NAS에 접속하여 프로젝트 디렉토리로 이동합니다. 그런 다음,
cdn:1태그로 Docker 이미지를 빌드합니다.ssh [email protected] cd /volume1/.@root/docker_files/cdn_v1 docker build -t cdn:1 .
-
NAS에서 Docker 컨테이너 실행:
이미지가 빌드되면 컨테이너를 실행할 수 있습니다.
sysinfo라이브러리가 컨테이너 내부의 시스템 정보를 제대로 수집하려면 추가 권한이 필요할 수 있습니다.--privileged플래그를 사용하여 컨테이너를 실행하는 것을 권장합니다.docker run -d -p 8080:8080 --name cdn_server_instance --privileged cdn:1
참고: NAS에서 8080 포트가 이미 사용 중이 아닌지 확인하세요.
--privileged모드는 컨테이너에 광범위한 권한을 부여하므로, 프로덕션 환경에서는 신중하게 사용해야 합니다.
Address already in use오류: 다른 프로세스가 서버 포트(기본 8080)를 사용 중입니다. 해당 프로세스를 찾아 종료하거나config.toml에서port를 변경하세요.- 대시보드 업데이트 안됨: 브라우저 캐시를 지우기 위해 강제 새로고침(Ctrl+Shift+R 또는 Cmd+Shift+R)을 시도해 보세요.
rustc버전 문제:rustc버전과 관련된 컴파일 오류가 발생하면 Rust 툴체인을 업데이트해 보세요:rustup update
- Docker 컨테이너 내 모니터링 데이터 누락:
- 원인:
sysinfo라이브러리가 컨테이너 내부에서 시스템 정보에 접근하기 위한 권한이 부족하거나, 웹소켓 연결 주소 문제일 수 있습니다. - 해결:
- 컨테이너 권한: 컨테이너 실행 시
--privileged플래그를 사용하거나--cap-add SYS_PTRACE옵션을 추가하여sysinfo가 시스템 정보에 접근할 수 있도록 합니다. (위 Docker 실행 명령에 반영됨) - 웹소켓 연결 주소: 대시보드(
dashboard_assets/main.js)에서 웹소켓 연결 주소를ws://localhost:8080/ws와 같이 명시적으로 지정해야 합니다.https://cdn.haja.run과 같은 HTTPS 주소로 대시보드에 접속하는 경우, 브라우저의 보안 정책으로 인해ws://연결이 차단될 수 있습니다. 이 경우 리버스 프록시/CDN에서wss://로 WebSocket 연결을 프록시하도록 설정해야 합니다.
- 컨테이너 권한: 컨테이너 실행 시
- 원인: