💻️ Homelab / Self-hosted apps

Wat ik voor mezelf heb gedocumenteerd:



2 likes

Je kan ook extra bescherming inbouwen in HA om een IP te bannen bij foutieve login of x-aantal foutieve pogingen. Alsook een melding te ontvangen bij zo’n event.

3 likes

Ik heb dit gewoon gedaan via hun eigen dienst van Nabucasa. Ben je zeker dat alles goed geconfigureerd is en blijft en ook dat het veilig is. En is ook ongeveer de enige bron van inkomsten van HA dus op zich vind ik dat ook nog een goeie manier van steunen ook…

5 likes

Is dat dan nog self-hosten? :slight_smile:

2 likes

Ik zie dat eerder als plan C. Wil het zelf proberen opzetten op een veilige manier. Zo leer je het meest :nerd_face:

2 likes

Haha fair enough. Ik heb me laten bang maken :yum:, dus voor de zekere oplossing gekozen. Vond het al een hele prestatie om de onboarding door te komen :grin:. Ondertussen wel al beetje meer zekerheid, maar die security durf ik nog niet aan…

1 like

@bartdeslagmulder @Robin

Intussen een GMKtec NucBox G3 Plus gekocht. Wel tevreden van op het eerste zicht. Meteen Ubuntu opgezet, Portainer en dan vervolgens N8N en mijn Openwebui van mijn DIgital Ocean Droplet gemigreerd naar mijn homeserver.

Ook een cloudflare tunnel opgezet zodat ik er aan kan van buitenaf. Verbazingwekkend hoe vlot dat allemaal ging.

1 like

Goed bezig!

1 like

Topper! Kan met een cloudflare tunnel niet iedereen van op afstand aan?

1 like

Blijkbaar kun je dit nog verder restricten op device, IP of zelfs mailadressen (die krijgen dan een Cloudflare login scherm te zien). Moet ik wel nog eens uitzoeken. :grin:

1 like

Ik raad je aan om een VPN tunnel te gebruiken zodat enkel jij er aan kan (bv Tailscale). Ik heb hier een paar posts terug een korte tutorial geplaatst :wink:

Ik gebruik nu al Tailscale, dus mss is het wel een idee om dat er ook achter te zetten. Ik bekijk het eens. :grin:

Enige nadeel daar aan is dat het effectief iets is wat je moet aan en uit zetten op je device (deed soms wat lastig met de vpn van het werk).

Merci voor de tutorial. Ik bekijk het allemaal nog eens.

Veel fun ahead dus! :star_struck:

2 likes

Moest je vast zitten, moet je maar even roepen :wink:

1 like

Heb intussen ook homepage.dev gebruikt als homepage. Tof om ook jouw voorbeeld te zien.

Heb je toevallig al eens gebruik gemaakt van de customapi widget? Krijg die precies niet werkende. Ik heb LiteLLM geinstalleerd in combo met Ollama, om zo snel AI modellen te installeren en te gebruiken, en had graag de API van LiteLLM aangesproken om een lijst van modellen en ID’s weer te geven op mijn homepage.

Maar ik krijg het niet werkende en er zijn ook absoluut geen logs die mij in een mogelijk juiste richting wijzen.

Alternatief is dat ik ofwel met die customjs begin te prutsen, of misschien met Cursor mijn eigen LiteLLM widget schrijf. :smiley:

neen, nog geen ervaring mee. Maar ik wil je wel proberen helpen?
Wat heb je momenteel voor elkaar gekregen (yml code)?

Dit is het stuk voor LiteLLM in mijn services.yaml file

    - LiteLLM:
        type: customapi
        url: http://litellm_ip_address/v1/models
        method: GET
        headers:
          Authorization: Bearer {{HOMEPAGE_VAR_LITELLM_TOKEN}}
          Content-Type: application/json
        mappings:
          items: data
          name: id
          label: id

Als ik die url call in een terminal met curl, dan krijg ik deze json:

{
   "data":[
      {
         "id":"gemini-2.0-flash",
         "object":"model",
         "created":1677610602,
         "owned_by":"openai"
      },
      {
         "id":"llama3.2:1b",
         "object":"model",
         "created":1677610602,
         "owned_by":"openai"
      }
   ],
   "object":"list"
}

Ik vermoed dat het mappings field nog niet helemaal juist is, maar ik krijg ook nergens in mijn browser console effectief een call te zien naar de url.

De HOMEPAGE_VAR_LITELLM_TOKEN is een environment variable die ik meegeef in mijn docker compose file.

Afgaande op de docs (Custom API - Homepage)

Denk ik dat je mapping niet correct is.

    - LiteLLM:
        type: customapi
        url: http://litellm_ip_address/v1/models
        method: GET
        headers:
          Authorization: Bearer {{HOMEPAGE_VAR_LITELLM_TOKEN}}
          Content-Type: application/json
        mappings:
          - field:
              data:
                0: id # gemini-2.0-flash
1 like

Merci voor je antwoord. Nu heb ik dit (moest ook nog de widget zelf in een widget tag wrappen):

    - LiteLLM:
        description: Installed LLM's
        widget:
          type: customapi
          url: http://litellm_ip_address/v1/models
          method: GET
          display: list
          headers:
            Authorization: Bearer {{HOMEPAGE_VAR_LITELLM_TOKEN}}
            Content-Type: application/json
          mappings:
            - field:
                data:
                  0: id

Maar nu heb ik natuurlijk enkel item 0:
image

En ik zie niet meteen hoe ik die kan laten itereren over de array, zonder dat te hardcoden :thinking:

Ik denk niet dat dit kan, tezij je echt een custom widget bouwt: Widget Tutorial - Homepage

edit:

wat gebeurt als als je dit probeert?

    - LiteLLM:
        description: Installed LLM's
        widget:
          type: customapi
          url: http://litellm_ip_address/v1/models
          method: GET
          display: list
          headers:
            Authorization: Bearer {{HOMEPAGE_VAR_LITELLM_TOKEN}}
            Content-Type: application/json
          mappings:
            - field:
                data

Had dat al eens geprobeerd, maar dat geeft een error terug. Waarschijnlijk is het idd niet ondersteunt. Heb een feature request aangemaakt:

Als het genoeg tractie haalt, kan ik mss kijken om het toe te voegen als feature in de customapi widget.