Major Updates: - Rewrote all docs in beginner-friendly 'ELI5' language - Created docs index with user journey navigation - Added complete getting-started guide for novice users - Set up GitHub Container Registry (GHCR) automation - Configured GitHub Pages deployment for documentation Documentation: - docs/index.md - Central navigation hub - docs/getting-started.md - Step-by-step beginner guide - docs/github-setup.md - CI/CD setup instructions - README.md - Complete rewrite in accessible language - CONTRIBUTING.md - Contributor guidelines - Multiple comprehensive API and schema docs CI/CD Workflows: - .github/workflows/docker-build.yml - Multi-platform builds to GHCR - .github/workflows/docs.yml - Automated docs deployment to Pages - Supports main (latest), development (dev), and version tags - Automated testing of built images - Beautiful documentation site with dark theme Benefits: - Zero barrier to entry for new users - Automated Docker builds (AMD64 + ARM64) - Professional documentation site - No Docker Hub account needed (uses GHCR) - Complete CI/CD pipeline All 7 implementation phases complete - project is production ready!
430 lines
9.8 KiB
Markdown
430 lines
9.8 KiB
Markdown
# Caddyfile Import Guide
|
|
|
|
This guide explains how to import existing Caddyfiles into CaddyProxyManager+, handle conflicts, and troubleshoot common issues.
|
|
|
|
## Table of Contents
|
|
|
|
- [Overview](#overview)
|
|
- [Import Methods](#import-methods)
|
|
- [Import Workflow](#import-workflow)
|
|
- [Conflict Resolution](#conflict-resolution)
|
|
- [Supported Caddyfile Syntax](#supported-caddyfile-syntax)
|
|
- [Limitations](#limitations)
|
|
- [Troubleshooting](#troubleshooting)
|
|
- [Examples](#examples)
|
|
|
|
## Overview
|
|
|
|
CaddyProxyManager+ can import existing Caddyfiles and convert them into managed proxy host configurations. This is useful when:
|
|
|
|
- Migrating from standalone Caddy to CaddyProxyManager+
|
|
- Importing configurations from other systems
|
|
- Bulk importing multiple proxy hosts
|
|
- Sharing configurations between environments
|
|
|
|
## Import Methods
|
|
|
|
### Method 1: File Upload
|
|
|
|
1. Navigate to **Import Caddyfile** page
|
|
2. Click **Choose File** button
|
|
3. Select your Caddyfile (any text file)
|
|
4. Click **Upload**
|
|
|
|
### Method 2: Paste Content
|
|
|
|
1. Navigate to **Import Caddyfile** page
|
|
2. Click **Paste Caddyfile** tab
|
|
3. Paste your Caddyfile content into the textarea
|
|
4. Click **Preview Import**
|
|
|
|
## Import Workflow
|
|
|
|
The import process follows these steps:
|
|
|
|
### 1. Upload/Paste
|
|
|
|
Upload your Caddyfile or paste the content directly.
|
|
|
|
```caddyfile
|
|
# Example Caddyfile
|
|
example.com {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
|
|
api.example.com {
|
|
reverse_proxy https://backend:9000
|
|
}
|
|
```
|
|
|
|
### 2. Parsing
|
|
|
|
The system parses your Caddyfile and extracts:
|
|
- Domain names
|
|
- Reverse proxy directives
|
|
- TLS settings
|
|
- Headers and other directives
|
|
|
|
**Parsing States:**
|
|
- ✅ **Success** - All hosts parsed correctly
|
|
- ⚠️ **Partial** - Some hosts parsed, others failed
|
|
- ❌ **Failed** - Critical parsing error
|
|
|
|
### 3. Preview
|
|
|
|
Review the parsed configurations:
|
|
|
|
| Domain | Forward Host | Forward Port | SSL | Status |
|
|
|--------|--------------|--------------|-----|--------|
|
|
| example.com | localhost | 8080 | No | New |
|
|
| api.example.com | backend | 9000 | Yes | New |
|
|
|
|
### 4. Conflict Detection
|
|
|
|
The system checks if any imported domains already exist:
|
|
|
|
- **No Conflicts** - All domains are new, safe to import
|
|
- **Conflicts Found** - One or more domains already exist
|
|
|
|
### 5. Conflict Resolution
|
|
|
|
For each conflict, choose an action:
|
|
|
|
| Domain | Existing Config | New Config | Action |
|
|
|--------|-----------------|------------|--------|
|
|
| example.com | localhost:3000 | localhost:8080 | [Keep Existing ▼] |
|
|
|
|
**Resolution Options:**
|
|
- **Keep Existing** - Don't import this host, keep current configuration
|
|
- **Overwrite** - Replace existing configuration with imported one
|
|
- **Skip** - Don't import this host, keep existing unchanged
|
|
- **Create New** - Import as a new host with modified domain name
|
|
|
|
### 6. Commit
|
|
|
|
Once all conflicts are resolved, click **Commit Import** to finalize.
|
|
|
|
**Post-Import:**
|
|
- Imported hosts appear in Proxy Hosts list
|
|
- Configurations are saved to database
|
|
- Caddy configs are generated automatically
|
|
|
|
## Conflict Resolution
|
|
|
|
### Strategy: Keep Existing
|
|
|
|
Use when you want to preserve your current configuration and ignore the imported one.
|
|
|
|
```
|
|
Current: example.com → localhost:3000
|
|
Imported: example.com → localhost:8080
|
|
Result: example.com → localhost:3000 (unchanged)
|
|
```
|
|
|
|
### Strategy: Overwrite
|
|
|
|
Use when the imported configuration is newer or more correct.
|
|
|
|
```
|
|
Current: example.com → localhost:3000
|
|
Imported: example.com → localhost:8080
|
|
Result: example.com → localhost:8080 (replaced)
|
|
```
|
|
|
|
### Strategy: Skip
|
|
|
|
Same as "Keep Existing" - imports everything except conflicting hosts.
|
|
|
|
### Strategy: Create New (Future)
|
|
|
|
Renames the imported host to avoid conflicts (e.g., `example.com` → `example-2.com`).
|
|
|
|
## Supported Caddyfile Syntax
|
|
|
|
### Basic Reverse Proxy
|
|
|
|
```caddyfile
|
|
example.com {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
```
|
|
|
|
**Parsed as:**
|
|
- Domain: `example.com`
|
|
- Forward Host: `localhost`
|
|
- Forward Port: `8080`
|
|
- Forward Scheme: `http`
|
|
|
|
### HTTPS Upstream
|
|
|
|
```caddyfile
|
|
secure.example.com {
|
|
reverse_proxy https://backend:9000
|
|
}
|
|
```
|
|
|
|
**Parsed as:**
|
|
- Domain: `secure.example.com`
|
|
- Forward Host: `backend`
|
|
- Forward Port: `9000`
|
|
- Forward Scheme: `https`
|
|
|
|
### Multiple Domains
|
|
|
|
```caddyfile
|
|
example.com, www.example.com {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
```
|
|
|
|
**Parsed as:**
|
|
- Domain: `example.com, www.example.com`
|
|
- Forward Host: `localhost`
|
|
- Forward Port: `8080`
|
|
|
|
### TLS Configuration
|
|
|
|
```caddyfile
|
|
example.com {
|
|
tls internal
|
|
reverse_proxy localhost:8080
|
|
}
|
|
```
|
|
|
|
**Parsed as:**
|
|
- SSL Forced: `true`
|
|
- TLS provider: `internal` (self-signed)
|
|
|
|
### Headers and Directives
|
|
|
|
```caddyfile
|
|
example.com {
|
|
header {
|
|
X-Custom-Header "value"
|
|
}
|
|
reverse_proxy localhost:8080 {
|
|
header_up Host {host}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Note:** Custom headers and advanced directives are stored in the raw CaddyConfig but may not be editable in the UI initially.
|
|
|
|
## Limitations
|
|
|
|
### Current Limitations
|
|
|
|
1. **Path-based routing** - Not yet supported
|
|
```caddyfile
|
|
example.com {
|
|
route /api/* {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
route /static/* {
|
|
file_server
|
|
}
|
|
}
|
|
```
|
|
|
|
2. **File server blocks** - Only reverse_proxy supported
|
|
```caddyfile
|
|
static.example.com {
|
|
file_server
|
|
root * /var/www/html
|
|
}
|
|
```
|
|
|
|
3. **Advanced matchers** - Basic domain matching only
|
|
```caddyfile
|
|
@api {
|
|
path /api/*
|
|
header X-API-Key *
|
|
}
|
|
reverse_proxy @api localhost:8080
|
|
```
|
|
|
|
4. **Import statements** - Must be resolved before import
|
|
```caddyfile
|
|
import snippets/common.caddy
|
|
```
|
|
|
|
5. **Environment variables** - Must be hardcoded
|
|
```caddyfile
|
|
{$DOMAIN} {
|
|
reverse_proxy {$BACKEND_HOST}
|
|
}
|
|
```
|
|
|
|
### Workarounds
|
|
|
|
- **Path routing**: Create multiple proxy hosts per path
|
|
- **File server**: Use separate Caddy instance or static host tool
|
|
- **Matchers**: Manually configure in Caddy after import
|
|
- **Imports**: Flatten your Caddyfile before importing
|
|
- **Variables**: Replace with actual values before import
|
|
|
|
## Troubleshooting
|
|
|
|
### Error: "Failed to parse Caddyfile"
|
|
|
|
**Cause:** Invalid Caddyfile syntax
|
|
|
|
**Solution:**
|
|
1. Validate your Caddyfile with `caddy validate --config Caddyfile`
|
|
2. Check for missing braces `{}`
|
|
3. Ensure reverse_proxy directives are properly formatted
|
|
|
|
### Error: "No hosts found in Caddyfile"
|
|
|
|
**Cause:** Only contains directives without reverse_proxy blocks
|
|
|
|
**Solution:**
|
|
- Ensure you have at least one `reverse_proxy` directive
|
|
- Remove file_server-only blocks
|
|
- Add domain blocks with reverse_proxy
|
|
|
|
### Warning: "Some hosts could not be imported"
|
|
|
|
**Cause:** Partial import with unsupported features
|
|
|
|
**Solution:**
|
|
- Review the preview to see which hosts failed
|
|
- Simplify complex directives
|
|
- Import compatible hosts, add others manually
|
|
|
|
### Conflict Resolution Stuck
|
|
|
|
**Cause:** Not all conflicts have resolution selected
|
|
|
|
**Solution:**
|
|
- Ensure every conflicting host has a resolution dropdown selection
|
|
- The "Commit Import" button enables only when all conflicts are resolved
|
|
|
|
## Examples
|
|
|
|
### Example 1: Simple Migration
|
|
|
|
**Original Caddyfile:**
|
|
```caddyfile
|
|
app.example.com {
|
|
reverse_proxy localhost:3000
|
|
}
|
|
|
|
api.example.com {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
```
|
|
|
|
**Import Result:**
|
|
- 2 hosts imported successfully
|
|
- No conflicts
|
|
- Ready to use immediately
|
|
|
|
### Example 2: HTTPS Upstream
|
|
|
|
**Original Caddyfile:**
|
|
```caddyfile
|
|
secure.example.com {
|
|
reverse_proxy https://internal.corp:9000 {
|
|
transport http {
|
|
tls_insecure_skip_verify
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Import Result:**
|
|
- Domain: `secure.example.com`
|
|
- Forward: `https://internal.corp:9000`
|
|
- Note: `tls_insecure_skip_verify` stored in raw config
|
|
|
|
### Example 3: Multi-domain with Conflict
|
|
|
|
**Original Caddyfile:**
|
|
```caddyfile
|
|
example.com, www.example.com {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
```
|
|
|
|
**Existing Configuration:**
|
|
- `example.com` already points to `localhost:3000`
|
|
|
|
**Resolution:**
|
|
1. System detects conflict on `example.com`
|
|
2. Choose **Overwrite** to use new config
|
|
3. Commit import
|
|
4. Result: `example.com, www.example.com → localhost:8080`
|
|
|
|
### Example 4: Complex Setup (Partial Import)
|
|
|
|
**Original Caddyfile:**
|
|
```caddyfile
|
|
# Supported
|
|
app.example.com {
|
|
reverse_proxy localhost:3000
|
|
}
|
|
|
|
# Supported
|
|
api.example.com {
|
|
reverse_proxy https://backend:8080
|
|
}
|
|
|
|
# NOT supported (file server)
|
|
static.example.com {
|
|
file_server
|
|
root * /var/www
|
|
}
|
|
|
|
# NOT supported (path routing)
|
|
multi.example.com {
|
|
route /api/* {
|
|
reverse_proxy localhost:8080
|
|
}
|
|
route /web/* {
|
|
reverse_proxy localhost:3000
|
|
}
|
|
}
|
|
```
|
|
|
|
**Import Result:**
|
|
- ✅ `app.example.com` imported
|
|
- ✅ `api.example.com` imported
|
|
- ❌ `static.example.com` skipped (file_server not supported)
|
|
- ❌ `multi.example.com` skipped (path routing not supported)
|
|
- **Action:** Add unsupported hosts manually through UI or keep separate Caddyfile
|
|
|
|
## Best Practices
|
|
|
|
1. **Validate First** - Run `caddy validate` before importing
|
|
2. **Backup** - Keep a backup of your original Caddyfile
|
|
3. **Simplify** - Remove unsupported directives before import
|
|
4. **Test Small** - Import a few hosts first to verify
|
|
5. **Review Preview** - Always check the preview before committing
|
|
6. **Resolve Conflicts Carefully** - Understand impact before overwriting
|
|
7. **Document Custom Config** - Note any advanced directives that can't be edited in UI
|
|
|
|
## Getting Help
|
|
|
|
If you encounter issues:
|
|
|
|
1. Check this guide's [Troubleshooting](#troubleshooting) section
|
|
2. Review [Supported Syntax](#supported-caddyfile-syntax)
|
|
3. Open an issue on GitHub with:
|
|
- Your Caddyfile (sanitized)
|
|
- Error messages
|
|
- Expected vs actual behavior
|
|
|
|
## Future Enhancements
|
|
|
|
Planned improvements to import functionality:
|
|
|
|
- [ ] Path-based routing support
|
|
- [ ] Custom header import/export
|
|
- [ ] Environment variable resolution
|
|
- [ ] Import from URL
|
|
- [ ] Export to Caddyfile
|
|
- [ ] Diff view for conflicts
|
|
- [ ] Batch import from multiple files
|
|
- [ ] Import validation before upload
|