Claude-skill-registry kamal-deploy

Deploy Docker applications using Kamal 2 with zero-downtime and automatic SSL. Use this skill when (1) setting up new Kamal deployments, (2) generating deploy.yml configuration, (3) deploying apps that lack health endpoints (using Caddy workaround).

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/kamal-deploy" ~/.claude/skills/majiayu000-claude-skill-registry-kamal-deploy && rm -rf "$T"
manifest: skills/data/kamal-deploy/SKILL.md
source content

Kamal 2 Deployment

Workflow

Ask user for:

  1. Domain — e.g.,
    app.example.com
    (service name:
    app_example_com
    )
  2. Server IP(s)
  3. Health endpoint — Does app return 200 on
    /up
    without auth?

Generate config/deploy.yml

service: {{DOMAIN_UNDERSCORED}}
image: jalen0x/{{DOMAIN_UNDERSCORED}}

servers:
  web:
    hosts:
      - {{SERVER_IP}}

proxy:
  ssl: true
  host: {{DOMAIN}}

registry:
  username: jalen0x
  password:
    - KAMAL_REGISTRY_PASSWORD

ssh:
  user: ubuntu

builder:
  arch: amd64

Health Endpoint

App must respond 200 on

/up
at port 80 (default).

Custom path: Add

healthcheck.path
to proxy config.

No health endpoint: Use Caddy. Copy templates from

assets/
and customize:

  • assets/Caddyfile
    → project
    Caddyfile
  • assets/start.sh
    → project
    start.sh

Generate Dockerfile:

FROM {{BASE_IMAGE}}
RUN apk add --no-cache caddy
COPY Caddyfile /Caddyfile
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/bin/sh", "/start.sh"]

Commands

kamal setup   # First-time
kamal deploy  # Deploy