From b43927c3848a9ecd0ac1e7d1ae39645c634025ee Mon Sep 17 00:00:00 2001 From: ducoterra Date: Wed, 24 Mar 2021 09:15:29 -0600 Subject: [PATCH] Perfect the entrypoint Previously unexplored entrypoint technology has been explored. Now we can run commands after the entrypoint completes with the magical "$@" variable. --- Dockerfile | 13 ++++--- k8s/configmap.yaml | 6 ---- k8s/deploy.yaml | 37 -------------------- k8s/prod/ingress.yaml | 79 ------------------------------------------- k8s/pvc.yaml | 11 ------ k8s/service.yaml | 10 ------ k8s/test/ingress.yaml | 39 --------------------- scripts/cmd.sh | 3 ++ scripts/entrypoint.sh | 22 ++++++++++++ 9 files changed, 34 insertions(+), 186 deletions(-) delete mode 100644 k8s/configmap.yaml delete mode 100644 k8s/deploy.yaml delete mode 100644 k8s/prod/ingress.yaml delete mode 100644 k8s/pvc.yaml delete mode 100644 k8s/service.yaml delete mode 100644 k8s/test/ingress.yaml create mode 100644 scripts/cmd.sh create mode 100755 scripts/entrypoint.sh diff --git a/Dockerfile b/Dockerfile index a6271f3..50cdcde 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,6 @@ -FROM python:3.8.2 +FROM python:3 + +USER root WORKDIR /app COPY config config @@ -8,10 +10,13 @@ COPY manage.py manage.py COPY requirements.txt requirements.txt RUN pip install -r requirements.txt +COPY scripts scripts +RUN chmod +x scripts/* +ENTRYPOINT ["scripts/entrypoint.sh"] + RUN useradd -ms /bin/bash django RUN chown -R django . - USER django -RUN python manage.py collectstatic +RUN python manage.py collectstatic --no-input -CMD ["gunicorn","-b",":8000", "-w", "4", "config.wsgi"] \ No newline at end of file +CMD ["scripts/cmd.sh"] diff --git a/k8s/configmap.yaml b/k8s/configmap.yaml deleted file mode 100644 index 1c5e6f1..0000000 --- a/k8s/configmap.yaml +++ /dev/null @@ -1,6 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: $DEPLOY -data: - ALLOWED_HOSTS: localhost,$DEPLOY.ducoterra.net \ No newline at end of file diff --git a/k8s/deploy.yaml b/k8s/deploy.yaml deleted file mode 100644 index cc42c32..0000000 --- a/k8s/deploy.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: $DEPLOY -spec: - selector: - matchLabels: - app: $DEPLOY - template: - metadata: - labels: - app: $DEPLOY - spec: - containers: - - name: $DEPLOY - image: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG - envFrom: - - configMapRef: - name: $DEPLOY - - secretRef: - name: django-secrets - volumeMounts: - - mountPath: /app/db - name: $DEPLOY - resources: - limits: - memory: "256Mi" - cpu: "250m" - requests: - memory: "1Mi" - cpu: "1m" - ports: - - containerPort: 8000 - volumes: - - name: $DEPLOY - persistentVolumeClaim: - claimName: $DEPLOY \ No newline at end of file diff --git a/k8s/prod/ingress.yaml b/k8s/prod/ingress.yaml deleted file mode 100644 index 297b392..0000000 --- a/k8s/prod/ingress.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: $DEPLOY-internal-tls - annotations: - kubernetes.io/ingress.class: traefik-internal -spec: - entryPoints: - - websecure - tls: - certResolver: myresolver - domains: - - main: "*.ducoterra.net" - routes: - - match: Host(`$DEPLOY.ducoterra.net`) - kind: Rule - services: - - name: $DEPLOY - port: 8000 - ---- - -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: $DEPLOY-internal-web - annotations: - kubernetes.io/ingress.class: traefik-internal -spec: - entryPoints: - - web - routes: - - match: Host(`$DEPLOY.ducoterra.net`) - kind: Rule - services: - - name: $DEPLOY - port: 8000 - middlewares: - - name: httpsredirect - ---- - -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: $DEPLOY-external-tls - annotations: - kubernetes.io/ingress.class: traefik-external -spec: - entryPoints: - - websecure - tls: - certResolver: myresolver - routes: - - match: Host(`$DEPLOY.ducoterra.net`) - kind: Rule - services: - - name: $DEPLOY - port: 8000 - ---- - -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: $DEPLOY-external-web - annotations: - kubernetes.io/ingress.class: traefik-external -spec: - entryPoints: - - web - routes: - - match: Host(`$DEPLOY.ducoterra.net`) - kind: Rule - services: - - name: $DEPLOY - port: 8000 - middlewares: - - name: httpsredirect \ No newline at end of file diff --git a/k8s/pvc.yaml b/k8s/pvc.yaml deleted file mode 100644 index 22fe2d8..0000000 --- a/k8s/pvc.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: $DEPLOY -spec: - storageClassName: nfs-encrypted - accessModes: - - ReadWriteMany - resources: - requests: - storage: 8Gi \ No newline at end of file diff --git a/k8s/service.yaml b/k8s/service.yaml deleted file mode 100644 index 4ec6c23..0000000 --- a/k8s/service.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: $DEPLOY -spec: - selector: - app: $DEPLOY - ports: - - port: 8000 - targetPort: 8000 \ No newline at end of file diff --git a/k8s/test/ingress.yaml b/k8s/test/ingress.yaml deleted file mode 100644 index 0def66c..0000000 --- a/k8s/test/ingress.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: $DEPLOY-internal-tls - annotations: - kubernetes.io/ingress.class: traefik-internal -spec: - entryPoints: - - websecure - tls: - certResolver: myresolver - domains: - - main: "*.ducoterra.net" - routes: - - match: Host(`$DEPLOY.ducoterra.net`) - kind: Rule - services: - - name: $DEPLOY - port: 8000 - ---- - -apiVersion: traefik.containo.us/v1alpha1 -kind: IngressRoute -metadata: - name: $DEPLOY-internal-web - annotations: - kubernetes.io/ingress.class: traefik-internal -spec: - entryPoints: - - web - routes: - - match: Host(`$DEPLOY.ducoterra.net`) - kind: Rule - services: - - name: $DEPLOY - port: 8000 - middlewares: - - name: httpsredirect \ No newline at end of file diff --git a/scripts/cmd.sh b/scripts/cmd.sh new file mode 100644 index 0000000..538a75a --- /dev/null +++ b/scripts/cmd.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +gunicorn -b :8000 -w 4 config.wsgi diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh new file mode 100755 index 0000000..9706e70 --- /dev/null +++ b/scripts/entrypoint.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if ! $SKIP_ENTRYPOINT || [ -z $SKIP_ENTRYPOINT ]; then + +MIGRATED=false + +while ! $MIGRATED; do +echo "Migrating..." +python manage.py migrate 2> /dev/null + +if [ $? -eq 0 ]; then +MIGRATED=true +else +echo "ERROR - $(date) - Migrate failed." +sleep 1 +fi + +done + +fi + +$@