Django Helm Chart with Celery, Celery-Beat, Flower and Redis. The chart also includes deployments for Celery setup (Worker, Flower.
-
Deployment includes a multi container pod with Django and Caddy. Caddy is used as sidecar to serve the static files of backend. Caddyfile can be found here.
-
The chart includes Redis as an optional subchart.
-
The Deployment containers init containers for migrations and staticfiles.
This is my personal take on such a type of chart, thus I might not use the best practices or you might disagree with how I do things. Any and all feedback is greatly appreciated!
Set values for Django backend on Deployment Section of values.yaml
Example:
replicaCount: 1
revisionHistoryLimit: 2
image:
repository: ghcr.io/sanoguzhan/django-helm-test
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: "latest"
containerPort: 8081
command: 'gunicorn blog.wsgi -b 0.0.0.0:8081'
Note: Set the command as a string instead of a list.
Static files collect is done by initContainers.
- staticfiles: Add command for Django to collect static files.
collect_static:
enabled: false
name: staticfiles
command: "python3 manage.py collectstatic --noinput"
Static files and Media directories should be given under data:
data:
staticfiles: "app/staticfiles/"
data_media: "app/data_media/"
Paths should be relative to the working directory of main container. Static files are shared volume (emptyDir) between initContainer and Proxy container.
Migrations are done with a Job. ServiceAccount, configMap and secret values are loaded before application container starts. Job is deleted after completion.
db_migrations:
enabled: true
name: db-migration
command: "python3 manage.py migrate --noinput"
resources: {}
safeToEvict: true
ConfigMaps and Secret values should be set under:
# Env ConfigMap values
envConfigs: {}
# Enc Secret Values (Base64 encoded data)
envSecrets: {}
Celery setup includes worker, flower and beat. Celery Beat is optional, set enabled to false if you want to exclude it. Flower includes ingress setup optionally.
celery:
# Celery Beat Values
beat:
enabled: true
componentName: celery-beat
command: 'celery -A blog.celery beat -l DEBUG'
replicaCount: 1
strategy: Recreate
# Celery Worker Settings
worker:
componentName: celery-worker
command: 'celery -A blog.celery worker -l DEBUG'
replicaCount: 1
strategy: RollingUpdate
# Celery Flower Settings
flower:
componentName: celery-flower
command: 'celery -A blog.celery flower'
replicaCount: 1
strategy: RollingUpdate
service:
type: ClusterIP
port:
number: 5555
name: flower
ingress:
enabled: false
annotations: {}
hosts:
- host: example.com
paths:
- path: /
pathType: Prefix
tls: []
Redis is optional sub-chart, which could be disabled by setting enabled to false. Bitnami Redis Helm Chart is used, and version of the chart is given in the Chart.yaml file.
redis:
enabled: true
Build chart dependency includes
helm dependency build ./django
First, click the green Use this template
button near the top of this page.
This will take you to Github's 'Generate Repository' page.
Fill in a repository name and short description, and click 'Create repository from template'.
This will allow you to create a new repository in your Github account,
prepopulated with the contents of this project.
Now you can clone the project locally and get to work!
git clone https://github.com/<user>/<your_new_repo>.git