Make caddy use caddy.json
diff --git a/modules/caddy/caddy.json b/modules/caddy/caddy.json
new file mode 100755
index 0000000..8b9726b
--- /dev/null
+++ b/modules/caddy/caddy.json
@@ -0,0 +1,663 @@
+{
+ "apps": {
+ "http": {
+ "servers": {
+ "srv0": {
+ "listen": [":443"],
+ "routes": [
+ {
+ "match": [
+ {
+ "host": ["signup.hopescaramels.com"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "192.168.0.4:3035"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["homebridge.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "localhost:8581"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": [
+ "mail.coded.codes",
+ "mail.clicks.codes",
+ "mail.hopescaramels.com"
+ ]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "transport": {
+ "protocol": "http"
+ },
+ "upstreams": [
+ {
+ "dial": "localhost:1080"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["etherpad.clicks.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "127.0.0.1:9001"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["www.hopescaramels.com"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "headers": {
+ "Location": ["https://etsy.com/shop/HopesCaramels"]
+ },
+ "status_code": 302
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["jellyfin.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "localhost:8096"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["codedpc.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "192.168.0.2:3389"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["testing.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "192.168.0.2:3030"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["kavita.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "localhost:5000"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["hopescaramels.com"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "headers": {
+ "Location": ["https://etsy.com/shop/HopesCaramels"]
+ },
+ "status_code": 302
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["api.clicks.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "rewrite",
+ "strip_path_prefix": "/nucleus"
+ }
+ ]
+ },
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "127.0.0.1:10000"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "match": [
+ {
+ "path": ["/nucleus/*"]
+ }
+ ]
+ },
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "status_code": 503
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["omv.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "localhost:6773"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["api.coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "rewrite",
+ "strip_path_prefix": "/nucleus"
+ }
+ ]
+ },
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "192.168.0.2:10000"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "match": [
+ {
+ "path": ["/nucleus/*"]
+ }
+ ]
+ },
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "status_code": 404
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["www.clicks.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "headers": {
+ "Location": [
+ "https://clicks.codes{http.request.uri}"
+ ]
+ },
+ "status_code": 302
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["clicks.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "127.0.0.1:3000"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": ["coded.codes"]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "headers": {
+ "Location": [
+ "https://clicks.codes{http.request.uri}"
+ ]
+ },
+ "status_code": 302
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ }
+ ]
+ },
+ "srv1": {
+ "listen": [":80"],
+ "routes": [
+ {
+ "match": [
+ {
+ "host": [
+ "mail.clicks.codes",
+ "mail.coded.codes",
+ "mail.hopescaramels.com",
+ "autoconfig.coded.codes",
+ "autoconfig.clicks.codes",
+ "autoconfig.hopescaramels.com",
+
+ "imap.coded.codes",
+ "imap.clicks.codes",
+ "imap.hopescaramels.com",
+ "pop.coded.codes",
+ "pop.clicks.codes",
+ "pop.hopescaramels.com",
+ "smtp.coded.codes",
+ "smtp.clicks.codes",
+ "smtp.hopescaramels.com"
+ ]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "reverse_proxy",
+ "upstreams": [
+ {
+ "dial": "localhost:1080"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ }
+ ]
+ }
+ }
+ },
+ "layer4": {
+ "servers": {
+ "smtp-25": {
+ "listen": ["0.0.0.0:25"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1025"] }]
+ }
+ ]
+ }
+ ]
+ },
+ "smtp-465": {
+ "listen": ["0.0.0.0:465"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1465"] }]
+ }
+ ]
+ }
+ ]
+ },
+ "smtp-587": {
+ "listen": ["0.0.0.0:587"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1587"] }]
+ }
+ ]
+ }
+ ]
+ },
+ "pop-110": {
+ "listen": ["0.0.0.0:110"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1110"] }]
+ }
+ ]
+ }
+ ]
+ },
+ "pop-995": {
+ "listen": ["0.0.0.0:995"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1995"] }]
+ }
+ ]
+ }
+ ]
+ },
+ "imap-143": {
+ "listen": ["0.0.0.0:143"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1143"] }]
+ }
+ ]
+ }
+ ]
+ },
+ "imap-993": {
+ "listen": ["0.0.0.0:993"],
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "proxy",
+ "proxy_protocol": "v2",
+ "upstreams": [{ "dial": ["127.0.0.1:1993"] }]
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ }
+}