Claude-skill-registry-data lord
provides expert guidance on lord, a minimalist paas cli tool for deploying docker containers via ssh. use when user mentions lord deployment, docker container deployment, traefik configuration, remote hosting, or paas management and has a lord.yml file in their repo directory.
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/lord" ~/.claude/skills/majiayu000-claude-skill-registry-data-lord && rm -rf "$T"
data/lord/SKILL.mdLord - Minimalist PaaS Management
expert knowledge of lord, an ultra-minimalist paas management cli tool for deploying docker containers to remote servers via ssh.
- lord allows a user to deploy and manage several standalone containers to a remote server.
- each container can expose a web service which is auto setup with https certs via traefik.
- when deploying via lord, a "direct push" model or a container registry model is supported for getting the container onto the remote server.
- lord also exposes cli commands for detroying the container, checking status, viewing logs, and system monitoring (see cli reference below).
- lord requires a few things in order to function, which are described in the "prerequisites" section.
the user may ask you to perform some lord actions via the cli tool, troubleshoot usage of lord, or verify/modify the lord configuration for a given repo.
prerequisites
- the
binary must be installed on the system. this can be done via github release download orlord
from the repo (requires go to be installed)make install - docker must be installed and running on the local machine (lord will auto install it on the remote server)
- A
must be present in the base repository and follow the conventions described in "container conventions" belowDockerfile - A
file must be present in the base repository (or alord.yml
invoked via*.lord.yml
flag) to tell lord what to do. this file may be created via the-config
flag-init - the local machine must have ssh access to the remote server specified in the lord config (the ssh keyfile can be specified in the lord config, otherwise the default for the system is used)
cli reference
lord -init # create lord.yml configuration file (populated with dummy values) lord -deploy # build and deploy application lord -logs # stream container logs from server lord -destroy # remove deployed containers lord -status # check deployment status (basically remote docker ps) lord -server # run/check server setup (includes reverse proxy) lord -proxy # run/check reverse proxy setup only lord -recover # recover server with bad lord dependency install lord -logdownload # download full log file from server lord -registry # setup and authenticate to container registry on the server lord -dozzle # run dozzle ui locally connected to remote server via ssh (great for searching/inspecting logs and all containers on the server) lord -monitor # check system load of the host lord -config {config variant} {any command from above} # run lord with the specific config variant (config variant}.lord.yml when using multiple configs
configuration reference
projects require a
lord.yml file:
# required name: myapp server: 192.168.1.100 # optional registry (omit for registry-less deployment) registry: my.realregistry.com/me authfile: ./config.json # optional settings email: user@example.com platform: linux/amd64 target: production web: true hostname: myapp.example.com environmentfile: .env buildargfile: build.args hostenvironmentfile: host.env user: ubuntu sshkeyfile: /path/to/private/key volumes: - /host/data:/container/data # advanced web configuration webadvancedconfig: # timeout settings (global traefik - affects all web apps!) readtimeout: 300 # seconds, 0 = unlimited writetimeout: 300 # seconds, 0 = unlimited idletimeout: 180 # seconds # buffering settings (per-service, safe) maxrequestbodybytes: 10485760 maxresponsebodybytes: 10485760 memrequestbodybytes: 1048576
container conventions
- web services must expose port 80 internally
- persistent data should use /data volume mount
- additional volumes can be specified in config
multi-config support
use
config.lord.yml naming and -config config flag for multiple deployment targets in one repo.
this can be used when you need different configs for staging, prod, etc. or if there are separate services built from the same binary/container, which can have different build args.
project/ ├── Dockerfile ├── prod.lord.yml └── staging.lord.yml
deploy with:
lord -config prod -deploy
deployment flow
- build docker container locally with specified platform
- push to registry OR save/transfer directly (registry-less)
- ssh to target server and ensure docker/traefik setup
- if webadvancedconfig timeouts set and traefik running:
- read existing traefik config from /etc/traefik/traefik.yml
- apply "maximum wins" logic: update timeouts only if new values are higher
- restart traefik container if config updated
- pull container and run with configured volumes/settings
- for web containers, configure traefik routing with optional buffering middleware
registry authentication
three methods supported:
method 1: username/password file (simplest)
plain text file with
username:password
registry: my.realregistry.com/me authfile: ./registry-auth.txt
method 2: docker config file
json config copied to remote host's
.docker/config.json (overwrites entire file)
method 3: dynamic authentication
automatic authentication for:
- aws ecr: requires AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION
- digitalocean: requires DIGITALOCEAN_ACCESS_TOKEN
set via
hostenvironmentfile in lord.yml
advanced web configuration
timeout settings (use with caution!)
affects global traefik reverse proxy serving all web containers on host:
- values in seconds
- 0 = unlimited
- "maximum wins" strategy across all deployments
- use for docker registries, large file uploads, long-polling apis
buffering settings (per-service, safe)
affects only the specific service:
- maxrequestbodybytes: max incoming request body size
- maxresponsebodybytes: max outgoing response body size
- memrequestbodybytes: threshold before buffering to disk
environment variables
- hostenvironmentfile: env vars on remote host during deployment (for registry auth, cloud credentials)
- environmentfile: env vars inside container at runtime
supported linux distributions
automatic docker installation on:
- ubuntu (apt)
- debian (apt)
- amazon linux 2023 (dnf)
- centos (yum)
- rhel (yum)
key design principles
- minimalism: minimal config options and dependencies
- simplicity: all you need is docker and ssh
- flexibility: deploy from pc or ci/cd to any linux server
- single responsibility: one container per deployment, not orchestration
- automatic reverse proxy: traefik handles https certificates and routing
- registry optional: can deploy without a container registry