diff --git a/install_inside_docker.sh b/install_inside_docker.sh new file mode 100644 index 0000000..78f2e4b --- /dev/null +++ b/install_inside_docker.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +# Update und installiere Build-Tools (wie im Dockerfile) +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/* + +# Klone und baue OpenCV (wie im Dockerfile) +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 +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 + +# Cleanup (optional, um Space zu sparen) +rm -rf /opencv /opencv_contrib \ No newline at end of file diff --git a/install_inside_docker.yaml b/install_inside_docker.yaml new file mode 100644 index 0000000..64657b7 --- /dev/null +++ b/install_inside_docker.yaml @@ -0,0 +1,54 @@ +version: "3.3" +services: + appvideoserver: + image: node:lts-bookworm-slim # Standard-Image, kein Build nötig + container_name: AppRobotVideo + working_dir: /usr/src/app + volumes: + - .:/usr/src/app # Mountet dein Workspace (inkl. install_inside_docker.sh und .installed) + ports: + - "8448:8443" + extra_hosts: + - "host.docker.internal:host-gateway" + init: true + command: > + sh -c " + # Einmalige Installation: Checke Flag-File (.installed im gemounteten Volume) + if [ ! -f .installed ]; then + echo 'Running first-time installation...' + ./install_inside_docker.sh && touch .installed + else + echo 'Installation already done, skipping...' + fi && + # NPM-Installation (einmalig machen, wenn gewünscht – hier immer, aber du kannst es anpassen) + if [ -f package-lock.json ] || [ -f npm-shrinkwrap.json ]; then + npm ci || npm install + else + npm install + fi && + # Starte die App + 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:2096 + # Optional: Env-Var für dein Script (z.B. um es zu überspringen) + - SKIP_INSTALL=false # Kannst du setzen, um manuell zu überspringen + restart: unless-stopped + networks: + - appRobotNet + - default + privileged: true + cap_add: + - SYS_ADMIN + security_opt: + - seccomp:unconfined + +networks: + default: + driver: bridge + appRobotNet: + external: true \ No newline at end of file