diff --git a/Dockerfile.appvideoserver b/Dockerfile.appvideoserver new file mode 100644 index 0000000..5e9b4fe --- /dev/null +++ b/Dockerfile.appvideoserver @@ -0,0 +1,34 @@ + +# Use Debian-based Node image +FROM node:lts-bookworm-slim + + +RUN apt-get update && apt-get install -y \ + build-essential cmake git pkg-config \ + libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev \ + libtbb-dev libjpeg-dev libpng-dev libtiff-dev \ + ffmpeg ca-certificates \ + python3 python3-dev python3-numpy \ + && rm -rf /var/lib/apt/lists/* + +# Clone OpenCV and contrib modules +RUN git clone --branch 4.12.0 https://github.com/opencv/opencv.git /opencv \ + && git clone --branch 4.12.0 https://github.com/opencv/opencv_contrib.git /opencv_contrib + +# Build OpenCV with contrib (includes ArUco) +RUN mkdir /opencv/build && cd /opencv/build \ + && cmake -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_INSTALL_PREFIX=/usr/local \ + -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \ + -D BUILD_opencv_python3=ON \ + -D BUILD_EXAMPLES=OFF .. \ + && make -j$(nproc) && make install && ldconfig + +# Set working directory for your Node app +WORKDIR /usr/src/app + +# Optional: create non-root user +# RUN useradd -m -u 1000 nodeuser +# USER nodeuser + +# Node dependencies will be installed later via bind mount or COPY diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3e43374 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,47 @@ +version: "3.3" +services: + + appvideoserver: + build: + context: . + dockerfile: Dockerfile.appvideoserver + image: appvideoserver:latest + container_name: AppRobotVideo + working_dir: /usr/src/app + # Mount your host folder into the container + volumes: + - .:/usr/src/app + ports: + - "8448:8443" + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + - roboticsdriver + + init: true + command: > + sh -c " + if [ -f package-lock.json ] || [ -f npm-shrinkwrap.json ]; then + npm ci || npm install + else + npm install + fi + && npm start" + environment: + - NODE_ENV=production + - HOST_UID=${UID-1000} + - HOST_GID=${GID-1000} + - DEV0=/dev/video0 + - DEV1=/dev/video2 + - TARGET_SERVER=wss://host.docker.internal:2095 + + restart: unless-stopped + networks: + clouds: + ipv4_address: 172.20.0.12 + default: + privileged: true + cap_add: + - SYS_ADMIN + security_opt: + - seccomp:unconfined \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..e824b29 --- /dev/null +++ b/run.sh @@ -0,0 +1 @@ +docker compose -f docker-compose.yaml up -d \ No newline at end of file