From d2b0a3447c2a07dc77ed4d42e48806673940f168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6senberg?= Date: Sat, 2 Aug 2025 13:53:43 +0200 Subject: [PATCH] feat: add Docker and docker-compose files with hardware support Added Docker containerization to enable faster and easier photobooth setup. The container includes hardware support for cameras and printers, allowing users to mount the private folder for image storage and configuration (such as QR codes on the welcome screen). Note: This image could be optimized further with a multi-stage build. This branch should serves as a starting point for Docker-based deployment with hardware. --- .dockerignore | 77 ++++++++++++ .gitignore | 20 ++- Dockerfile | 119 +++++++++++++----- Dockerfile.old | 36 ++++++ docker-compose.yml | 12 +- private/.gitkeep | 2 + private/data/.gitkeep | 0 private/data/images/.gitkeep | 0 private/data/keying/.gitkeep | 0 private/data/print/.gitkeep | 0 private/data/qrcodes/.gitkeep | 0 private/data/test/.gitkeep | 0 private/data/thumbs/.gitkeep | 0 private/data/tmp/.gitkeep | 0 private/private/.gitkeep | 0 private/private/fonts/.gitkeep | 0 private/private/images/background/.gitkeep | 2 + private/private/images/cheese/owl.jpg | Bin 0 -> 9900 bytes private/private/images/demo/.gitkeep | 0 private/private/images/frames/.gitkeep | 0 .../private/images/keyingBackgrounds/.gitkeep | 0 .../images/logo/Photobooth_party2025.png | Bin 0 -> 672533 bytes private/private/images/placeholder/.gitkeep | 0 private/private/videos/background/.gitkeep | 0 scripts/configure_printer.sh | 30 +++++ 25 files changed, 266 insertions(+), 32 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile.old create mode 100644 private/.gitkeep create mode 100644 private/data/.gitkeep create mode 100644 private/data/images/.gitkeep create mode 100644 private/data/keying/.gitkeep create mode 100644 private/data/print/.gitkeep create mode 100644 private/data/qrcodes/.gitkeep create mode 100644 private/data/test/.gitkeep create mode 100644 private/data/thumbs/.gitkeep create mode 100644 private/data/tmp/.gitkeep create mode 100644 private/private/.gitkeep create mode 100644 private/private/fonts/.gitkeep create mode 100644 private/private/images/background/.gitkeep create mode 100644 private/private/images/cheese/owl.jpg create mode 100644 private/private/images/demo/.gitkeep create mode 100644 private/private/images/frames/.gitkeep create mode 100644 private/private/images/keyingBackgrounds/.gitkeep create mode 100644 private/private/images/logo/Photobooth_party2025.png create mode 100644 private/private/images/placeholder/.gitkeep create mode 100644 private/private/videos/background/.gitkeep create mode 100644 scripts/configure_printer.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..5b3fef46f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,77 @@ +# Git files +.git +.gitignore +.gitmodules + +# Documentation +README.md +CONTRIBUTING.md +CODE_OF_CONDUCT.md +SECURITY.md +LICENSE +LICENSE_NOTICE +docs/ +mkdocs_remote.yml + +# Development files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Node.js +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# PHP dependencies (will be installed via composer in container) +vendor/ + +# Build artifacts +dist/ +build/ + +# Test files +tests/ +test/ +phpunit.xml +phpstan.neon + +# Development configuration +eslint.config.mjs +gulpfile.mjs +package-lock.json +composer.lock + +# Docker files (except the one being built) +docker-compose.yml +Dockerfile.old + +# Temporary files +tmp/ +temp/ +*.tmp + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE files +*.sublime-project +*.sublime-workspace + +# Log files +*.log + +# Crowdin configuration +crowdin_config.yml + +# Installation scripts (may not be needed in container) +install-photobooth.sh diff --git a/.gitignore b/.gitignore index a5a111dde..b75c8f0e2 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,25 @@ digicamcontrol/ HEAD manual/faq.* node_modules/ -private/* + +!private/data/.gitkeep +!private/data/images/.gitkeep +!private/data/keying/.gitkeep +!private/data/print/.gitkeep +!private/data/qrcodes/.gitkeep +!private/data/thumbs/.gitkeep +!private/data/test/.gitkeep +!private/data/tmp/.gitkeep + +!private/fonts/.gitkeep +!private/images/background/.gitkeep +!private/images/demo/.gitkeep +!private/images/frames/.gitkeep +!private/images/keyingBackgrounds/.gitkeep +!private/images/placeholder/.gitkeep + +!private/videos/background/.gitkeep + !private/README.md resources/css/* !resources/css/README.md diff --git a/Dockerfile b/Dockerfile index 046d607e0..acf66e35d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,97 @@ -FROM webdevops/php-apache:8.3 +# Use Ubuntu 24.04 as the base image +FROM ubuntu:24.04 -# Adjust LimitRequestLine and -# update and install dependencies -RUN echo "LimitRequestLine 12000" > /opt/docker/etc/httpd/conf.d/limits.conf \ - && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ - && apt-get update \ - && apt-get install -y --no-install-recommends \ - build-essential \ - git \ - gphoto2 \ - libimage-exiftool-perl \ - rsync \ - udisks2 \ - python3 \ - ca-certificates \ - curl \ - gnupg \ - nodejs \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* +# Set environment variables to avoid interactive prompts during installation +ENV DEBIAN_FRONTEND=noninteractive -# Copy files -WORKDIR /app -COPY . . +# Install all dependencies, configure system, and clean up in a single layer +RUN apt-get update && apt-get install -y --no-install-recommends \ + # Core runtime dependencies + apache2 \ + php \ + php-cli \ + php-mbstring \ + php-xml \ + php-curl \ + php-zip \ + php-gd \ + gphoto2 \ + libimage-exiftool-perl \ + rsync \ + udisks2 \ + python3 \ + cups \ + ipp-usb \ + avahi-daemon \ + avahi-utils \ + dbus \ + printer-driver-gutenprint \ + # Build dependencies (will be removed later) + build-essential \ + git \ + ca-certificates \ + curl \ + gnupg \ + # Install Node.js 20.x + && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm@latest \ + # Configure www-data user and groups + && (id -u www-data || useradd -r -s /usr/sbin/nologin www-data) \ + && gpasswd -a www-data plugdev \ + && gpasswd -a www-data lp \ + && gpasswd -a www-data lpadmin \ + && usermod -aG root www-data \ + && mkdir -p /var/www/html \ + && chown -R www-data:www-data /var/www/html \ + && chsh -s /bin/bash www-data \ + # Configure Apache + && a2enmod rewrite \ + && a2enmod headers \ + && echo "LimitRequestLine 12000" > /etc/apache2/conf-available/limits.conf \ + && a2enconf limits \ + && chown -R www-data:www-data /var/www/ \ + && chmod -R 755 /var/www/ -RUN chown -R application:application /app +# Switch to the www-data user for building +USER www-data -# switch to application user -USER application +# Set the working directory +WORKDIR /var/www/html -# Install and build -RUN git config --global --add safe.directory /app \ +# Clone the Photobooth repository and build the application, then clean up +RUN rm -rf /var/www/html/* \ + && git clone https://github.com/PhotoboothProject/photobooth /var/www/html \ + && cd /var/www/html \ && git submodule update --init \ && npm install \ - && npm run build + && npm run build \ + # Clean up after build to reduce image size + && npm cache clean --force \ + && rm -rf node_modules/.cache \ + && rm -rf .git + +# Switch back to root for final configuration +USER root + +# Copy configuration script for my Wireless Canon 1500 printer usb printer maybe do not need this +COPY scripts/configure_printer.sh /usr/local/bin/configure_printer.sh + +# Remove build dependencies and clean up to reduce image size +RUN apt-get remove -y \ + build-essential \ + git \ + curl \ + gnupg \ + ca-certificates \ + && apt-get autoremove -y \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf /tmp/* \ + && rm -rf /var/tmp/* + +# Expose ports for HTTP and HTTPS +EXPOSE 80 443 + +# Start Apache in the foreground +CMD dbus-daemon --system --fork & /usr/sbin/ipp-usb & service cups start && apachectl -D FOREGROUND \ No newline at end of file diff --git a/Dockerfile.old b/Dockerfile.old new file mode 100644 index 000000000..bf015394d --- /dev/null +++ b/Dockerfile.old @@ -0,0 +1,36 @@ +FROM webdevops/php-apache:8.3 + +# Adjust LimitRequestLine and +# update and install dependencies +RUN echo "LimitRequestLine 12000" > /opt/docker/etc/httpd/conf.d/limits.conf \ + && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + build-essential \ + git \ + gphoto2 \ + libimage-exiftool-perl \ + rsync \ + udisks2 \ + python3 \ + ca-certificates \ + curl \ + gnupg \ + nodejs \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Copy files +WORKDIR /app +COPY . . + +RUN chown -R application:application /app + +# switch to application user +#USER application + +# Install and build +RUN git config --global --add safe.directory /app \ + && git submodule update --init \ + && npm install \ + && npm run build diff --git a/docker-compose.yml b/docker-compose.yml index 910541354..e1b01f9bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,18 @@ -version: "3.9" - services: photobooth: build: . + image: photobox:latest ports: - "80:80" - "443:443" environment: - COMPOSER_VERSION=2 + volumes: + - ./private/data:/var/www/html/data + - ./private/private:/var/www/html/private + - ./scripts/configure_printer.sh:/usr/local/bin/configure_printer.sh + devices: + - /dev/bus/usb:/dev/bus/usb # Mount USB devices for gphoto2 + network_mode: host + privileged: true # Grant elevated privileges for device access + restart: always \ No newline at end of file diff --git a/private/.gitkeep b/private/.gitkeep new file mode 100644 index 000000000..f3322310c --- /dev/null +++ b/private/.gitkeep @@ -0,0 +1,2 @@ +# This file ensures the images directory is tracked by Git +# Git doesn't track empty directories, so this file keeps the folder structure \ No newline at end of file diff --git a/private/data/.gitkeep b/private/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/images/.gitkeep b/private/data/images/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/keying/.gitkeep b/private/data/keying/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/print/.gitkeep b/private/data/print/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/qrcodes/.gitkeep b/private/data/qrcodes/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/test/.gitkeep b/private/data/test/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/thumbs/.gitkeep b/private/data/thumbs/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/data/tmp/.gitkeep b/private/data/tmp/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/private/.gitkeep b/private/private/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/private/fonts/.gitkeep b/private/private/fonts/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/private/images/background/.gitkeep b/private/private/images/background/.gitkeep new file mode 100644 index 000000000..aabdaed52 --- /dev/null +++ b/private/private/images/background/.gitkeep @@ -0,0 +1,2 @@ +# This file preserves the entire images directory structure +# Including all subdirectories like background/, tmp/, keying/, etc. \ No newline at end of file diff --git a/private/private/images/cheese/owl.jpg b/private/private/images/cheese/owl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8adb75d1b6d1c2ae30f5f0e6eb579451af714efe GIT binary patch literal 9900 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 literal 0 HcmV?d00001 diff --git a/private/private/images/demo/.gitkeep b/private/private/images/demo/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/private/images/frames/.gitkeep b/private/private/images/frames/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/private/images/keyingBackgrounds/.gitkeep b/private/private/images/keyingBackgrounds/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/private/private/images/logo/Photobooth_party2025.png b/private/private/images/logo/Photobooth_party2025.png new file mode 100644 index 0000000000000000000000000000000000000000..e96ab36fd935a6a32a6687f753fdd4c9dfeafb47 GIT binary patch literal 672533 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 F)KU$7$EwccN9x< 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