## Service Definitions services: ## Klippy Services ## klipper: image: mkuf/klipper:latest restart: unless-stopped privileged: true logging: driver: none depends_on: init: condition: service_completed_successfully command: > -I printer_data/run/klipper.tty -a printer_data/run/klipper.sock printer_data/config/printer.cfg -l printer_data/logs/klippy.log volumes: - /dev:/dev - ./config:/opt/printer_data/config - run:/opt/printer_data/run - gcode:/opt/printer_data/gcodes - log:/opt/printer_data/logs labels: org.prind.service: klipper ## WebApi ## moonraker: image: mkuf/moonraker:latest restart: unless-stopped pid: host logging: driver: none depends_on: init: condition: service_completed_successfully klipper: condition: service_started volumes: - /dev/null:/opt/klipper/config/null - /dev/null:/opt/klipper/docs/null - /run/dbus:/run/dbus - /run/systemd:/run/systemd - run:/opt/printer_data/run - gcode:/opt/printer_data/gcodes - log:/opt/printer_data/logs - moonraker-db:/opt/printer_data/database - ./config:/opt/printer_data/config profiles: - fluidd - mainsail - klipperscreen - moonraker-telegram-bot - mobileraker_companion labels: org.prind.service: moonraker traefik.enable: true traefik.http.services.moonraker.loadbalancer.server.port: 7125 traefik.http.routers.moonraker.rule: PathRegexp(`^/(websocket|printer|api|access|machine|server)`) traefik.http.routers.moonraker.entrypoints: web ## Frontends ## octoprint: image: octoprint/octoprint:minimal restart: unless-stopped depends_on: klipper: condition: service_started privileged: true volumes: - /dev:/dev - run:/opt/printer_data/run - octoprint:/octoprint - ./config/octoprint.yaml:/octoprint/octoprint/config.yaml profiles: - octoprint labels: org.prind.service: octoprint 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: ghcr.io/fluidd-core/fluidd:latest restart: unless-stopped profiles: - fluidd labels: org.prind.service: fluidd traefik.enable: true traefik.http.services.fluidd.loadbalancer.server.port: 80 traefik.http.routers.fluidd.rule: PathPrefix(`/`) traefik.http.routers.fluidd.entrypoints: web mainsail: image: ghcr.io/mainsail-crew/mainsail:edge restart: unless-stopped profiles: - mainsail labels: org.prind.service: mainsail traefik.enable: true traefik.http.services.mainsail.loadbalancer.server.port: 80 traefik.http.routers.mainsail.rule: PathPrefix(`/`) traefik.http.routers.mainsail.entrypoints: web ## additional Services ## klipperscreen: image: mkuf/klipperscreen:latest restart: unless-stopped network_mode: host pid: host profiles: - klipperscreen volumes: - /run/dbus:/run/dbus - /run/systemd:/run/systemd - /etc/localtime:/etc/localtime:ro - /tmp/.X11-unix:/tmp/.X11-unix - ./config:/opt/cfg labels: org.prind.service: klipperscreen moonraker-telegram-bot: image: lefskiy/moonraker-telegram-bot:latest restart: unless-stopped logging: driver: none profiles: - moonraker-telegram-bot volumes: - gcode:/opt/printer_data/gcodes - log:/opt/printer_data/logs - ./config:/opt/printer_data/config labels: org.prind.service: moonraker-telegram-bot mobileraker_companion: image: ghcr.io/clon1998/mobileraker_companion:latest restart: unless-stopped profiles: - mobileraker_companion volumes: - ./config:/opt/printer_data/config labels: org.prind.service: mobileraker_companion hostmcu: image: mkuf/klipper:latest-hostmcu restart: unless-stopped privileged: true volumes: - /dev:/dev - run:/opt/printer_data/run profiles: - hostmcu labels: org.prind.service: hostmcu moonraker-obico: image: ghcr.io/thespaghettidetective/moonraker-obico:latest restart: unless-stopped privileged: true volumes: - ./config:/opt/printer_data/config - log:/opt/printer_data/logs profiles: - moonraker-obico labels: org.prind.service: moonraker-obico spoolman: image: ghcr.io/donkie/spoolman:latest restart: unless-stopped volumes: - spoolman-db:/home/app/.local/share/spoolman profiles: - spoolman environment: SPOOLMAN_BASE_PATH: /spoolman labels: org.prind.service: spoolman traefik.enable: true traefik.http.services.octoprint.loadbalancer.server.port: 8000 traefik.http.routers.octoprint.rule: PathPrefix(`/spoolman`) traefik.http.routers.octoprint.entrypoints: web ## Accompanying Services/Infra ## ## Config dir needs to be writable by uid/gid 1000 ## This container sets the right permissions and exits init: image: busybox:latest command: chown -R 1000:1000 /prind/config volumes: - .:/prind labels: org.prind.service: init ## Loadbalancer/Proxy traefik: image: traefik:3.5 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" labels: org.prind.service: traefik volumes: run: driver_opts: type: tmpfs device: tmpfs gcode: octoprint: moonraker-db: log: driver_opts: type: tmpfs device: tmpfs spoolman-db: