Compare commits
1 Commits
fresh-star
...
57eb77917a
| Author | SHA1 | Date | |
|---|---|---|---|
| 57eb77917a |
@@ -20,7 +20,7 @@ steps:
|
|||||||
- export VAULT_TOKEN=$(cat /woodpecker/.vault_id)
|
- export VAULT_TOKEN=$(cat /woodpecker/.vault_id)
|
||||||
- bao write -format json -f /kubernetes/creds/flux-reconcile > /woodpecker/kube_credentials
|
- bao write -format json -f /kubernetes/creds/flux-reconcile > /woodpecker/kube_credentials
|
||||||
- name: Construct Kubeconfig
|
- name: Construct Kubeconfig
|
||||||
image: alpine/k8s:1.35.3
|
image: alpine/k8s:1.32.13
|
||||||
environment:
|
environment:
|
||||||
KUBECONFIG: /woodpecker/kubeconfig
|
KUBECONFIG: /woodpecker/kubeconfig
|
||||||
commands:
|
commands:
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
This repo contains configuration and documentation for my homelab setup, which is based on Talos OS for Kubernetes cluster and MikroTik router.
|
This repo contains configuration and documentation for my homelab setup, which is based on Talos OS for Kubernetes cluster and MikroTik router.
|
||||||
|
|
||||||
<img src="https://woodpecker.lumpiasty.xyz/api/badges/2/status.svg" alt="Pipeline status">
|
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
Physical setup consists of MikroTik router which connects to the internet and serves as a gateway for the cluster and other devices in the home network as shown in the diagram below.
|
Physical setup consists of MikroTik router which connects to the internet and serves as a gateway for the cluster and other devices in the home network as shown in the diagram below.
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ resources:
|
|||||||
- authentik
|
- authentik
|
||||||
- gitea
|
- gitea
|
||||||
- renovate
|
- renovate
|
||||||
|
- librechat
|
||||||
- frigate
|
- frigate
|
||||||
- llama
|
- llama
|
||||||
- immich
|
- immich
|
||||||
- nas
|
- nas
|
||||||
|
- searxng
|
||||||
- ispeak3
|
- ispeak3
|
||||||
- openwebui
|
- openwebui
|
||||||
- woodpecker
|
- woodpecker
|
||||||
|
|||||||
5
apps/librechat/kustomization.yaml
Normal file
5
apps/librechat/kustomization.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- release.yaml
|
||||||
5
apps/librechat/namespace.yaml
Normal file
5
apps/librechat/namespace.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: librechat
|
||||||
120
apps/librechat/release.yaml
Normal file
120
apps/librechat/release.yaml
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
---
|
||||||
|
apiVersion: source.toolkit.fluxcd.io/v1
|
||||||
|
kind: HelmRepository
|
||||||
|
metadata:
|
||||||
|
name: dynomite567-charts
|
||||||
|
namespace: librechat
|
||||||
|
spec:
|
||||||
|
interval: 24h
|
||||||
|
url: https://dynomite567.github.io/helm-charts/
|
||||||
|
---
|
||||||
|
# apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
# kind: HelmRelease
|
||||||
|
# metadata:
|
||||||
|
# name: librechat
|
||||||
|
# namespace: librechat
|
||||||
|
# spec:
|
||||||
|
# interval: 30m
|
||||||
|
# chart:
|
||||||
|
# spec:
|
||||||
|
# chart: librechat
|
||||||
|
# version: 1.9.1
|
||||||
|
# sourceRef:
|
||||||
|
# kind: HelmRepository
|
||||||
|
# name: dynomite567-charts
|
||||||
|
# values:
|
||||||
|
# global:
|
||||||
|
# librechat:
|
||||||
|
# existingSecretName: librechat
|
||||||
|
# librechat:
|
||||||
|
# configEnv:
|
||||||
|
# PLUGIN_MODELS: null
|
||||||
|
# ALLOW_REGISTRATION: "false"
|
||||||
|
# TRUST_PROXY: "1"
|
||||||
|
# DOMAIN_CLIENT: https://librechat.lumpiasty.xyz
|
||||||
|
# SEARCH: "true"
|
||||||
|
# existingSecretName: librechat
|
||||||
|
# configYamlContent: |
|
||||||
|
# version: 1.0.3
|
||||||
|
|
||||||
|
# endpoints:
|
||||||
|
# custom:
|
||||||
|
# - name: "Llama.cpp"
|
||||||
|
# apiKey: "llama"
|
||||||
|
# baseURL: "http://llama.llama.svc.cluster.local:11434/v1"
|
||||||
|
# models:
|
||||||
|
# default: [
|
||||||
|
# "DeepSeek-R1-0528-Qwen3-8B-GGUF",
|
||||||
|
# "Qwen3-8B-GGUF",
|
||||||
|
# "Qwen3-8B-GGUF-no-thinking",
|
||||||
|
# "gemma3n-e4b",
|
||||||
|
# "gemma3-12b",
|
||||||
|
# "gemma3-12b-q2",
|
||||||
|
# "gemma3-12b-novision",
|
||||||
|
# "gemma3-4b",
|
||||||
|
# "gemma3-4b-novision",
|
||||||
|
# "Qwen3-4B-Thinking-2507",
|
||||||
|
# "Qwen3-4B-Thinking-2507-long-ctx",
|
||||||
|
# "Qwen2.5-VL-7B-Instruct-GGUF",
|
||||||
|
# "Qwen2.5-VL-32B-Instruct-GGUF-IQ1_S",
|
||||||
|
# "Qwen2.5-VL-32B-Instruct-GGUF-Q2_K_L",
|
||||||
|
# "Qwen3-VL-2B-Instruct-GGUF",
|
||||||
|
# "Qwen3-VL-2B-Instruct-GGUF-unslothish",
|
||||||
|
# "Qwen3-VL-2B-Thinking-GGUF",
|
||||||
|
# "Qwen3-VL-4B-Instruct-GGUF",
|
||||||
|
# "Qwen3-VL-4B-Instruct-GGUF-unslothish",
|
||||||
|
# "Qwen3-VL-4B-Thinking-GGUF",
|
||||||
|
# "Qwen3-VL-8B-Instruct-GGUF",
|
||||||
|
# "Qwen3-VL-8B-Instruct-GGUF-unslothish",
|
||||||
|
# "Qwen3-VL-8B-Thinking-GGUF",
|
||||||
|
# "Huihui-Qwen3-VL-8B-Instruct-abliterated-GGUF",
|
||||||
|
# "Huihui-Qwen3-VL-8B-Thinking-abliterated-GGUF"
|
||||||
|
# ]
|
||||||
|
# titleConvo: true
|
||||||
|
# titleModel: "gemma3-4b-novision"
|
||||||
|
# summarize: false
|
||||||
|
# summaryModel: "gemma3-4b-novision"
|
||||||
|
# forcePrompt: false
|
||||||
|
# modelDisplayLabel: "Llama.cpp"
|
||||||
|
|
||||||
|
# # ✨ IMPORTANT: let llama-swap/llama-server own all these
|
||||||
|
# dropParams:
|
||||||
|
# - "temperature"
|
||||||
|
# - "top_p"
|
||||||
|
# - "top_k"
|
||||||
|
# - "presence_penalty"
|
||||||
|
# - "frequency_penalty"
|
||||||
|
# - "stop"
|
||||||
|
# - "max_tokens"
|
||||||
|
# imageVolume:
|
||||||
|
# enabled: true
|
||||||
|
# size: 10G
|
||||||
|
# accessModes: ReadWriteOnce
|
||||||
|
# storageClassName: mayastor-single-hdd
|
||||||
|
# ingress:
|
||||||
|
# enabled: true
|
||||||
|
# className: nginx-ingress
|
||||||
|
# annotations:
|
||||||
|
# cert-manager.io/cluster-issuer: letsencrypt
|
||||||
|
# nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
||||||
|
# nginx.ingress.kubernetes.io/proxy-buffering: "false"
|
||||||
|
# nginx.ingress.kubernetes.io/proxy-read-timeout: 30m
|
||||||
|
# hosts:
|
||||||
|
# - host: librechat.lumpiasty.xyz
|
||||||
|
# paths:
|
||||||
|
# - path: /
|
||||||
|
# pathType: ImplementationSpecific
|
||||||
|
# tls:
|
||||||
|
# - hosts:
|
||||||
|
# - librechat.lumpiasty.xyz
|
||||||
|
# secretName: librechat-ingress
|
||||||
|
|
||||||
|
# mongodb:
|
||||||
|
# persistence:
|
||||||
|
# storageClass: mayastor-single-hdd
|
||||||
|
|
||||||
|
# meilisearch:
|
||||||
|
# persistence:
|
||||||
|
# storageClass: mayastor-single-hdd
|
||||||
|
# auth:
|
||||||
|
# existingMasterKeySecret: librechat
|
||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: llama-swap
|
- name: llama-swap
|
||||||
image: ghcr.io/mostlygeek/llama-swap:v199-vulkan-b8660
|
image: ghcr.io/mostlygeek/llama-swap:v199-vulkan-b8637
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- /app/llama-swap
|
- /app/llama-swap
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ spec:
|
|||||||
- name: renovate
|
- name: renovate
|
||||||
# Update this to the latest available and then enable Renovate on
|
# Update this to the latest available and then enable Renovate on
|
||||||
# the manifest
|
# the manifest
|
||||||
image: renovate/renovate:43.95.0-full
|
image: renovate/renovate:43.104.3-full
|
||||||
envFrom:
|
envFrom:
|
||||||
- secretRef:
|
- secretRef:
|
||||||
name: renovate-gitea-token
|
name: renovate-gitea-token
|
||||||
|
|||||||
1
apps/searxng/configs/settings.yml
Normal file
1
apps/searxng/configs/settings.yml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
use_default_settings: true
|
||||||
42
apps/searxng/deployment.yaml
Normal file
42
apps/searxng/deployment.yaml
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: searxng
|
||||||
|
namespace: searxng
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: searxng
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: searxng
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: searxng
|
||||||
|
image: searxng/searxng:2025.8.12-6b1516d
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
env:
|
||||||
|
- name: SEARXNG_SECRET
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: searxng-secret
|
||||||
|
key: SEARXNG_SECRET
|
||||||
|
optional: false
|
||||||
|
volumeMounts:
|
||||||
|
- name: config-volume
|
||||||
|
mountPath: /etc/searxng/settings.yml
|
||||||
|
subPath: settings.yml
|
||||||
|
readOnly: true
|
||||||
|
- name: searxng-persistent-data
|
||||||
|
mountPath: /var/cache/searxng
|
||||||
|
volumes:
|
||||||
|
- name: config-volume
|
||||||
|
configMap:
|
||||||
|
name: searxng-config
|
||||||
|
- name: searxng-persistent-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: searxng-persistent-data-lvmhdd
|
||||||
25
apps/searxng/ingress.yaml
Normal file
25
apps/searxng/ingress.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
namespace: searxng
|
||||||
|
name: searxng
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx-ingress
|
||||||
|
rules:
|
||||||
|
- host: searxng.lumpiasty.xyz
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: searxng
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- searxng.lumpiasty.xyz
|
||||||
|
secretName: searxng-ingress
|
||||||
13
apps/searxng/kustomization.yaml
Normal file
13
apps/searxng/kustomization.yaml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- namespace.yaml
|
||||||
|
- pvc.yaml
|
||||||
|
- deployment.yaml
|
||||||
|
- service.yaml
|
||||||
|
- ingress.yaml
|
||||||
|
configMapGenerator:
|
||||||
|
- name: searxng-config
|
||||||
|
namespace: searxng
|
||||||
|
files:
|
||||||
|
- settings.yml=configs/settings.yml
|
||||||
5
apps/searxng/namespace.yaml
Normal file
5
apps/searxng/namespace.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: searxng
|
||||||
46
apps/searxng/pvc.yaml
Normal file
46
apps/searxng/pvc.yaml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
apiVersion: local.openebs.io/v1alpha1
|
||||||
|
kind: LVMVolume
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
kubernetes.io/nodename: anapistula-delrosalae
|
||||||
|
name: searxng-persistent-data-lvmhdd
|
||||||
|
namespace: openebs
|
||||||
|
spec:
|
||||||
|
capacity: 1Gi
|
||||||
|
ownerNodeID: anapistula-delrosalae
|
||||||
|
shared: "yes"
|
||||||
|
thinProvision: "no"
|
||||||
|
vgPattern: ^openebs-hdd$
|
||||||
|
volGroup: openebs-hdd
|
||||||
|
---
|
||||||
|
kind: PersistentVolume
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: searxng-persistent-data-lvmhdd
|
||||||
|
spec:
|
||||||
|
capacity:
|
||||||
|
storage: 1Gi
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
persistentVolumeReclaimPolicy: Retain
|
||||||
|
storageClassName: hdd-lvmpv
|
||||||
|
volumeMode: Filesystem
|
||||||
|
csi:
|
||||||
|
driver: local.csi.openebs.io
|
||||||
|
fsType: btrfs
|
||||||
|
volumeHandle: searxng-persistent-data-lvmhdd
|
||||||
|
---
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: searxng-persistent-data-lvmhdd
|
||||||
|
namespace: searxng
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
storageClassName: hdd-lvmpv
|
||||||
|
volumeName: searxng-persistent-data-lvmhdd
|
||||||
14
apps/searxng/service.yaml
Normal file
14
apps/searxng/service.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: searxng
|
||||||
|
namespace: searxng
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: searxng
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 8080
|
||||||
|
targetPort: 8080
|
||||||
|
type: ClusterIP
|
||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
chart:
|
chart:
|
||||||
spec:
|
spec:
|
||||||
chart: cert-manager-webhook-ovh
|
chart: cert-manager-webhook-ovh
|
||||||
version: 0.9.6
|
version: 0.9.5
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: cert-manager-webhook-ovh
|
name: cert-manager-webhook-ovh
|
||||||
|
|||||||
Reference in New Issue
Block a user