Link Search Menu Expand Document

Moonraker

Moonraker is a web server that exposes APIs which lets Mainsail interact with Klipper.

Installation

At first we have to install some OS dependencies:

sudo apt install python3-virtualenv python3-dev libopenjp2-7 python3-libgpiod curl libcurl4-openssl-dev libssl-dev liblmdb-dev libsodium-dev zlib1g-dev libjpeg-dev

Clone Moonraker into your HOME directory:

cd ~
git clone https://github.com/Arksine/moonraker.git

Then we can initialize the python virtual environment and install the python dependencies:

cd ~
virtualenv -p python3 ./moonraker-env
./moonraker-env/bin/pip install -r ./moonraker/scripts/moonraker-requirements.txt

Configuration

Please pay attention to the following steps!
Misconfigured trusted_clients are a very common source of failure.

For Moonraker you’ll need to create a separate config file.

nano ~/klipper_config/moonraker.conf

Insert the following part:

[server]
host: 0.0.0.0
port: 7125
enable_debug_logging: False
config_path: ~/klipper_config
log_path: ~/klipper_logs

[authorization]
cors_domains:
    https://my.mainsail.xyz
    http://my.mainsail.xyz
    http://*.local
    http://*.lan
trusted_clients:
    10.0.0.0/8
    127.0.0.0/8
    169.254.0.0/16
    172.16.0.0/12
    192.168.0.0/16
    FE80::/10
    ::1/128

# enables partial support of Octoprint API
[octoprint_compat]

# enables moonraker to track and store print history.
[history]

# this enables moonraker's update manager
[update_manager]

[update_manager mainsail]
type: web
repo: mainsail-crew/mainsail
path: ~/mainsail

This is a very basic config
For more options and detailed explanations you should follow arksines instructions.

🔥 trusted_clients - read carefully 🔥
A list of newline separated ip addresses and/or ip ranges that are trusted. Trusted clients are given full access to the API. Both IPv4 and IPv6 addresses and ranges are supported. Ranges must be expressed in CIDR notation (see http://ip.sb/cidr for more info).
For example, an entry of 192.168.1.0/24 will authorize IPs in the range of 192.168.1.1 - 192.168.1.254. Note that when specifying IPv4 ranges the last segment of the ip address must be 0. The default is no clients or ranges are trusted.

Save the file with CTRL+O and close the editor with CTRL+X.

Startup service

To edit this file type:

sudo nano /etc/systemd/system/moonraker.service

fill in these lines:

#Systemd moonraker Service

[Unit]
Description=Moonraker provides Web API for klipper
Documentation=https://moonraker.readthedocs.io/en/latest/
After=network.target klipper.service

[Install]
WantedBy=multi-user.target

[Service]
Environment=MOONRAKER_CONFIG=/home/pi/klipper_config/moonraker.conf
Environment=MOONRAKER_LOG=/home/pi/klipper_logs/moonraker.log
Type=simple
User=pi
RemainAfterExit=yes
ExecStart=/home/pi/moonraker-env/bin/python /home/pi/moonraker/moonraker/moonraker.py -c ${MOONRAKER_CONFIG} -l ${MOONRAKER_LOG}
Restart=always
RestartSec=10

Save the file with CTRL+O and close the editor with CTRL+X.

Please check and modify the username!
If you do not use the user pi, you must replace it in each path and in the variable user in the service file.

To enable Moonraker service execute these commands:

sudo systemctl enable moonraker.service

After your config is in place, start Moonraker with sudo systemctl start moonraker.

Open the following url with your printers IP in your browser

http://<printer-ip>:7125/printer/info

If everything has been set up successfully, a message like this should appear:

{"result": {"state_message": "Printer is ready", "klipper_path": "/home/pi/klipper", "config_file": "/home/pi/klipper_config/printer.cfg", "software_version": "v0.9.1-785-g1be19177", "hostname": "raspberrypi", "cpu_info": "4 core ARMv7 Processor rev 4 (v7l)", "state": "ready", "python_path": "/home/pi/klippy-env/bin/python", "log_file": "/home/pi/klipper_log/klippy.log"}}

< previous step next step >