| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- [
- {
- "key": "general",
- "title": "General",
- "vars": [
- {
- "name": "service_name",
- "description": "Service name",
- "type": "str",
- "required": true
- },
- {
- "name": "container_name",
- "description": "Container name",
- "type": "str"
- },
- {
- "name": "container_hostname",
- "description": "Container internal hostname",
- "type": "str"
- },
- {
- "name": "container_timezone",
- "description": "Container timezone (e.g., Europe/Berlin)",
- "type": "str"
- },
- {
- "name": "user_uid",
- "description": "User UID for container process",
- "type": "int",
- "default": 1000
- },
- {
- "name": "user_gid",
- "description": "User GID for container process",
- "type": "int",
- "default": 1000
- },
- {
- "name": "container_loglevel",
- "description": "Container log level",
- "type": "enum",
- "options": ["debug", "info", "warn", "error"]
- },
- {
- "name": "restart_policy",
- "description": "Container restart policy",
- "type": "enum",
- "options": ["unless-stopped", "always", "on-failure", "no"],
- "default": "unless-stopped",
- "required": true
- }
- ]
- },
- {
- "key": "network",
- "title": "Network",
- "vars": [
- {
- "name": "network_mode",
- "description": "Docker network mode",
- "type": "enum",
- "options": ["bridge", "host", "macvlan"],
- "extra": "bridge=default Docker networking, host=use host network stack, macvlan=dedicated MAC address on physical network"
- },
- {
- "name": "network_name",
- "description": "Docker network name",
- "type": "str",
- "default": "bridge",
- "needs": ["network_mode=bridge,macvlan"],
- "required": true
- },
- {
- "name": "network_external",
- "description": "Use existing Docker network (external)",
- "type": "bool",
- "default": false,
- "needs": ["network_mode=bridge,macvlan"]
- },
- {
- "name": "network_macvlan_ipv4_address",
- "description": "Static IP address for container",
- "type": "str",
- "default": "192.168.1.253",
- "needs": ["network_mode=macvlan"],
- "required": true
- },
- {
- "name": "network_macvlan_parent_interface",
- "description": "Host network interface name",
- "type": "str",
- "default": "eth0",
- "needs": ["network_mode=macvlan"],
- "required": true
- },
- {
- "name": "network_macvlan_subnet",
- "description": "Network subnet in CIDR notation",
- "type": "str",
- "default": "192.168.1.0/24",
- "needs": ["network_mode=macvlan"],
- "required": true
- },
- {
- "name": "network_macvlan_gateway",
- "description": "Network gateway IP address",
- "type": "str",
- "default": "192.168.1.1",
- "needs": ["network_mode=macvlan"],
- "required": true
- }
- ]
- },
- {
- "key": "ports",
- "title": "Ports",
- "needs": ["network_mode!=host,macvlan"],
- "description": "Expose service ports to the host.",
- "vars": [
- {
- "name": "ports_http",
- "description": "HTTP port on host",
- "type": "int",
- "needs": ["traefik_enabled=false"],
- "default": 8080,
- "required": true
- },
- {
- "name": "ports_https",
- "description": "HTTPS port on host",
- "type": "int",
- "needs": ["traefik_enabled=false"],
- "default": 8443,
- "required": true
- },
- {
- "name": "ports_ssh",
- "description": "SSH port on host",
- "type": "int",
- "default": 22,
- "required": true
- },
- {
- "name": "ports_dns",
- "description": "DNS port on host",
- "type": "int",
- "default": 53,
- "required": true
- },
- {
- "name": "ports_dhcp",
- "description": "DHCP port on host",
- "type": "int",
- "default": 67,
- "required": true
- },
- {
- "name": "ports_smtp",
- "description": "SMTP port on host",
- "type": "int",
- "default": 25,
- "required": true
- },
- {
- "name": "ports_snmp",
- "description": "SNMP trap port",
- "type": "int",
- "default": 162,
- "required": true
- }
- ]
- },
- {
- "key": "traefik",
- "title": "Traefik",
- "toggle": "traefik_enabled",
- "needs": ["network_mode!=host,macvlan"],
- "description": "Traefik routes external traffic to your service.",
- "vars": [
- {
- "name": "traefik_enabled",
- "description": "Enable Traefik reverse proxy integration",
- "type": "bool",
- "default": false
- },
- {
- "name": "traefik_network",
- "description": "Traefik network name",
- "type": "str",
- "default": "traefik",
- "required": true
- },
- {
- "name": "traefik_host",
- "description": "Service subdomain or full hostname (e.g., 'app' or 'app.example.com')",
- "type": "str",
- "required": true
- },
- {
- "name": "traefik_domain",
- "description": "Base domain (e.g., example.com)",
- "type": "str",
- "default": "home.arpa",
- "required": true
- }
- ]
- },
- {
- "key": "traefik_tls",
- "title": "Traefik TLS/SSL",
- "toggle": "traefik_tls_enabled",
- "needs": ["traefik_enabled=true", "network_mode!=host,macvlan"],
- "description": "Enable HTTPS/TLS for Traefik with certificate management.",
- "vars": [
- {
- "name": "traefik_tls_enabled",
- "description": "Enable HTTPS/TLS",
- "type": "bool",
- "default": true
- },
- {
- "name": "traefik_tls_certresolver",
- "description": "Traefik certificate resolver name",
- "type": "str",
- "default": "cloudflare",
- "required": true
- }
- ]
- },
- {
- "key": "volume",
- "title": "Volume Storage",
- "description": "Configure persistent storage for your service.",
- "vars": [
- {
- "name": "volume_mode",
- "description": "Volume storage backend",
- "type": "enum",
- "options": ["local", "mount", "nfs"],
- "default": "local",
- "required": true
- },
- {
- "name": "volume_mount_path",
- "description": "Host path for bind mounts",
- "type": "str",
- "default": "/mnt/storage",
- "needs": ["volume_mode=mount"],
- "required": true
- },
- {
- "name": "volume_nfs_server",
- "description": "NFS server address",
- "type": "str",
- "default": "192.168.1.1",
- "needs": ["volume_mode=nfs"],
- "required": true
- },
- {
- "name": "volume_nfs_path",
- "description": "NFS export path",
- "type": "str",
- "default": "/export",
- "needs": ["volume_mode=nfs"],
- "required": true
- },
- {
- "name": "volume_nfs_options",
- "description": "NFS mount options (comma-separated)",
- "type": "str",
- "default": "rw,nolock,soft",
- "needs": ["volume_mode=nfs"],
- "required": true
- }
- ]
- },
- {
- "key": "resources",
- "title": "Resource Limits",
- "toggle": "resources_enabled",
- "description": "Set CPU and memory limits for the service.",
- "vars": [
- {
- "name": "resources_enabled",
- "description": "Enable resource limits",
- "type": "bool",
- "default": false
- },
- {
- "name": "resources_cpu_limit",
- "description": "Maximum CPU cores (e.g., 0.5, 1.0, 2.0)",
- "type": "str",
- "default": "1.0",
- "required": true
- },
- {
- "name": "resources_cpu_reservation",
- "description": "Reserved CPU cores",
- "type": "str",
- "default": "0.25",
- "needs": ["swarm_enabled=true"],
- "required": true
- },
- {
- "name": "resources_memory_limit",
- "description": "Maximum memory (e.g., 512M, 1G, 2G)",
- "type": "str",
- "default": "1G",
- "required": true
- },
- {
- "name": "resources_memory_reservation",
- "description": "Reserved memory",
- "type": "str",
- "default": "512M",
- "needs": ["swarm_enabled=true"],
- "required": true
- }
- ]
- },
- {
- "key": "swarm",
- "title": "Docker Swarm",
- "toggle": "swarm_enabled",
- "needs": ["network_mode!=host,macvlan"],
- "description": "Deploy service in Docker Swarm mode.",
- "vars": [
- {
- "name": "swarm_enabled",
- "description": "Enable Docker Swarm mode",
- "type": "bool",
- "default": false
- },
- {
- "name": "swarm_placement_mode",
- "description": "Swarm placement mode",
- "type": "enum",
- "options": ["replicated", "global"],
- "default": "replicated",
- "required": true
- },
- {
- "name": "swarm_replicas",
- "description": "Number of replicas",
- "type": "int",
- "default": 1,
- "needs": ["swarm_placement_mode=replicated"],
- "required": true
- },
- {
- "name": "swarm_placement_host",
- "description": "Target hostname for placement constraint",
- "type": "str",
- "default": "",
- "needs": ["swarm_placement_mode=replicated"],
- "extra": "Constrains service to run on specific node by hostname"
- }
- ]
- },
- {
- "key": "database",
- "title": "Database",
- "toggle": "database_enabled",
- "description": "Connect to external database (PostgreSQL or MySQL)",
- "vars": [
- {
- "name": "database_enabled",
- "description": "Enable external database integration",
- "type": "bool",
- "default": false
- },
- {
- "name": "database_type",
- "description": "Database type",
- "type": "enum",
- "options": ["sqlite", "postgres", "mysql"],
- "default": "sqlite",
- "required": true
- },
- {
- "name": "database_external",
- "description": "Use an external database server?",
- "extra": "skips creation of internal database container",
- "type": "bool",
- "needs": ["database_type=postgres,mysql"],
- "default": false
- },
- {
- "name": "database_host",
- "description": "Database host",
- "type": "str",
- "needs": ["database_external=true;database_type=postgres,mysql"],
- "required": true
- },
- {
- "name": "database_port",
- "description": "Database port",
- "type": "int",
- "needs": ["database_external=true;database_type=postgres,mysql"],
- "required": true
- },
- {
- "name": "database_name",
- "description": "Database name",
- "type": "str",
- "needs": ["database_type=postgres,mysql"],
- "required": true
- },
- {
- "name": "database_user",
- "description": "Database user",
- "type": "str",
- "needs": ["database_type=postgres,mysql"],
- "required": true
- },
- {
- "name": "database_password",
- "description": "Database password",
- "type": "str",
- "needs": ["database_type=postgres,mysql"],
- "sensitive": true,
- "autogenerated": true,
- "required": true
- }
- ]
- },
- {
- "key": "email",
- "title": "Email Server",
- "toggle": "email_enabled",
- "description": "Configure email server for notifications and user management.",
- "vars": [
- {
- "name": "email_enabled",
- "description": "Enable email server configuration",
- "type": "bool",
- "default": false
- },
- {
- "name": "email_host",
- "description": "SMTP server hostname",
- "type": "str",
- "required": true
- },
- {
- "name": "email_port",
- "description": "SMTP server port",
- "type": "int",
- "default": 25,
- "required": true
- },
- {
- "name": "email_username",
- "description": "SMTP username",
- "type": "str",
- "required": true
- },
- {
- "name": "email_password",
- "description": "SMTP password",
- "type": "str",
- "sensitive": true,
- "required": true
- },
- {
- "name": "email_from",
- "description": "From email address",
- "type": "str",
- "required": true
- },
- {
- "name": "email_encryption",
- "description": "Email encryption method to use",
- "type": "enum",
- "options": ["none", "starttls", "ssl"]
- }
- ]
- },
- {
- "key": "authentik",
- "title": "Authentik SSO",
- "toggle": "authentik_enabled",
- "description": "Integrate with Authentik for Single Sign-On authentication.",
- "vars": [
- {
- "name": "authentik_enabled",
- "description": "Enable Authentik SSO integration",
- "type": "bool",
- "default": false
- },
- {
- "name": "authentik_url",
- "description": "Authentik base URL (e.g., https://auth.example.com)",
- "type": "url",
- "required": true
- },
- {
- "name": "authentik_slug",
- "description": "Authentik application slug",
- "type": "str",
- "required": true
- },
- {
- "name": "authentik_traefik_middleware",
- "description": "Traefik middleware name for Authentik authentication",
- "type": "str",
- "default": "authentik-middleware@file",
- "needs": ["traefik_enabled=true"],
- "required": true
- },
- {
- "name": "authentik_client_id",
- "description": "Authentik OAuth2 client ID",
- "type": "str",
- "sensitive": true,
- "required": true
- },
- {
- "name": "authentik_client_secret",
- "description": "Authentik OAuth2 client secret",
- "type": "str",
- "sensitive": true,
- "required": true
- }
- ]
- }
- ]
|