Subsections of Monitor

Install Homepage

Official Documentation: https://gethomepage.dev/

Installation

Install By

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. Helm is installed; if not, check πŸ”—link


1.install chart directly

Details
helm install homepage oci://ghcr.io/m0nsterrr/helm-charts/homepage

2.you can modify the values.yaml and re-install

Related values files
Details
helm install homepage oci://ghcr.io/m0nsterrr/helm-charts/homepage -f homepage.values.yaml
Using Mirror
helm repo add ay-helm-mirror https://aaronyang0628.github.io/helm-chart-mirror/charts \
  && helm install ay-helm-mirror/homepage  --generate-name --version 4.2.0

for more information, you can check πŸ”—https://aaronyang0628.github.io/helm-chart-mirror/

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. ArgoCD is installed; if not, check πŸ”—link


3. Helm binary is installed; if not, check πŸ”—link


4. Ingress is installed on ArgoCD; if not, check πŸ”—link


1.prepare `homepage.yaml`

Details
kubectl -n argocd apply -f - << EOF
  apiVersion: argoproj.io/v1alpha1
  kind: Application
  metadata:
    name: homepage
  spec:
    syncPolicy:
      syncOptions:
        - CreateNamespace=true
        - ServerSideApply=true
    project: default
    source:
      repoURL: oci://ghcr.io/m0nsterrr/helm-charts/homepage
      chart: homepage
      targetRevision: 4.2.0
      helm:
        releaseName: homepage
        values: |
          image:
            registry: m.daocloud.io/ghcr.io
            repository: gethomepage/homepage
            pullPolicy: IfNotPresent
            tag: "v1.5.0"
          config:
            allowedHosts: 
            - "home.72602.online"
          ingress:
            enabled: true
            ingressClassName: "nginx"
            annotations:
              kubernetes.io/ingress.class: nginx
            hosts:
              - host: home.72602.online
                paths:
                  - path: /
                    pathType: ImplementationSpecific
          resources:
            limits:
              cpu: 500m
              memory: 512Mi
            requests:
              cpu: 100m
              memory: 128Mi
    destination:
      server: https://kubernetes.default.svc
      namespace: monitor
EOF

3.sync by argocd

Details
argocd app sync argocd/homepage

5.check the web browser

Details
K8S_MASTER_IP=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane -o jsonpath='{$.items[0].status.addresses[?(@.type=="InternalIP")].address}')
echo "$K8S_MASTER_IP home.72602.online" >> /etc/hosts

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. Docker is installed; if not, check πŸ”—link


docker run -d \
--name homepage \
-e HOMEPAGE_ALLOWED_HOSTS=47.110.67.161:3000 \
-e PUID=1000 \
-e PGID=1000 \
-p 3000:3000 \
-v /root/home-site/static/icons:/app/public/icons  \
-v /root/home-site/content/Ops/HomePage/config:/app/config \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \
ghcr.io/gethomepage/homepage:v1.5.0

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. Podman is installed; if not, check πŸ”—link


podman run -d \
--name homepage \
-e HOMEPAGE_ALLOWED_HOSTS=127.0.0.1:3000 \
-e PUID=1000 \
-e PGID=1000 \
-p 3000:3000 \
-v /root/home-site/static/icons:/app/public/icons \
-v /root/home-site/content/Ops/HomePage/config:/app/config \
--restart unless-stopped \
ghcr.io/gethomepage/homepage:v1.5.0

FAQ

Q1: Show me almost endless possibilities

You can add standard markdown syntax:

  • multiple paragraphs
  • bullet point lists
  • emphasized, bold and even bold emphasized text
  • links
  • etc.
...and even source code

the possibilities are endless (almost - including other shortcodes may or may not work)

Q2: Show me almost endless possibilities

You can add standard markdown syntax:

  • multiple paragraphs
  • bullet point lists
  • emphasized, bold and even bold emphasized text
  • links
  • etc.
...and even source code

the possibilities are endless (almost - including other shortcodes may or may not work)

Oct 7, 2025

Install Langfuse

Official Documentation: https://langfuse.com/docs

πŸš€Installation

Install By

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. Helm is installed; if not, check πŸ”—link


3. Ingress is installed; if not, check πŸ”—link


4. Cert-Manager is installed; if not, check πŸ”—link


1.prepare namespace and secrets

Details
kubectl get namespaces monitor > /dev/null 2>&1 || kubectl create namespace monitor

kubectl -n monitor create secret generic langfuse-secret \
  --from-literal=NEXTAUTH_SECRET=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 32) \
  --from-literal=SALT=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 32)

2.prepare `langfuse.values.yaml`

Details
# Minimal example. Adjust storage classes, resource limits, and domain before production use.
ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: self-signed-ca-issuer
  hosts:
    - host: langfuse.dev.72602.online
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: langfuse.dev.72602.online-tls
      hosts:
        - langfuse.dev.72602.online

env:
  NEXTAUTH_URL: https://langfuse.dev.72602.online
  TELEMETRY_ENABLED: "false"

# Use external databases in production.
postgresql:
  enabled: true
redis:
  enabled: true
clickhouse:
  enabled: true

3.install chart

Details
helm repo add langfuse https://langfuse.github.io/langfuse-k8s
helm repo update

helm upgrade --install langfuse langfuse/langfuse \
  -n monitor \
  -f langfuse.values.yaml \
  --atomic

4.monitor status

Details
kubectl -n monitor get pods
kubectl -n monitor get ingress
kubectl -n monitor logs deploy/langfuse-web --tail=100

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. Helm is installed; if not, check πŸ”—link


3. ArgoCD is installed; if not, check πŸ”—link


1.prepare `langfuse-app.yaml`

Details
kubectl -n argocd apply -f - <<'EOF'
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: langfuse
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://langfuse.github.io/langfuse-k8s
    chart: langfuse
    targetRevision: 1.0.0
    helm:
      values: |
        ingress:
          enabled: true
          className: nginx
          annotations:
            cert-manager.io/cluster-issuer: self-signed-ca-issuer
          hosts:
            - host: langfuse.dev.72602.online
              paths:
                - path: /
                  pathType: Prefix
          tls:
            - secretName: langfuse.dev.72602.online-tls
              hosts:
                - langfuse.dev.72602.online
        env:
          NEXTAUTH_URL: https://langfuse.dev.72602.online
          TELEMETRY_ENABLED: "false"
        postgresql:
          enabled: true
        redis:
          enabled: true
        clickhouse:
          enabled: true
  destination:
    server: https://kubernetes.default.svc
    namespace: monitor
  syncPolicy:
    syncOptions:
      - CreateNamespace=true
      - ServerSideApply=true
EOF

2.sync by argocd

Details
argocd app sync argocd/langfuse

3.monitor status

Details
argocd app get argocd/langfuse
kubectl -n monitor get pods
kubectl -n monitor get ingress

Verify

Details
K8S_MASTER_IP=$(kubectl get nodes --selector=node-role.kubernetes.io/control-plane -o jsonpath='{$.items[0].status.addresses[?(@.type=="InternalIP")].address}')
echo "$K8S_MASTER_IP langfuse.dev.72602.online" | sudo tee -a /etc/hosts

curl -kI https://langfuse.dev.72602.online

If response status is 200 or 302, open https://langfuse.dev.72602.online in browser.

May 8, 2026

Install Permetheus Stack

Installation

Install By

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. Helm is installed; if not, check πŸ”—link


1.get helm repo

Details
helm repo add ay-helm-mirror https://aaronyang0628.github.io/helm-chart-mirror/charts
helm repo update

2.install chart

Details
helm install ay-helm-mirror/kube-prometheus-stack --generate-name
Using Mirror
helm repo add ay-helm-mirror https://aaronyang0628.github.io/helm-chart-mirror/charts \
  && helm install ay-helm-mirror/kube-prometheus-stack  --generate-name --version 1.17.2

for more information, you can check πŸ”—https://aaronyang0628.github.io/helm-chart-mirror/

Preliminary

1. Kubernetes is installed; if not, check πŸ”—link


2. ArgoCD is installed; if not, check πŸ”—link


3. Helm binary is installed; if not, check πŸ”—link


4. Ingress is installed on ArgoCD; if not, check πŸ”—link


1.prepare `chart-museum-credentials`

Details
kubectl get namespaces monitor > /dev/null 2>&1 || kubectl create namespace monitor
kubectl -n monitor create secret generic prometheus-stack-credentials \
  --from-literal=grafana-username=admin \
  --from-literal=grafana-password=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16)

2.prepare `prometheus-stack.yaml`

Details
kubectl -n argocd apply -f - << EOF
  apiVersion: argoproj.io/v1alpha1
  kind: Application
  metadata:
    name: prometheus-stack
  spec:
    syncPolicy:
      syncOptions:
        - CreateNamespace=true
        - ServerSideApply=true
    project: default
    source:
      repoURL: https://aaronyang0628.github.io/helm-chart-mirror/charts
      chart: kube-prometheus-stack
      targetRevision: 72.9.1
      helm:
        releaseName: prometheus-stack
        values: |
          crds:
            enabled: true
          global:
            rbac:
              create: true
            imageRegistry: ""
            imagePullSecrets: []
          alertmanager:
            enabled: true
            ingress:
              enabled: false
            serviceMonitor:
              selfMonitor: true
              interval: ""
            alertmanagerSpec:
              image:
                registry: m.daocloud.io/quay.io
                repository: prometheus/alertmanager
                tag: v0.28.1
              replicas: 1
              resources: {}
              storage:
                volumeClaimTemplate:
                  spec:
                    storageClassName: ""
                    accessModes: ["ReadWriteOnce"]
                    resources:
                      requests:
                        storage: 2Gi
          grafana:
            enabled: true
            ingress:
              enabled: true
              annotations:
                cert-manager.io/clusterissuer: self-signed-issuer
                kubernetes.io/ingress.class: nginx
              hosts:
                - grafana.dev.72602.online
              path: /
              pathtype: ImplementationSpecific
              tls:
              - secretName: grafana.dev.72602.online-tls
                hosts:
                - grafana.dev.72602.online
          prometheusOperator:
            admissionWebhooks:
              patch:
                resources: {}
                image:
                  registry: m.daocloud.io/registry.k8s.io
                  repository: ingress-nginx/kube-webhook-certgen
                  tag: v1.5.3  
            image:
              registry: m.daocloud.io/quay.io
              repository: prometheus-operator/prometheus-operator
            prometheusConfigReloader:
              image:
                registry: m.daocloud.io/quay.io
                repository: prometheus-operator/prometheus-config-reloader
              resources: {}
            thanosImage:
              registry: m.daocloud.io/quay.io
              repository: thanos/thanos
              tag: v0.38.0
          prometheus:
            enabled: true
            ingress:
              enabled: true
              annotations:
                cert-manager.io/clusterissuer: self-signed-issuer
                kubernetes.io/ingress.class: nginx
              hosts:
                - prometheus.dev.72602.online
              path: /
              pathtype: ImplementationSpecific
              tls:
              - secretName: prometheus.dev.72602.online-tls
                hosts:
                - prometheus.dev.72602.online
            prometheusSpec:
              image:
                registry: m.daocloud.io/quay.io
                repository: prometheus/prometheus
                tag: v3.4.0
              replicas: 1
              shards: 1
              resources: {}
              storageSpec: 
                volumeClaimTemplate:
                  spec:
                    storageClassName: ""
                    accessModes: ["ReadWriteOnce"]
                    resources:
                      requests:
                        storage: 2Gi
          thanosRuler:
            enabled: false
            ingress:
              enabled: false
            thanosRulerSpec:
              replicas: 1
              storage: {}
              resources: {}
              image:
                registry: m.daocloud.io/quay.io
                repository: thanos/thanos
                tag: v0.38.0
    destination:
      server: https://kubernetes.default.svc
      namespace: monitor
EOF

3.sync by argocd

Details
argocd app sync argocd/prometheus-stack

4.extract clickhouse admin credentials

Details
  kubectl -n monitor get secret prometheus-stack-credentials -o jsonpath='{.data.grafana-password}' | base64 -d

5.check the web browser

Details
  > add `$K8S_MASTER_IP grafana.dev.72602.online` to **/etc/hosts**

  > add `$K8S_MASTER_IP prometheus.dev.72602.online` to **/etc/hosts**
prometheus-server: https://prometheus.dev.72602.online:32443/


grafana-console: https://grafana.dev.72602.online:32443/


install based on docker

echo  "start from head is important"

FAQ

Q1: Show me almost endless possibilities

You can add standard markdown syntax:

  • multiple paragraphs
  • bullet point lists
  • emphasized, bold and even bold emphasized text
  • links
  • etc.
...and even source code

the possibilities are endless (almost - including other shortcodes may or may not work)

Q2: Show me almost endless possibilities

You can add standard markdown syntax:

  • multiple paragraphs
  • bullet point lists
  • emphasized, bold and even bold emphasized text
  • links
  • etc.
...and even source code

the possibilities are endless (almost - including other shortcodes may or may not work)

Jun 7, 2024

UptimeKuma

Web Page

uptime-kuma (https://uptime.72602.space)

Deployment

Depoly For
Details
kubectl get namespace monitor > /dev/null 2>&1 || kubectl create namespace monitor
kubectl -n monitor apply -f manifests/uptimekuma/
Notes: - Uptime Kuma is exposed only through k8s ingress (`uptime.72602.space`). - Do not bind ECS host ports 80/443 for local reverse proxies, they are reserved for forwarding to miniPC ingress. ### ZJLAB Tunnel Push Monitors ZJLAB's `primary` and `backup` tunnel listeners are loopback-only on the relay. Uptime Kuma cannot reach them directly from the Kubernetes Pod, so do not create TCP monitors that target those private listeners. Use one Push monitor per tunnel instead. Create these monitors in the Uptime Kuma UI: | Field | `ZJLAB primary` | `ZJLAB backup` | | --- | --- | --- | | Monitor type | `Push` | `Push` | | Heartbeat interval | Match the ECS check-only monitor interval | Match the ECS check-only monitor interval | | Monitor timeout | Longer than one normal check interval and its network timeout | Longer than one normal check interval and its network timeout | | Notifications | Use the existing notification policy | Use the existing notification policy | Save each monitor and keep its generated Push URL secret. Store the URLs only in the private SOPS inventory used by the ECS check-only monitor. The monitor must send `status=up` after a successful tunnel check and `status=down` with a fixed reason after a failed check. Do not put Push URLs in this repository, tunnel unit files, public pages, or ordinary logs. After the Push monitors are created: 1. Pause the old TCP monitors for the private ZJLAB listeners. They cannot reach relay loopback addresses from the Kuma Pod and will remain in timeout. 2. Add the two Push URLs to the ECS monitor's secret-backed configuration. 3. Send one controlled heartbeat for each label and confirm both monitors show `Up` with a recent heartbeat. 4. Confirm a failed check changes only the matching monitor to `Down`, then restore the heartbeat and confirm it returns to `Up`. The private inventory owns the exact check interval, Push URLs, monitor unit, and rollback procedure. The public runbook intentionally omits those values. ### ZJLAB Relay HTTP Monitors The two important ZJLAB `dev` relay Deployments are monitored through their public business paths. Do not target their ECS loopback listeners from Kuma; those listeners are intentionally private. Create these monitors in the Uptime Kuma UI and attach the existing notification policy: | Name | Type | URL | Accepted status code | |---|---|---|---| | `ZJLAB MaaS Relay` | HTTP(s) | `https://llm.72602.space/` | `404` | | `ZJLAB NewAPI Relay` | HTTP(s) | `https://newapi.zjlab.72602.space/v1/models` | `401` | Use a 60-second interval, 15-second timeout, and three retries. The NewAPI probe is deliberately unauthenticated, so `401` is the expected healthy response. Accept only the exact status listed for each monitor; `502`, timeout, TLS failure, or another status must remain a failure. The completed ECS integration maps listener `10023` to the ZJLAB `primary` check and listener `10024` to `backup`. These are independent of the 72602 public tunnel listeners `10021` and `10022`. The ECS checker sends `up` after a healthy check and `down` with a fixed reason after a failed check. Push request failures are best-effort and do not alter checker judgment, DingTalk debounce, or tunnel lifecycle. Existing query parameters are preserved without adding a second `?`. Verification recorded healthy dry-run and service results for both labels over more than two complete 60-second cycles. Monitoring rollback restores the root-only ECS backup and encrypted private inventory backup, then restarts only the ZJLAB healthcheck service.