systemd Deployment
Last updated: March 9, 2026
systemd Deployment
Run MD Planner as a background service on Linux.
Installation
Using the Makefile:
make -f deploy/Makefile install
Or manually:
sudo cp dist/mdplanner-linux /usr/local/bin/mdplanner
sudo chmod +x /usr/local/bin/mdplanner
sudo useradd --system --create-home --home-dir /var/lib/mdplanner mdplanner
sudo mkdir -p /var/lib/mdplanner/project
sudo chown -R mdplanner:mdplanner /var/lib/mdplanner
sudo cp deploy/mdplanner.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable mdplanner
sudo systemctl start mdplanner
Configuration
Edit the service file to change runtime options:
| Option | Default | Description |
|---|---|---|
--port |
8003 | HTTP server port |
--cache |
disabled | Add flag to enable SQLite cache |
| Project path | /var/lib/mdplanner/project |
Last argument to ExecStart |
To enable SQLite cache, modify ExecStart:
ExecStart=/usr/local/bin/mdplanner --cache --port 8003 /var/lib/mdplanner/project
To add authentication:
ExecStart=/usr/local/bin/mdplanner --api-token mysecret --mcp-token mcptoken --cache /var/lib/mdplanner/project
For integration secret encryption:
[Service]
Environment=MDPLANNER_SECRET_KEY=<your-64-char-hex-key>
Apply changes:
sudo systemctl daemon-reload
sudo systemctl restart mdplanner
Management
make -f deploy/Makefile status
make -f deploy/Makefile stop
make -f deploy/Makefile restart
make -f deploy/Makefile logs
Reverse proxy
To expose MD Planner behind nginx:
server {
listen 80;
server_name planner.example.com;
location / {
proxy_pass http://127.0.0.1:8003;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
For SSE support, add to the location block:
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 86400;
Uninstall
make -f deploy/Makefile uninstall