mirror of
https://github.com/lukaszraczylo/gohoarder.git
synced 2026-07-17 05:34:09 +00:00
fixup! feat: comprehensive audit + Tier 3 wiring (security/correctness/features)
This commit is contained in:
@@ -0,0 +1,129 @@
|
|||||||
|
# Example GoHoarder values for Traefik IngressRoute
|
||||||
|
#
|
||||||
|
# This configuration uses Traefik IngressRoute instead of standard Kubernetes Ingress
|
||||||
|
# to better handle scoped npm packages with encoded slashes.
|
||||||
|
#
|
||||||
|
# IMPORTANT: You must also configure your Traefik deployment to allow encoded slashes.
|
||||||
|
# See docs/TRAEFIK_ENCODED_SLASHES.md for Traefik configuration steps.
|
||||||
|
|
||||||
|
nameOverride: "gohoarder"
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
global:
|
||||||
|
domain: "i.raczylo.com"
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
replicaCount:
|
||||||
|
server: 1
|
||||||
|
frontend: 1
|
||||||
|
scanner: 1
|
||||||
|
|
||||||
|
image:
|
||||||
|
server:
|
||||||
|
repository: ghcr.io/lukaszraczylo/gohoarder-server
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
frontend:
|
||||||
|
repository: ghcr.io/lukaszraczylo/gohoarder-frontend
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
scanner:
|
||||||
|
repository: ghcr.io/lukaszraczylo/gohoarder-scanner
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
tag: "latest"
|
||||||
|
|
||||||
|
# Ingress configuration for Traefik
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: "traefik" # This triggers IngressRoute creation instead of Ingress
|
||||||
|
|
||||||
|
# Your GoHoarder hostname
|
||||||
|
host: "hoarder.i.raczylo.com"
|
||||||
|
|
||||||
|
# TLS configuration
|
||||||
|
tls:
|
||||||
|
enabled: true
|
||||||
|
secretName: "cert-i.raczylo.com"
|
||||||
|
|
||||||
|
# Traefik-specific settings
|
||||||
|
# These are used by the IngressRoute template
|
||||||
|
traefik:
|
||||||
|
# Reference middlewares from the traefik namespace
|
||||||
|
# These will be applied to all routes
|
||||||
|
middlewares:
|
||||||
|
- default-chain # Your existing middleware chain from traefik namespace
|
||||||
|
|
||||||
|
# ServersTransport configuration (optional)
|
||||||
|
transport:
|
||||||
|
serverName: ""
|
||||||
|
|
||||||
|
# Storage configuration
|
||||||
|
storage:
|
||||||
|
backend: "filesystem"
|
||||||
|
filesystem:
|
||||||
|
storageClass: "longhorn"
|
||||||
|
size: "100Gi"
|
||||||
|
accessMode: "ReadWriteOnce"
|
||||||
|
|
||||||
|
# Metadata storage
|
||||||
|
metadata:
|
||||||
|
backend: "sqlite"
|
||||||
|
sqlite:
|
||||||
|
persistence:
|
||||||
|
enabled: false # Using emptyDir for metadata
|
||||||
|
walMode: false
|
||||||
|
|
||||||
|
# Cache configuration
|
||||||
|
cache:
|
||||||
|
defaultTTL: "168h" # 7 days
|
||||||
|
maxSizeBytes: 536870912000 # 500GB
|
||||||
|
|
||||||
|
# Package handlers
|
||||||
|
handlers:
|
||||||
|
npm:
|
||||||
|
enabled: true
|
||||||
|
upstreamRegistry: "https://registry.npmjs.org"
|
||||||
|
pypi:
|
||||||
|
enabled: true
|
||||||
|
upstreamUrl: "https://pypi.org"
|
||||||
|
go:
|
||||||
|
enabled: true
|
||||||
|
upstreamProxy: "https://proxy.golang.org"
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
auth:
|
||||||
|
enabled: true
|
||||||
|
adminApiKey: "" # Will be auto-generated if empty
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
logging:
|
||||||
|
level: "info"
|
||||||
|
format: "json"
|
||||||
|
|
||||||
|
# Resource limits
|
||||||
|
server:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 2000m
|
||||||
|
memory: 2Gi
|
||||||
|
requests:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 512Mi
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 128Mi
|
||||||
|
|
||||||
|
scanner:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 2000m
|
||||||
|
memory: 4Gi
|
||||||
|
requests:
|
||||||
|
cpu: 500m
|
||||||
|
memory: 1Gi
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
{{- if and .Values.ingress.enabled (eq .Values.ingress.className "traefik") -}}
|
||||||
|
---
|
||||||
|
# Traefik IngressRoute for package registry paths
|
||||||
|
# This handles package downloads including scoped packages with encoded slashes
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRoute
|
||||||
|
metadata:
|
||||||
|
name: {{ include "gohoarder.fullname" . }}-packages
|
||||||
|
labels:
|
||||||
|
{{- include "gohoarder.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
routes:
|
||||||
|
# Package registry routes with high priority
|
||||||
|
# PathPrefix matching to avoid Go's encoded slash rejection in regex
|
||||||
|
- match: Host(`{{ .Values.ingress.host | default (printf "%s.%s" "gohoarder" .Values.global.domain) }}`) && PathPrefix(`/npm/`)
|
||||||
|
kind: Rule
|
||||||
|
priority: 100
|
||||||
|
services:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-frontend
|
||||||
|
port: {{ .Values.frontend.service.port }}
|
||||||
|
middlewares:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-strip-encoded-slash
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.ingress.traefik }}
|
||||||
|
{{- if .Values.ingress.traefik.middlewares }}
|
||||||
|
{{- range .Values.ingress.traefik.middlewares }}
|
||||||
|
- name: {{ . }}
|
||||||
|
namespace: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
- match: Host(`{{ .Values.ingress.host | default (printf "%s.%s" "gohoarder" .Values.global.domain) }}`) && PathPrefix(`/pypi/`)
|
||||||
|
kind: Rule
|
||||||
|
priority: 100
|
||||||
|
services:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-frontend
|
||||||
|
port: {{ .Values.frontend.service.port }}
|
||||||
|
middlewares:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-strip-encoded-slash
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.ingress.traefik }}
|
||||||
|
{{- if .Values.ingress.traefik.middlewares }}
|
||||||
|
{{- range .Values.ingress.traefik.middlewares }}
|
||||||
|
- name: {{ . }}
|
||||||
|
namespace: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
- match: Host(`{{ .Values.ingress.host | default (printf "%s.%s" "gohoarder" .Values.global.domain) }}`) && PathPrefix(`/go/`)
|
||||||
|
kind: Rule
|
||||||
|
priority: 100
|
||||||
|
services:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-frontend
|
||||||
|
port: {{ .Values.frontend.service.port }}
|
||||||
|
middlewares:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-strip-encoded-slash
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
{{- if .Values.ingress.traefik }}
|
||||||
|
{{- if .Values.ingress.traefik.middlewares }}
|
||||||
|
{{- range .Values.ingress.traefik.middlewares }}
|
||||||
|
- name: {{ . }}
|
||||||
|
namespace: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
# All other routes (frontend, API, etc.) with lower priority
|
||||||
|
- match: Host(`{{ .Values.ingress.host | default (printf "%s.%s" "gohoarder" .Values.global.domain) }}`)
|
||||||
|
kind: Rule
|
||||||
|
priority: 50
|
||||||
|
services:
|
||||||
|
- name: {{ include "gohoarder.fullname" . }}-frontend
|
||||||
|
port: {{ .Values.frontend.service.port }}
|
||||||
|
{{- if .Values.ingress.traefik }}
|
||||||
|
{{- if .Values.ingress.traefik.middlewares }}
|
||||||
|
middlewares:
|
||||||
|
{{- range .Values.ingress.traefik.middlewares }}
|
||||||
|
- name: {{ . }}
|
||||||
|
namespace: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.ingress.tls.enabled }}
|
||||||
|
tls:
|
||||||
|
secretName: {{ .Values.ingress.tls.secretName }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
---
|
||||||
|
# Middleware to handle encoded slashes in package paths
|
||||||
|
# Note: This middleware attempts to work around Traefik's encoded slash limitation
|
||||||
|
# but may not fully resolve the issue due to Go stdlib constraints
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: {{ include "gohoarder.fullname" . }}-strip-encoded-slash
|
||||||
|
labels:
|
||||||
|
{{- include "gohoarder.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
# Use headers to pass original path information
|
||||||
|
# The backend can reconstruct the original URL from these headers
|
||||||
|
headers:
|
||||||
|
customRequestHeaders:
|
||||||
|
X-Original-URI: "{{ .Request.URL.Path }}"
|
||||||
|
X-Forwarded-Path: "{{ .Request.URL.Path }}"
|
||||||
|
|
||||||
|
---
|
||||||
|
# ServersTransport configuration for backend communication
|
||||||
|
# This ensures the backend connection doesn't have additional restrictions
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: ServersTransport
|
||||||
|
metadata:
|
||||||
|
name: {{ include "gohoarder.fullname" . }}-transport
|
||||||
|
labels:
|
||||||
|
{{- include "gohoarder.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
insecureSkipVerify: false
|
||||||
|
{{- if .Values.ingress.traefik }}
|
||||||
|
{{- if .Values.ingress.traefik.transport }}
|
||||||
|
{{- with .Values.ingress.traefik.transport }}
|
||||||
|
serverName: {{ .serverName | default "" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
@@ -514,6 +514,16 @@ ingress:
|
|||||||
enabled: false
|
enabled: false
|
||||||
secretName: "gohoarder-tls"
|
secretName: "gohoarder-tls"
|
||||||
|
|
||||||
|
# Traefik-specific configuration (when className: "traefik")
|
||||||
|
# Used by IngressRoute template for advanced routing
|
||||||
|
traefik:
|
||||||
|
# Middleware references (from traefik namespace)
|
||||||
|
# Example: ["default-chain", "rate-limit"]
|
||||||
|
middlewares: []
|
||||||
|
# ServersTransport configuration
|
||||||
|
transport:
|
||||||
|
serverName: ""
|
||||||
|
|
||||||
# Autoscaling configuration
|
# Autoscaling configuration
|
||||||
autoscaling:
|
autoscaling:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|||||||
Reference in New Issue
Block a user