Linkding
Linkding is the bookmark application and the first workload exposed publicly through the Cloudflare Tunnel.
Current implementation
| Property | Value |
|---|---|
| Image | sissbruecker/linkding:1.45.0 |
| Namespace | linkding |
| Service | linkding-service:9090 |
| Local hostname | linkding.homelab.internal |
| Public hostname | linkding.hyperoot.dev |
| Replicas | 1 |
| Persistence | 10 GiB retained local volume |
The container runs as UID/GID 33, drops Linux capabilities, and mounts its
data at /etc/linkding/data. Its PVC requests the local-path StorageClass;
the provisioner creates a node-affine PV on the dedicated Talos XFS user volume
with a Retain reclaim policy.
Create the initial superuser
After the Linkding pod is running, create the first superuser interactively:
kubectl exec --interactive --tty \
--namespace linkding \
deployment/linkding-deployment \
-- python manage.py createsuperuser
Follow the prompts to enter the username, email address, and password, then sign in through the local or public Linkding URL. The account is written to the persistent Linkding database and survives pod restarts. Do not store the credentials in Git.
The command targets the Deployment instead of a generated pod name, so it keeps working after Kubernetes replaces or rolls out the pod.
Request paths
flowchart TB
Local[Local browser] --> Traefik[Traefik ingress]
Traefik --> Service[linkding-service:9090]
Public[Public browser] --> Cloudflare[Cloudflare edge]
Cloudflare --> Cloudflared[Cloudflared]
Cloudflared --> Service
Service --> Linkding[Linkding pod]
Repository locations
- Reusable workload:
gitops/apps/base/linkding - Lab storage and ingress:
gitops/apps/lab/linkding - Public tunnel route:
gitops/infrastructure/configs/lab/cloudflared/config.yaml - Activation:
gitops/apps/lab/kustomization.yaml
Dependencies
- Traefik and MetalLB provide local access.
- Cloudflared provides public access.
- Vault and External Secrets provide the tunnel credential to Cloudflared.
See Traffic flow for the complete request path.