Compare commits
10 Commits
57eb77917a
...
fresh-star
| Author | SHA1 | Date | |
|---|---|---|---|
| 1af29ef67c | |||
| 181e78df04 | |||
| 1503109d59 | |||
| e777e5a3db | |||
| fe0d090ebc | |||
| 9b8434dc8e | |||
| 600f9442d7 | |||
| e90a1807ea | |||
| 08a423d9b0 | |||
| 817cdd2ec7 |
@@ -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.32.13
|
image: alpine/k8s:1.35.3
|
||||||
environment:
|
environment:
|
||||||
KUBECONFIG: /woodpecker/kubeconfig
|
KUBECONFIG: /woodpecker/kubeconfig
|
||||||
commands:
|
commands:
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
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,12 +6,10 @@ resources:
|
|||||||
- authentik
|
- authentik
|
||||||
- gitea
|
- gitea
|
||||||
- renovate
|
- renovate
|
||||||
- librechat
|
|
||||||
- frigate
|
- frigate
|
||||||
- llama
|
- llama
|
||||||
- immich
|
- immich
|
||||||
- nas
|
- nas
|
||||||
- searxng
|
|
||||||
- ispeak3
|
- ispeak3
|
||||||
- openwebui
|
- openwebui
|
||||||
- woodpecker
|
- woodpecker
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
||||||
kind: Kustomization
|
|
||||||
resources:
|
|
||||||
- namespace.yaml
|
|
||||||
- release.yaml
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: librechat
|
|
||||||
@@ -1,120 +0,0 @@
|
|||||||
---
|
|
||||||
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-b8637
|
image: ghcr.io/mostlygeek/llama-swap:v199-vulkan-b8660
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- /app/llama-swap
|
- /app/llama-swap
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
use_default_settings: true
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
---
|
|
||||||
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
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
---
|
|
||||||
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
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: searxng
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
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
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
---
|
|
||||||
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.5
|
version: 0.9.6
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: cert-manager-webhook-ovh
|
name: cert-manager-webhook-ovh
|
||||||
|
|||||||
Reference in New Issue
Block a user