Skip to content

Instantly share code, notes, and snippets.

@integrii
Last active November 14, 2023 05:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save integrii/5eba55eb8db177fc92510e2bd0e44d8b to your computer and use it in GitHub Desktop.
Save integrii/5eba55eb8db177fc92510e2bd0e44d8b to your computer and use it in GitHub Desktop.
Kubernetes specs to bootstrap paperless-ngx including dependent services.
# Once you apply this and your containers come online, you need to exec into the web service and run `./manage.py createsuperuser`.
# Change the postgresql password in this spec.
# This spec assumes you want NodePort services and not LoadBalnancer services.
# This spec assumes that you want to mount all your volumes under a hostPath of /data/paperless.
# This spec assumes that you want all pods on a node called k8s-worker5.
apiVersion: v1
kind: Namespace
metadata:
name: paperless
---
apiVersion: v1
kind: Service
metadata:
name: broker
namespace: paperless
spec:
type: NodePort
selector:
app: broker
ports:
- name: redis
protocol: TCP
port: 6379
targetPort: 6379
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: broker
namespace: paperless
labels:
app: broker
spec:
replicas: 1
selector:
matchLabels:
app: broker
template:
metadata:
labels:
app: broker
spec:
nodeName: k8s-worker5
containers:
- name: redis
volumeMounts:
- name: redisdata
mountPath: /data
image: docker.io/library/redis:7
volumeMounts:
- name: redisdata
mountPath: /data
ports:
- name: redis
containerPort: 6379
volumes:
- name: redisdata
hostPath:
path: /data/paperless/redisdata
---
apiVersion: v1
kind: Service
metadata:
name: db
namespace: paperless
spec:
type: NodePort
selector:
app: db
ports:
- name: postgres
protocol: TCP
port: 5432
targetPort: 5432
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: db
namespace: paperless
labels:
app: db
spec:
replicas: 1
selector:
matchLabels:
app: db
template:
metadata:
labels:
app: db
spec:
nodeName: k8s-worker5
containers:
- name: postgres
volumeMounts:
- name: pgdata
mountPath: /var/lib/postgresql/data
image: docker.io/library/postgres:13
env:
- name: POSTGRES_DB
value: paperless
- name: POSTGRES_USER
value: paperless
- name: POSTGRES_PASSWORD
value: paperless
ports:
- name: postgres
containerPort: 5432
volumes:
- name: pgdata
hostPath:
path: /data/paperless/pgdata
---
apiVersion: v1
kind: Service
metadata:
name: webserver
namespace: paperless
spec:
type: NodePort
selector:
app: webserver
ports:
- name: http
protocol: TCP
port: 8000
targetPort: 8000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
namespace: paperless
labels:
app: webserver
spec:
replicas: 1
selector:
matchLabels:
app: webserver
template:
metadata:
labels:
app: webserver
spec:
nodeName: k8s-worker5
containers:
- name: paperless
volumeMounts:
- name: data
mountPath: /usr/src/paperless/data
- name: media
mountPath: /usr/src/paperless/media
- name: export
mountPath: /usr/src/paperless/export
- name: consume
mountPath: /usr/src/paperless/consume
image: ghcr.io/paperless-ngx/paperless-ngx:latest
env:
- name: PAPERLESS_REDIS
value: redis://broker:6379
- name: PAPERLESS_DBHOST
value: db
- name: PAPERLESS_TIKA_ENABLED
value: "1"
- name: PAPERLESS_TIKA_GOTENBERG_ENDPOINT
value: http://gotenberg:3000
- name: PAPERLESS_TIKA_ENDPOINT
value: http://tika:9998
volumeMounts:
- name: data
mountPath: /usr/src/paperless/data
- name: media
mountPath: /usr/src/paperless/media
- name: export
mountPath: /usr/src/paperless/export
- name: consume
mountPath: /usr/src/paperless/consume
ports:
- name: http
containerPort: 8000
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 10
failureThreshold: 3
volumes:
- name: data
hostPath:
path: /data/paperless/data
- name: media
hostPath:
path: /data/paperless/media
- name: export
hostPath:
path: /data/paperless/export
- name: consume
hostPath:
path: /data/paperless/consume
---
apiVersion: v1
kind: Service
metadata:
name: gotenberg
namespace: paperless
spec:
selector:
app: gotenberg
ports:
- name: http
port: 3000
targetPort: 3000
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gotenberg
namespace: paperless
spec:
replicas: 1
selector:
matchLabels:
app: gotenberg
template:
metadata:
labels:
app: gotenberg
spec:
nodeName: k8s-worker5
containers:
- name: gotenberg
image: docker.io/gotenberg/gotenberg:7.8
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/.*"
volumeMounts:
- name: data
mountPath: /data/paperless
volumes:
- name: data
hostPath:
path: /data/paperless
type: DirectoryOrCreate
---
apiVersion: v1
kind: Service
metadata:
name: tika
namespace: paperless
spec:
selector:
app: tika
ports:
- name: http
port: 9998
targetPort: 9998
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tika
namespace: paperless
spec:
replicas: 1
selector:
matchLabels:
app: tika
template:
metadata:
labels:
app: tika
spec:
nodeName: k8s-worker5
containers:
- name: tika
image: ghcr.io/paperless-ngx/tika:latest
volumeMounts:
- name: data
mountPath: /data/paperless
volumes:
- name: data
hostPath:
path: /data/paperless
type: DirectoryOrCreate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment