version: '3' networks: net: external: false services: haproxy: image: haproxy:lts ports: - "80:80" - "443:443" volumes: - "./data/certificates:/certificates" - "./config/haproxy:/usr/local/etc/haproxy" depends_on: - "certbot" - "restreamer" - "scheduler" restart: unless-stopped networks: - net labels: - meta.role=haproxy certbot: image: "certbot/certbot" hostname: certbot volumes: - "./data/certificates:/certificates" - "./data/certbot/etc:/etc/letsencrypt" - "./data/certbot/var:/var/lib/letsencrypt" - "./logs/certbot:/var/log/letsencrypt" restart: unless-stopped networks: - net labels: - meta.role=certbot #entrypoint: sh -c 'while true; do sleep 1; done' entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 15d & wait $${!}; done;'" restreamer: image: datarhei/restreamer:2.7.0 env_file: - "variables.env" ports: - "6000:6000/udp" volumes: - "./config/restreamer:/core/config" - "./data/restreamer:/core/data" restart: unless-stopped networks: - net labels: - meta.role=restreamer scheduler: depends_on: - "restreamer" build: ./src/scheduler image: stream-scheduler:latest env_file: - "variables.env" restart: unless-stopped networks: - net labels: - meta.role=scheduler recorder: depends_on: - "restreamer" image: bluenviron/mediamtx:latest-ffmpeg environment: - MTX_PROTOCOLS=tcp ports: - 8554:8554 volumes: - "./config/recorder/mediamtx.yml:/mediamtx.yml" - "./data/recorder:/recordings" restart: unless-stopped networks: - net labels: - meta.role=recorder archive-api: # custom build via #build: packages/api-server image: xemle/home-gallery-api-server environment: # TensorflowJS backends # - cpu: slowest and best support # - wasm: good perfromance for arm64 and amd64 platforms # - node: best performance on amd64 platform #- BACKEND=cpu - BACKEND=wasm #- BACKEND=node archive: depends_on: - "recorder" image: xemle/home-gallery:1.14.5 environment: - GALLERY_API_SERVER=http://archive-api:3000 - GALLERY_API_SERVER_CONCURRENT=1 # for SoC devices like Rasperry Pi. Use 5 otherwise - GALLERY_API_SERVER_TIMEOUT=60 # for SoC devices like Rasperry Pi. Use 30 otherwise #- GALLERY_USE_NATIVE=ffprobe,ffmpeg,vipsthumbnail # On issues with sharp resizer - GALLERY_OPEN_BROWSER=false # Use polling for safety of possible network mounts. Try 0 to use inotify via fs.watch - GALLERY_WATCH_POLL_INTERVAL=300 volumes: - "./config/archive/gallery.config.yml:/data/config/gallery.config.yml" - "./data/archive:/data" - "./data/recorder/vod:/data/vod:ro" #user: "${CURRENT_USER}" entrypoint: ['node', '/app/gallery.js'] command: ['run', 'server'] restart: unless-stopped networks: - net labels: - meta.role=archive