Files
2026-05-02 16:50:55 +00:00

200 lines
4.8 KiB
YAML

---
apiVersion: v1
kind: Namespace
metadata:
name: n8n
---
apiVersion: v1
kind: Secret
metadata:
name: n8n-secrets
namespace: n8n
type: Opaque
data:
# Base64 values from your previous manifest
N8N_ADMIN_USER: a2h3ZXpp
N8N_ADMIN_PASSWORD: cWVaVllWQ20wOEhaWmU=
POSTGRES_PASSWORD: RmJsV0xPTlM4alVjNUE=
N8N_ENCRYPTION_KEY: Tm90U2VjcmV0S2V5MTIzIQ==
N8N_TASKS_RUNNER_AUTH_TOKEN: bXktc2hhcmVkLXNlY3JldC10b2tlbi0xMjM=
---
apiVersion: v1
kind: ConfigMap
metadata:
name: n8n-config
namespace: n8n
data:
N8N_HOST: "n8n.khongisa.co.za"
N8N_PROTOCOL: "https"
NODE_ENV: "production"
WEBHOOK_URL: "https://n8n.khongisa.co.za/"
GENERIC_TIMEZONE: "Africa/Johannesburg"
DB_TYPE: "postgresdb"
DB_POSTGRESDB_HOST: "n8n-db-service"
DB_POSTGRESDB_PORT: "5432"
DB_POSTGRESDB_DATABASE: "n8n_db"
DB_POSTGRESDB_USER: "n8n_user"
N8N_PROXY_HOPS: "1"
# DEFINITIVE FIX: Force n8n to listen on all interfaces
N8N_LISTEN_ADDRESS: "0.0.0.0"
N8N_PORT: "5678"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: n8n-data-pvc
namespace: n8n
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: n8n-db-pvc
namespace: n8n
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
---
# Database Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n-db
namespace: n8n
spec:
replicas: 1
selector:
matchLabels:
app: n8n-db
template:
metadata:
labels:
app: n8n-db
spec:
containers:
- name: postgres
image: postgres:14-alpine
env:
- name: POSTGRES_USER
value: "n8n_user"
- name: POSTGRES_DB
value: "n8n_db"
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: n8n-secrets
key: POSTGRES_PASSWORD
ports:
- containerPort: 5432
volumeMounts:
- name: db-storage
mountPath: /var/lib/postgresql/data
volumes:
- name: db-storage
persistentVolumeClaim:
claimName: n8n-db-pvc
---
# Database Internal Service
apiVersion: v1
kind: Service
metadata:
name: n8n-db-service
namespace: n8n
spec:
ports:
- port: 5432
selector:
app: n8n-db
---
# n8n Application Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n
namespace: n8n
spec:
replicas: 1
selector:
matchLabels:
app: n8n-app # Standardized label selector
template:
metadata:
labels:
app: n8n-app # Matches selector and service
spec:
containers:
- name: n8n
image: docker.n8n.io/n8nio/n8n:latest
ports:
- containerPort: 5678
- containerPort: 5679 # Explicitly open the Task Broker port
envFrom:
- configMapRef:
name: n8n-config
env:
# DEFINITIVE FIX: Align communication between main process and Task Runner
- name: N8N_TASKS_RUNNER_BROKER_HOST
value: "127.0.0.1"
- name: N8N_TASKS_RUNNER_BROKER_PORT
value: "5679"
- name: N8N_TASKS_RUNNER_AUTH_TOKEN
valueFrom:
secretKeyRef:
name: n8n-secrets
key: N8N_TASKS_RUNNER_AUTH_TOKEN
# Database and Admin overrides
- name: DB_POSTGRESDB_PASSWORD
valueFrom:
secretKeyRef:
name: n8n-secrets
key: POSTGRES_PASSWORD
- name: N8N_ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: n8n-secrets
key: N8N_ENCRYPTION_KEY
- name: N8N_USER_MANAGEMENT_ADMIN_USER
valueFrom:
secretKeyRef:
name: n8n-secrets
key: N8N_ADMIN_USER
- name: N8N_USER_MANAGEMENT_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: n8n-secrets
key: N8N_ADMIN_PASSWORD
- name: N8N_SECURE_COOKIE
value: "false"
- name: N8N_COOKIES_SAME_SITE
value: "lax"
- name: N8N_PROXY_HOPS
value: "1"
volumeMounts:
- name: n8n-data
mountPath: /home/node/.n8n
volumes:
- name: n8n-data
persistentVolumeClaim:
claimName: n8n-data-pvc
---
# NodePort Service
apiVersion: v1
kind: Service
metadata:
name: n8n-service
namespace: n8n
spec:
type: NodePort
selector:
app: n8n-app # Correctly targets the refactored Deployment labels
ports:
- protocol: TCP
port: 5678
targetPort: 5678
nodePort: 30567