Skip to content

Latest commit

Β 

History

History
executable file
Β·
190 lines (140 loc) Β· 4.45 KB

File metadata and controls

executable file
Β·
190 lines (140 loc) Β· 4.45 KB

Server

μš”κ΅¬μ‚¬ν•­

  • Hanwha Vision PNO-A9081R
  • Raspberry Pi 4B 8GB(ARM64) / Debian Bookworm OS

μ—μ„œ μ •μƒμ μœΌλ‘œ 컴파일 및 μ‹€ν–‰λ©λ‹ˆλ‹€.

μ„€μΉ˜ κ°€μ΄λ“œ(μˆ˜λ™)

μ½”λ“œλ₯Ό 직접 μ»΄νŒŒμΌν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•„μš” νŒ¨ν‚€μ§€ μ„€μΉ˜ :

sudo apt update
sudo apt install -y \
    build-essential \
    cmake \
    pkg-config \
    libgstreamer1.0-dev \
    libgstrtspserver-1.0-dev \
    libsqlitecpp-dev \
    libsodium-dev \
    libcurl4-openssl-dev \
    libssl-dev \
    sqlite3

컴파일 μ‹œμ— SQLite κ΄€λ ¨ μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έ κ²½μš°μ—λŠ” 직접 SQLiteλ₯Ό λΉŒλ“œν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

git clone https://github.com/SRombauts/SQLiteCpp
cd SQLiteCpp
mkdir build
cd build
cmake ..
make
make install

λͺ¨λ“  νŒ¨ν‚€μ§€κ°€ μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ, λ ˆν¬μ§€ν† λ¦¬λ₯Ό Clone ν•©λ‹ˆλ‹€.

git clone https://github.com/veda-team3-final-project/server
cd server

이후 makeλ₯Ό μ΄μš©ν•˜μ—¬ 컴파일 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# server/control λΉŒλ“œ
make 
# server만 λΉŒλ“œ
make server
# control만 λΉŒλ“œ
make metadata/control

μ„€μΉ˜ κ°€μ΄λ“œ(Docker)

Dockerκ°€ μ„€μΉ˜λœ 라즈베리 νŒŒμ΄μ—μ„œ, λ‹€μŒμ˜ λͺ…λ Ήμ–΄λ‘œ 이미지λ₯Ό κ°„λ‹¨ν•˜κ²Œ μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

docker pull ghcr.io/veda-team3-final-project/server:latest

이 ν”„λ‘œμ νŠΈμ˜ μ„œλ²„ 싀행은 8080 포트λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 그리고 μ•„λž˜μ˜ λ‹¨κ³„μ—μ„œ ν•„μš”ν•œ νŒŒμΌλ“€μ„ μ†μ‰½κ²Œ μƒμ„±ν•˜κ³  μ μš©ν•  수 μžˆλ„λ‘ 디렉토리λ₯Ό μ—°κ²°ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ λͺ…λ Ήμ–΄λ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

docker run -d -p 8080:8080 -v $(pwd):/app --name my-server-container server:latest

μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰μ‹œν‚¨ ν›„μ—λŠ” λ‹€μŒμ˜ λͺ…λ Ήμ–΄λ‘œ 미리 컴파일된 server, control을 μ‹€ν–‰μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

docker exec -it my-server-container bash
./server
./control

λ°˜λ“œμ‹œ μ•„λž˜μ˜ κ°€μ΄λ“œμ— 따라 μΈμ¦μ„œ 및 .env νŒŒμΌμ„ μƒμ„±ν•˜κ³  /app에 μœ„μΉ˜μ‹œν‚¨ ν›„ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μΈμ¦μ„œ 생성

OpenSSL μΈμ¦μ„œ 생성 κ°€μ΄λ“œ

이 ν”„λ‘œμ νŠΈλŠ” λ³΄μ•ˆμ„ μœ„ν•΄ μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈ κ°„μ˜ TCP 톡신에 SSL을 μ μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ κ°€μ΄λ“œλ₯Ό 따라 μΈμ¦μ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

  1. ν‚€ λ°œκΈ‰ 및 λΉ„λ°€λ²ˆν˜Έ μ„€μ •
openssl genpkey -algorithm RSA -out ca.key -aes256
  1. 자체 μ„œλͺ… μΈμ¦μ„œ 생성
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
  1. 개인 ν‚€ 생성
openssl genpkey -algorithm RSA -out server.key
  1. μ„€μ • 파일 생성

μ•„λž˜μ˜ 빈 ν•„λ“œλ₯Ό μ±„μš°κ³  openssl.cnf νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = KR
ST = Seoul
L = Seoul
O = 
OU = 
CN = # μ„œλ²„μ˜ IP μ£Όμ†Œ λ˜λŠ” 도메인 이름

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = # μ„œλ²„μ˜ IP μ£Όμ†Œ λ˜λŠ” 도메인 이름
# DNS.1 = my-server.local # ν•„μš”ν•˜λ‹€λ©΄ 도메인 이름도 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  1. CSR 생성
openssl req -new -key server.key -out server.csr -config openssl.cnf
  1. CSR μ„œλͺ…

1번의 κ³Όμ •μ—μ„œ μ„€μ •ν•œ λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•˜μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€.

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 365 -sha256 -extfile openssl.cnf -extensions v3_req
  1. μ΅œμ’… 풀체인 μΈμ¦μ„œ 생성
cat server.crt ca.crt > fullchain.crt

μ‹€ν–‰ 방법 :

μœ„ 과정을 λͺ¨λ‘ 마친 ν›„, .env νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ λ‹€μŒμ˜ λ‚΄μš©μ„ κΈ°μž…ν•©λ‹ˆλ‹€.

# 곡톡 인증 정보
USERNAME= # ν•œν™”λΉ„μ „ CCTV WEB UIμ—μ„œ μ„€μ •ν•œ ID
PASSWORD= # ν•œν™”λΉ„μ „ CCTV WEB UIμ—μ„œ μ„€μ •ν•œ PW
HOST= # ν•œν™”λΉ„μ „ CCTV에 ν• λ‹Ήλœ IP

# API μΏ ν‚€ μ„€μ •
TRACKID=0842ca6f0d90294ea7de995c40a4aac6

# RTSP μ„€μ •
RTSP_PORT=554
RTSP_PATH=/0/onvif/profile2/media.smp

# DB 경둜
DB_FILE= # SQlite DB 파일 경둜(κ²½λ‘œμ— μ‘΄μž¬ν•˜μ§€ μ•Šμ„ κ²½μš°μ—λŠ” 생성됨)

μ €μž₯ν•œ ν›„,

./server
./control

을 톡해 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ„œ

이 λ ˆν¬μ§€ν† λ¦¬μ˜ μ½”λ“œλ₯Ό Doxygen을 톡해 λ¬Έμ„œν™” ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ•„λž˜μ˜ 링크λ₯Ό 톡해 클래슀, ν•¨μˆ˜μ˜ ꡬ쑰 및 include 의쑴 κ·Έλž˜ν”„ 등을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

https://veda-team3-final-project.github.io/server/