docs: add README with usage guide and configuration
parent
e43a1785ee
commit
96e3581629
@ -0,0 +1,122 @@
|
||||
# Homepage on Kubernetes
|
||||
|
||||
Terraform module to deploy the [Homepage](https://gethomepage.dev/en/installation/) dashboard on Kubernetes.
|
||||
|
||||
## Features
|
||||
|
||||
- Deploys Homepage to Kubernetes using standard conventions for Kubernetes labels and selectors.
|
||||
- Creates a ServiceAccount with the required permissions for service discovery.
|
||||
- Enables `cluster` mode in Homepage config to use the ServiceAccount.
|
||||
- Deploys an Ingress resource with user-configurable annotations (e.g. for Nginx/Traefik).
|
||||
- Automatically sets the Homepage `base` setting with `https://` for common configurations.
|
||||
- Uses Types for all Homepage configs to improve DX.
|
||||
|
||||
## Usage
|
||||
|
||||
The following variables can be configured:
|
||||
|
||||
- `host` - Host under which Homepage is served.
|
||||
- `namespace` - Namesplace to deploy Homepage to. `default` is the standard.
|
||||
- `volumes` - Additional volumes to mount to the container. Can be useful to mount additional drives and display available storage.
|
||||
- `ingress_annotations` - Annotations to add to the ingress. Useful to configure Traefik/Nginx certificates or entrypoints.
|
||||
- `services_config` - List of groups and services to show in Homepage. Supports Kubernetes `namespace`, `app` and `podSelector`.
|
||||
- `widgets_config` - List of widgets to show in Homepage.
|
||||
- `settings` - Homepage settings configuration.
|
||||
- `bookmarks` - List of bookmarks to show in Homepage.
|
||||
- `docker_config` - Enabled for compatibility with a future Docker module.
|
||||
- `kubernetes_config` - Configuration for Kubernetes service discovery, using either Kubeconfig or default ServiceAccount with `mode` set to `cluster`.
|
||||
|
||||
Add the module like this:
|
||||
|
||||
```hcl
|
||||
module "homepage" {
|
||||
source = "Dan6erbond/homepage/kubernetes"
|
||||
version = "1.0.0"
|
||||
namespace = "homepage"
|
||||
volumes = [
|
||||
{
|
||||
name = "ssd"
|
||||
persistent_volume_claim = local.homepage_ssd_pvc
|
||||
mount_path = "/mnt/ssd"
|
||||
read_only = false
|
||||
},
|
||||
{
|
||||
name = "media"
|
||||
host_path = {
|
||||
path = "/mnt/media"
|
||||
}
|
||||
mount_path = "/mnt/media"
|
||||
}
|
||||
]
|
||||
ingress_annotations = {
|
||||
"traefik.ingress.kubernetes.io/router.entrypoints" = "websecure"
|
||||
"traefik.ingress.kubernetes.io/router.tls.certresolver" = "letsencrypt"
|
||||
}
|
||||
services_config = [
|
||||
{ Admin = [
|
||||
{ Grafana = {
|
||||
icon = "grafana.png"
|
||||
href = "https://grafana.ravianand.me"
|
||||
namespace = "monitoring"
|
||||
app = "grafana"
|
||||
} },
|
||||
}
|
||||
]
|
||||
widgets_config = [
|
||||
{
|
||||
resources = {
|
||||
label = "System"
|
||||
cpu = true
|
||||
memory = true
|
||||
disk = "/mnt/ssd"
|
||||
}
|
||||
},
|
||||
{
|
||||
resources = {
|
||||
label = "Media"
|
||||
disk = "/mnt/media"
|
||||
}
|
||||
},
|
||||
{
|
||||
datetime = {
|
||||
text_size = "xl"
|
||||
format = {
|
||||
timeStyle = "short"
|
||||
hour12 = false
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
settings = {
|
||||
title = "Dan6erbond Homelab"
|
||||
background = "https://images.unsplash.com/photo-1579567761406-4684ee0c75b6?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=987&q=80"
|
||||
backgroundOpacity = "0.15"
|
||||
theme = "dark"
|
||||
layout = {
|
||||
Media = {
|
||||
icon = "mdi-filmstrip"
|
||||
style = "row"
|
||||
columns = 4
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Homepage Configuration
|
||||
|
||||
All the available Homepage configuration objects are stored under Homepage's `/app/config` directory as YAML files. For more about Homepage's configuration see their [docs](https://gethomepage.dev/en/configs/services/).
|
||||
|
||||
### Kubernetes Integration
|
||||
|
||||
This module provisions a ServiceAccount with `ClusterRoleBinding` to allow Homepage to get and list ingresses, pods, namespaces, etc. You can configure the `app` and `namespace` properties in `service_config` widgets to automatically show the health status of a pod.
|
||||
|
||||
Homepage will look for pods in the configured namespace, with a `app.kubernetes.io/name` label matching the value of `app`.
|
||||
|
||||
If a more complex selector is required, this module also supports [Homepage's `podSelector`](https://gethomepage.dev/en/configs/kubernetes/#services).
|
||||
|
||||
For more about Homepage's Kubernetes integration see their [docs](https://gethomepage.dev/en/configs/kubernetes/).
|
||||
|
||||
# Authors
|
||||
|
||||
- RaviAnand Mohabir (moravrav@gmail.com)
|
Loading…
Reference in New Issue