isb-core 1.6.11

isb's foundation: the incus client, the sandbox spec and planner, compose projects, stacks, orgs, the registry and ingress. Use the `isb` crate.
Documentation
{
  "admin": {
    "config": {
      "persist": false
    },
    "listen": "unix//run/isb/ingress/admin.sock"
  },
  "apps": {
    "http": {
      "grace_period": "10s",
      "http_port": 80,
      "https_port": 443,
      "servers": {
        "public-http": {
          "listen": [
            "0.0.0.0:80"
          ],
          "routes": [
            {
              "handle": [
                {
                  "handler": "static_response",
                  "headers": {
                    "Location": [
                      "https://{http.request.host}{http.request.uri}"
                    ]
                  },
                  "status_code": 308
                }
              ],
              "match": [
                {
                  "host": [
                    "app.example.com"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "handler": "static_response",
                  "headers": {
                    "Location": [
                      "https://{http.request.host}{http.request.uri}"
                    ]
                  },
                  "status_code": 308
                }
              ],
              "match": [
                {
                  "host": [
                    "www.app.example.com"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "handler": "static_response",
                  "headers": {
                    "Location": [
                      "https://{http.request.host}{http.request.uri}"
                    ]
                  },
                  "status_code": 308
                }
              ],
              "match": [
                {
                  "host": [
                    "*.apps.example.com"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "body": "no replica of docs is serving\n",
                  "handler": "static_response",
                  "headers": {
                    "Content-Type": [
                      "text/plain; charset=utf-8"
                    ],
                    "Retry-After": [
                      "5"
                    ]
                  },
                  "status_code": 503
                }
              ],
              "match": [
                {
                  "host": [
                    "docs.example.com"
                  ]
                }
              ],
              "terminal": true
            }
          ]
        },
        "public-https": {
          "automatic_https": {
            "disable_redirects": true,
            "skip": [
              "*.apps.example.com"
            ]
          },
          "listen": [
            "0.0.0.0:443"
          ],
          "routes": [
            {
              "handle": [
                {
                  "handler": "rewrite",
                  "strip_path_prefix": "/api"
                },
                {
                  "handler": "reverse_proxy",
                  "health_checks": {
                    "passive": {
                      "fail_duration": "10s",
                      "max_fails": 1
                    }
                  },
                  "load_balancing": {
                    "retries": 2,
                    "selection_policy": {
                      "policy": "least_conn"
                    },
                    "try_duration": "5s",
                    "try_interval": "250ms"
                  },
                  "upstreams": [
                    {
                      "dial": "10.64.3.20:3000"
                    }
                  ]
                }
              ],
              "match": [
                {
                  "host": [
                    "app.example.com"
                  ],
                  "path": [
                    "/api",
                    "/api/*"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "handler": "reverse_proxy",
                  "health_checks": {
                    "passive": {
                      "fail_duration": "10s",
                      "max_fails": 1
                    }
                  },
                  "load_balancing": {
                    "retries": 2,
                    "selection_policy": {
                      "policy": "least_conn"
                    },
                    "try_duration": "5s",
                    "try_interval": "250ms"
                  },
                  "upstreams": [
                    {
                      "dial": "10.64.3.17:8080"
                    },
                    {
                      "dial": "10.64.3.18:8080"
                    }
                  ]
                }
              ],
              "match": [
                {
                  "host": [
                    "app.example.com"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "handler": "static_response",
                  "headers": {
                    "Location": [
                      "https://app.example.com{http.request.uri}"
                    ]
                  },
                  "status_code": 308
                }
              ],
              "match": [
                {
                  "host": [
                    "www.app.example.com"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "handler": "reverse_proxy",
                  "health_checks": {
                    "passive": {
                      "fail_duration": "10s",
                      "max_fails": 1
                    }
                  },
                  "load_balancing": {
                    "retries": 2,
                    "selection_policy": {
                      "policy": "least_conn"
                    },
                    "try_duration": "5s",
                    "try_interval": "250ms"
                  },
                  "upstreams": [
                    {
                      "dial": "10.64.3.30:80"
                    }
                  ]
                }
              ],
              "match": [
                {
                  "host": [
                    "*.apps.example.com"
                  ]
                }
              ],
              "terminal": true
            }
          ]
        },
        "tunnel-beta": {
          "automatic_https": {
            "disable": true
          },
          "listen": [
            "10.70.1.1:8480"
          ],
          "routes": [
            {
              "handle": [
                {
                  "handler": "static_response",
                  "headers": {
                    "Location": [
                      "https://{http.request.host}{http.request.uri}"
                    ]
                  },
                  "status_code": 308
                }
              ],
              "match": [
                {
                  "header": {
                    "X-Forwarded-Proto": [
                      "http"
                    ]
                  },
                  "host": [
                    "beta.example.org"
                  ]
                }
              ],
              "terminal": true
            },
            {
              "handle": [
                {
                  "handler": "reverse_proxy",
                  "health_checks": {
                    "passive": {
                      "fail_duration": "10s",
                      "max_fails": 1
                    }
                  },
                  "load_balancing": {
                    "retries": 2,
                    "selection_policy": {
                      "policy": "least_conn"
                    },
                    "try_duration": "5s",
                    "try_interval": "250ms"
                  },
                  "upstreams": [
                    {
                      "dial": "10.70.1.5:80"
                    }
                  ]
                }
              ],
              "match": [
                {
                  "host": [
                    "beta.example.org"
                  ]
                }
              ],
              "terminal": true
            }
          ],
          "trusted_proxies": {
            "ranges": [
              "10.70.1.0/24"
            ],
            "source": "static"
          }
        }
      }
    },
    "pki": {
      "certificate_authorities": {
        "local": {
          "install_trust": false
        }
      }
    },
    "tls": {
      "automation": {
        "policies": [
          {
            "issuers": [
              {
                "ca": "https://acme-staging-v02.api.letsencrypt.org/directory",
                "email": "ops@example.com",
                "module": "acme"
              }
            ],
            "subjects": [
              "app.example.com",
              "www.app.example.com"
            ]
          }
        ]
      }
    }
  },
  "logging": {
    "logs": {
      "default": {
        "encoder": {
          "format": "json"
        },
        "level": "INFO",
        "writer": {
          "output": "stderr"
        }
      }
    }
  },
  "storage": {
    "module": "file_system",
    "root": "/var/lib/isb/ingress/caddy"
  }
}