- 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 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μ μμΉμν¨ ν μ€νν΄μΌ ν©λλ€.
μ΄ νλ‘μ νΈλ 보μμ μν΄ μλ²/ν΄λΌμ΄μΈνΈ κ°μ TCP ν΅μ μ SSLμ μ μ©νμμ΅λλ€. μλμ κ°μ΄λλ₯Ό λ°λΌ μΈμ¦μλ₯Ό μμ±ν©λλ€.
- ν€ λ°κΈ λ° λΉλ°λ²νΈ μ€μ
openssl genpkey -algorithm RSA -out ca.key -aes256
- μ체 μλͺ μΈμ¦μ μμ±
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
- κ°μΈ ν€ μμ±
openssl genpkey -algorithm RSA -out server.key
- μ€μ νμΌ μμ±
μλμ λΉ νλλ₯Ό μ±μ°κ³ 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 # νμνλ€λ©΄ λλ©μΈ μ΄λ¦λ μΆκ°ν μ μμ΅λλ€.
- CSR μμ±
openssl req -new -key server.key -out server.csr -config openssl.cnf
- 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
- μ΅μ’ νμ²΄μΈ μΈμ¦μ μμ±
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 μμ‘΄ κ·Έλν λ±μ νμΈν μ μμ΅λλ€.