## Common Template(s) x-klipper-svc: &klipper-svc image: klipper:latest build: args: VERSION: 319c36df52eb016667d13ab006cae3752d0212e7 dockerfile: klipper.Dockerfile context: dockerfiles/ target: run container_name: klipper restart: unless-stopped command: - "-I" - "run/klipper.tty" - "-a" - "run/klipper.sock" - "cfg/printer.cfg" ## Service Definitions version: "3.4" services: ## Klippy Services ## klipper: <<: *klipper-svc volumes: - ./config:/opt/cfg - run:/opt/run - gcode:/opt/gcode devices: - /dev/ttymxc3:/dev/ttymxc3 profiles: - fluidd - mainsail klipper-priv: <<: *klipper-svc privileged: true volumes: - /dev:/dev - ./config:/opt/cfg - run:/opt/run - gcode:/opt/gcode profiles: - octoprint ## WebApi ## moonraker: image: moonraker:latest build: dockerfile: moonraker.Dockerfile context: dockerfiles/ target: run container_name: moonraker restart: unless-stopped command: - "-c" - "cfg/moonraker.cfg" depends_on: - klipper volumes: - ./config:/opt/cfg - run:/opt/run - gcode:/opt/gcode - moonraker-db:/opt/db profiles: - fluidd - mainsail labels: - "traefik.enable=true" - "traefik.http.services.moonraker.loadbalancer.server.port=7125" - "traefik.http.routers.moonraker.rule=PathPrefix(`/websocket`,`/printer`,`/api`,`/access`,`/machine`,`/server`)" - "traefik.http.routers.moonraker.entrypoints=web" ## Frontends ## octoprint: image: octoprint/octoprint:1-minimal container_name: octoprint restart: unless-stopped depends_on: - klipper-priv - ustreamer - traefik privileged: true volumes: - /dev:/dev - run:/opt/run - octoprint:/octoprint profiles: - octoprint labels: - "traefik.enable=true" - "traefik.http.services.octoprint.loadbalancer.server.port=5000" - "traefik.http.routers.octoprint.rule=PathPrefix(`/`)" - "traefik.http.routers.octoprint.entrypoints=web" fluidd: image: cadriel/fluidd:latest container_name: fluidd restart: unless-stopped depends_on: - moonraker - ustreamer - traefik profiles: - fluidd ## Fluidd needs to be the root path https://github.com/cadriel/fluidd/issues/347 labels: - "traefik.enable=true" - "traefik.http.services.fluidd.loadbalancer.server.port=80" - "traefik.http.routers.fluidd.rule=PathPrefix(`/`)" - "traefik.http.routers.fluidd.entrypoints=web" ## Accompanying Services/Infra ## ## Webcam Service ustreamer: image: ustreamer:latest build: dockerfile: ustreamer.Dockerfile context: dockerfiles/ target: run container_name: ustreamer restart: unless-stopped command: - "--host=0.0.0.0" - "--port=8080" - "--slowdown" - "--device=/dev/video0" - "--resolution=1280x960" - "--format=MJPEG" - "--desired-fps=30" depends_on: - traefik devices: - /dev/video0:/dev/video0 labels: - "traefik.enable=true" - "traefik.http.services.ustreamer.loadbalancer.server.port=8080" - "traefik.http.routers.ustreamer.rule=PathPrefix(`/stream`)" - "traefik.http.routers.ustreamer.entrypoints=web" ## Loadbalancer/Proxy traefik: image: "traefik:v2.2" container_name: "traefik" hostname: "traefik" command: - "--accesslog" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" ports: - "80:80" restart: unless-stopped volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" volumes: run: gcode: octoprint: moonraker-db: