π Lightweight web UI for managing Caddy reverse proxy
Wildcard SSL β’ Auto-detection β’ One-click migration
Dashboard β system overview, alerts, quick actions
Settings β language, theme, wildcard SSL, users
Proxy Rules β visual editor for reverse proxy configuration
Certificates β SSL overview with expiration status
| Feature | Description |
|---|---|
| π Dashboard | System overview, stats, alerts, quick actions |
| π Proxy Rules | Visual editor for reverse proxy rules |
| π Wildcard SSL | Manage wildcard certificates with DNS challenge |
| βοΈ Snippets | Cloudflare DNS, security headers, rate limiting |
| π Certificates | SSL overview with expiration warnings |
| π₯ Multi-User | Role-based access (Admin, Editor, Viewer) |
| πΎ Backup | Full config backup & restore |
| π i18n | English, Czech & Korean |
| π Templates | 17+ pre-configured service templates |
| π³ Docker Auto-Discovery | Automatic container detection with one-click rule creation |
docker pull perteus/caddy-ui:3.2.0
docker pull perteus/caddy-ui:latestversion: '3.8'
services:
caddy:
image: caddy:2-alpine
container_name: caddy_proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy-config:/etc/caddy
- ./caddy-data:/data
cpm:
image: perteus/caddy-ui:3.2.0
container_name: cpm
ports:
- "8501:8501"
environment:
- CONTAINER_NAME=caddy_proxy
- DEFAULT_IP=192.168.1.100
volumes:
- ./caddy-config:/caddy-config
- ./caddy-data:/caddy-data
- /var/run/docker.sock:/var/run/docker.sockservices:
caddy:
image: serfriz/caddy-cloudflare:latest
container_name: caddy_proxy
environment:
- CF_API_TOKEN=${CF_API_TOKEN}
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy-config:/etc/caddy
- ./caddy-data:/data
cpm:
image: perteus/caddy-ui:3.2.0
container_name: cpm
privileged: true # Required for Synology
ports:
- "8501:8501"
environment:
- CONTAINER_NAME=caddy_proxy
- DEFAULT_IP=192.168.1.100
volumes:
- ./caddy-config:/caddy-config
- ./caddy-data:/caddy-data
- /var/run/docker.sock:/var/run/docker.sock- Navigate to Settings β Wildcard SSL
- Add your domain (e.g.,
zrnek.czfor*.zrnek.cz) - Select provider (Cloudflare) and configure API token
- Migrate existing sites - CPM will offer to update all matching sites
When creating new proxy rules, CPM automatically detects if a wildcard certificate is available and pre-selects it.
CPM generates TLS snippets in snippets.caddy:
(wildcard-tls-zrnek-cz) {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
}
Sites using wildcard import this snippet:
adguard.zrnek.cz {
import wildcard-tls-zrnek-cz
import cloudflare_dns
reverse_proxy 192.168.1.100:3000
}
| Variable | Description | Default |
|---|---|---|
PORT |
HTTP port | 8501 |
CONTAINER_NAME |
Caddy container name | caddy |
CADDY_CONFIG_PATH |
Path to Caddy config | /caddy-config |
CADDY_DATA_PATH |
Path to Caddy data | /caddy-data |
DEFAULT_IP |
Default target IP for new rules | 192.168.1.1 |
CF_API_TOKEN |
Cloudflare API token (for wildcard SSL) | - |
caddy-config/
βββ Caddyfile # Main config (managed by CPM)
βββ snippets.caddy # Shared snippets + wildcard TLS (auto-generated)
βββ sites/
β βββ wildcard/ # Wildcard site handle blocks
β β βββ *.domain.caddy
β βββ standard/ # Standard domain {} blocks
β βββ domain.caddy
βββ pages/ # Custom error pages (optional)
βββ 403.html
βββ 404.html
caddy-data/
βββ caddy/
βββ certificates/ # SSL certificates (auto-managed)
For Synology Docker, use privileged: true to allow Docker socket access:
cpm:
image: perteus/caddy-ui:3.2.0
privileged: true
volumes:
- /volume1/docker/caddy-config:/caddy-config
- /volume1/docker/caddy-data:/caddy-data
- /var/run/docker.sock:/var/run/docker.sockGET /api/v1/sites # List all proxy rules
GET /api/v1/status # Caddy status
POST /api/v1/reload # Reload Caddy configuration# Prerequisites: Go 1.26
git clone https://github.com/TomasZmek/cpm.git
cd cpm
# Build
go build -o cpm ./cmd/cpm
# Run
./cpmdocker build -t perteus/caddy-ui:3.2.0 --no-cache .
docker push perteus/caddy-ui:3.2.0
docker push perteus/caddy-ui:latest| Version | Date | Notes |
|---|---|---|
| 3.3.1 | 2026-06-17 | π Security patch β Go 1.26.4 (CVE-2026-42504, CVE-2026-27145, CVE-2026-42507) |
| 3.3.0 | 2026-06-13 | π i18n refactor β PO/MO format, Korean language, plural support infrastructure |
| 3.2.0 | 2026-05-31 | π³ Docker Auto-Discovery β automatic container detection, multi-host support |
| 3.1.3 | 2026-05-30 | π Security patch β x/crypto CVE fixes, moby/moby/client |
| 3.1.2 | 2026-05-16 | π Security fixes, refactoring |
| 3.1.1 | 2026-05-16 | π Security update, Go 1.26, multi-platform (amd64/arm64) |
| 3.1.0 | 2026-01 | π Wildcard refactor, new architecture |
| 3.0.2 | 2026-01 | π Wildcard TLS fix, parser fix, 405 fix |
| 3.0.1 | 2026-01 | π Wildcard SSL, migration tools, UI improvements |
| 3.0.0 | 2026-01 | π Complete Go rewrite (794MB β 6MB) |
| 2.2.1 | 2025-12 | Python version (deprecated) |
- β Auto-Discovery β automatic detection of running containers
- β Multi-host support β monitor multiple Docker hosts
- β Smart pairing β match existing proxy rules with containers
- β One-click rule creation β pre-filled from discovered containers
- β Local IP autodetection β detects host IP automatically
- β Race condition fix - ValidateSession no longer writes to map under read lock
- β Path traversal fix - ZIP restore is now protected against zip-slip attacks
- β CSRF protection - all forms now protected with CSRF tokens
- β Brute-force protection - login endpoint rate limited (5 attempts / 15 min)
- β Dashboard fix - certificate days remaining now displays correctly
- β Code deduplication - shared utils package, consistent logging
- β Go 1.26 - updated runtime with security fixes
- β Multi-platform - native amd64 and arm64 support (Apple Silicon, Raspberry Pi, Synology)
- β Fiber v2.52.13 - security fixes (CVE-2025-66630, CVE-2026-25882)
- β Docker SDK v28.5.2 - updated Docker client library
- β Internal-only restrictions - restrict site access to internal network only
- β New architecture - Wildcard blocks in Caddyfile, handle blocks for sites
- β Correct TLS handling - No more individual certificate requests
- β Better error reporting - Detailed Caddy output in UI
- β Internal-only fix - Handled at wildcard block level
Contributions welcome! Feel free to submit issues and pull requests.
- π Report bugs: GitHub Issues
- π‘ Feature requests: GitHub Discussions
- π¦ Source code: GitHub Repository
MIT License - see LICENSE for details.
- Built with Go & Fiber
- Interactivity: HTMX
- Dialogs: SweetAlert2
- Developed with assistance from Claude AI
- π°π· Korean translation: @redstar-programmer
CPM - Caddy Proxy Manager
Made with β€οΈ for home labs
Docker Hub β’
GitHub