diff --git a/app/backend/Dockerfile b/app/backend/Dockerfile index 06146efe6..624965081 100644 --- a/app/backend/Dockerfile +++ b/app/backend/Dockerfile @@ -19,13 +19,18 @@ RUN python3 -m pip install -r requirements.txt RUN mkdir -p /app/backend/staticfiles && \ chmod -R 777 /app/backend/staticfiles -CMD sh -c "python3 manage.py migrate --noinput && \ - ./load_fixtures.sh all && \ - python3 manage.py createinitialrevisions && \ - python3 manage.py collectstatic --noinput && \ - # python3 manage.py export --cleanup=1 --upload=1 && \ +CMD sh -c "python3 manage.py collectstatic --noinput && \ python3 manage.py runserver 0.0.0.0:8000" +# Ask Micheal about this in prod + + +# CMD sh -c "python3 manage.py migrate --noinput && \ +# ./load_fixtures.sh all && \ +# python3 manage.py createinitialrevisions && \ +# python3 manage.py collectstatic --noinput && \ +# python3 manage.py runserver 0.0.0.0:8000" + EXPOSE 8000 USER 1001 \ No newline at end of file diff --git a/app/tileserve/Dockerfile b/app/tileserve/Dockerfile new file mode 100644 index 000000000..b1bf05f5d --- /dev/null +++ b/app/tileserve/Dockerfile @@ -0,0 +1 @@ +FROM pramsey/pg_tileserv:20231005 diff --git a/docker-compose.yml b/docker-compose.yml index 494ad609d..4ab3fe4c3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -95,7 +95,10 @@ services: depends_on: - db platform: linux/x86_64 - image: pramsey/pg_tileserv:20231005 + # image: pramsey/pg_tileserv:20231005 + build: + context: ./app/tileserve + dockerfile: Dockerfile env_file: - path: ./.env.test required: false diff --git a/openshift/backendDeployConfigProd.yaml b/openshift/backendDeployConfigProd.yaml new file mode 100644 index 000000000..82ab0ff38 --- /dev/null +++ b/openshift/backendDeployConfigProd.yaml @@ -0,0 +1,339 @@ +kind: DeploymentConfig +apiVersion: apps.openshift.io/v1 +metadata: + namespace: 26e83e-prod + labels: + app: gwells-backend + app-name: gwells + appver: gwells-backend + env-name: production +spec: + strategy: + type: Recreate + recreateParams: + timeoutSeconds: 600 + rollingParams: + updatePeriodSeconds: 1 + intervalSeconds: 1 + timeoutSeconds: 900 + maxUnavailable: 25% + maxSurge: 25% + resources: {} + activeDeadlineSeconds: 21600 + triggers: + - type: ImageChange + imageChangeParams: + automatic: true + containerNames: + - gwells-backend + from: + kind: ImageStreamTag + namespace: 26e83e-tools + name: 'gwells-backend:prod' + lastTriggeredImage: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:6e1853fe359c87484077bbdd572bb5fb607a654ab12e42c4d78e5a87db32b2c5' + - type: ConfigChange + replicas: 1 + revisionHistoryLimit: 10 + test: false + selector: + name: gwells-backend + template: + metadata: + name: gwells-backend + creationTimestamp: null + labels: + appver: gwells-backend + name: gwells-backend + spec: + containers: + - resources: + limits: + cpu: '1' + memory: 1Gi + requests: + cpu: '1' + memory: 1Gi + readinessProbe: + exec: + command: + - pwd + initialDelaySeconds: 5 + timeoutSeconds: 2 + periodSeconds: 5 + successThreshold: 1 + failureThreshold: 10 + terminationMessagePath: /dev/termination-log + name: gwells-backend + livenessProbe: + exec: + command: + - pwd + initialDelaySeconds: 60 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + env: + - name: DATABASE_SERVICE_NAME + value: gwells-pg12-production + - name: DATABASE_NAME + valueFrom: + secretKeyRef: + name: gwells-pg12-production + key: database-name + - name: DATABASE_USER + valueFrom: + secretKeyRef: + name: gwells-pg12-production + key: database-user + - name: DATABASE_PASSWORD + valueFrom: + secretKeyRef: + name: gwells-pg12-production + key: database-password + - name: DATABASE_SCHEMA + value: public + - name: APP_MODULE + value: 'wsgi:application' + - name: APP_HOME + value: backend + - name: APP_CONFIG + value: /opt/app-root/src/backend/gunicorn.ocp4.cfg + - name: DJANGO_SECRET_KEY + valueFrom: + secretKeyRef: + name: gwells-django-production + key: secret_key + - name: DJANGO_ADMIN_URL + valueFrom: + secretKeyRef: + name: gwells-django-production + key: admin_url + - name: DJANGO_ADMIN_USER + valueFrom: + secretKeyRef: + name: gwells-django-production + key: admin_user + - name: DJANGO_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: gwells-django-production + key: admin_password + - name: E_LICENSING_AUTH_PASSWORD + valueFrom: + secretKeyRef: + name: gwells-e-licensing-production + key: E_LICENSING_AUTH_PASSWORD + - name: E_LICENSING_AUTH_USERNAME + valueFrom: + secretKeyRef: + name: gwells-e-licensing-production + key: E_LICENSING_AUTH_USERNAME + - name: E_LICENSING_URL + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: E_LICENSING_URL + - name: DJANGO_DEBUG + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: DJANGO_DEBUG + - name: CUSTOM_GDAL_GEOS + value: 'false' + - name: S3_AQUIFER_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_AQUIFER_BUCKET + - name: S3_REGISTRANT_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_REGISTRANT_BUCKET + - name: S3_PRIVATE_ROOT_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_PRIVATE_ROOT_BUCKET + - name: S3_PRIVATE_AQUIFER_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_PRIVATE_AQUIFER_BUCKET + - name: S3_PRIVATE_REGISTRANT_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_PRIVATE_REGISTRANT_BUCKET + - name: S3_PRIVATE_WELL_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_PRIVATE_WELL_BUCKET + - name: SSO_CLIENT + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_CLIENT + - name: SSO_PUBKEY + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_PUBKEY + - name: SSO_AUTH_HOST + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_AUTH_HOST + - name: SSO_AUDIENCE + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_AUDIENCE + - name: SSO_REALM + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_REALM + - name: SSO_PORT + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_PORT + - name: SSO_TEST_CLIENT + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_TEST_CLIENT + - name: SSO_TEST_AUDIENCE + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_TEST_AUDIENCE + - name: ENABLE_ADDITIONAL_DOCUMENTS + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: ENABLE_ADDITIONAL_DOCUMENTS + - name: ENABLE_AQUIFERS_SEARCH + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: ENABLE_AQUIFERS_SEARCH + - name: APP_CONTEXT_ROOT + value: gwells + - name: SESSION_COOKIE_SECURE + value: 'True' + - name: CSRF_COOKIE_SECURE + value: 'True' + - name: DB_REPLICATE + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: DB_REPLICATE + - name: MINIO_ACCESS_KEY + valueFrom: + secretKeyRef: + name: minio-access-parameters-production + key: MINIO_ACCESS_KEY + - name: MINIO_SECRET_KEY + valueFrom: + secretKeyRef: + name: minio-access-parameters-production + key: MINIO_SECRET_KEY + - name: S3_PUBLIC_ACCESS_KEY + valueFrom: + secretKeyRef: + name: minio-access-parameters-production + key: S3_PUBLIC_ACCESS_KEY + - name: S3_PUBLIC_SECRET_KEY + valueFrom: + secretKeyRef: + name: minio-access-parameters-production + key: S3_PUBLIC_SECRET_KEY + - name: S3_HOST + valueFrom: + secretKeyRef: + name: minio-access-parameters-production + key: S3_HOST + - name: S3_ROOT_BUCKET + valueFrom: + secretKeyRef: + name: minio-access-parameters-production + key: S3_ROOT_BUCKET + - name: S3_PRIVATE_HOST + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_PRIVATE_HOST + - name: S3_WELL_EXPORT_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_WELL_EXPORT_BUCKET + - name: S3_PRIVATE_BUCKET + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: S3_PRIVATE_BUCKET + - name: SSO_IDP_HINT + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: SSO_IDP_HINT + - name: WEB_CONCURRENCY + value: '4' + - name: GUNICORN_WORKERS + value: '4' + - name: ENFORCE_ENV_VARIABLES + value: 'False' + - name: EMAIL_NOTIFICATION_RECIPIENT + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: EMAIL_NOTIFICATION_RECIPIENT + - name: GEOCODER_ADDRESS_API_BASE + valueFrom: + configMapKeyRef: + name: gwells-global-config-production + key: GEOCODER_ADDRESS_API_BASE + ports: + - containerPort: 8000 + protocol: TCP + imagePullPolicy: Always + terminationMessagePolicy: File + image: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:6e1853fe359c87484077bbdd572bb5fb607a654ab12e42c4d78e5a87db32b2c5' + restartPolicy: Always + terminationGracePeriodSeconds: 30 + dnsPolicy: ClusterFirst + securityContext: {} + schedulerName: default-scheduler +status: + observedGeneration: 13 + details: + message: image change + causes: + - type: ImageChange + imageTrigger: + from: + kind: DockerImage + name: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:6e1853fe359c87484077bbdd572bb5fb607a654ab12e42c4d78e5a87db32b2c5' + availableReplicas: 1 + unavailableReplicas: 0 + latestVersion: 9 + updatedReplicas: 1 + conditions: + - type: Progressing + status: 'True' + lastUpdateTime: '2025-04-17T21:38:46Z' + lastTransitionTime: '2025-04-17T21:38:34Z' + reason: NewReplicationControllerAvailable + message: replication controller "gwells-backend-9" successfully rolled out + - type: Available + status: 'True' + lastUpdateTime: '2025-04-22T23:16:27Z' + lastTransitionTime: '2025-04-22T23:16:27Z' + message: Deployment config has minimum availability. + replicas: 1 + readyReplicas: 1 diff --git a/openshift/backendDeployConfigTest.yaml b/openshift/backendDeployConfigTest.yaml index bf522a06e..03ff29f16 100644 --- a/openshift/backendDeployConfigTest.yaml +++ b/openshift/backendDeployConfigTest.yaml @@ -2,7 +2,6 @@ kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: gwells-backend - generation: 19 namespace: 26e83e-test labels: app: gwells-backend @@ -31,8 +30,8 @@ spec: from: kind: ImageStreamTag namespace: 26e83e-tools - name: 'gwells-backend:latest' - lastTriggeredImage: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:229c9d78fccff9bf8373e285b4a4a949f2fd4d37675dedd507fbb0753fab54b1' + name: 'gwells-backend:test' + lastTriggeredImage: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:6e1853fe359c87484077bbdd572bb5fb607a654ab12e42c4d78e5a87db32b2c5' - type: ConfigChange replicas: 1 revisionHistoryLimit: 10 @@ -305,14 +304,14 @@ spec: protocol: TCP imagePullPolicy: Always terminationMessagePolicy: File - image: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:229c9d78fccff9bf8373e285b4a4a949f2fd4d37675dedd507fbb0753fab54b1' + image: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:6e1853fe359c87484077bbdd572bb5fb607a654ab12e42c4d78e5a87db32b2c5' restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst securityContext: {} schedulerName: default-scheduler status: - observedGeneration: 19 + observedGeneration: 13 details: message: image change causes: @@ -320,22 +319,22 @@ status: imageTrigger: from: kind: DockerImage - name: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:229c9d78fccff9bf8373e285b4a4a949f2fd4d37675dedd507fbb0753fab54b1' + name: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-backend@sha256:6e1853fe359c87484077bbdd572bb5fb607a654ab12e42c4d78e5a87db32b2c5' availableReplicas: 1 unavailableReplicas: 0 - latestVersion: 7 + latestVersion: 9 updatedReplicas: 1 conditions: - - type: Available - status: 'True' - lastUpdateTime: '2025-04-10T22:39:29Z' - lastTransitionTime: '2025-04-10T22:39:29Z' - message: Deployment config has minimum availability. - type: Progressing status: 'True' - lastUpdateTime: '2025-04-10T22:39:31Z' - lastTransitionTime: '2025-04-10T22:39:08Z' + lastUpdateTime: '2025-04-17T21:38:46Z' + lastTransitionTime: '2025-04-17T21:38:34Z' reason: NewReplicationControllerAvailable - message: replication controller "gwells-backend-7" successfully rolled out + message: replication controller "gwells-backend-9" successfully rolled out + - type: Available + status: 'True' + lastUpdateTime: '2025-04-22T23:16:27Z' + lastTransitionTime: '2025-04-22T23:16:27Z' + message: Deployment config has minimum availability. replicas: 1 readyReplicas: 1 diff --git a/openshift/frontendDeployConfigProd.yaml b/openshift/frontendDeployConfigProd.yaml new file mode 100644 index 000000000..573426ca8 --- /dev/null +++ b/openshift/frontendDeployConfigProd.yaml @@ -0,0 +1,96 @@ +kind: DeploymentConfig +apiVersion: apps.openshift.io/v1 +metadata: + name: gwells-frontend + namespace: 26e83e-prod + labels: + app: gwells-frontend + app-name: gwells + appver: gwells-frontend + env-name: production +spec: + strategy: + type: Recreate + recreateParams: + timeoutSeconds: 600 + resources: {} + activeDeadlineSeconds: 21600 + triggers: + - type: ImageChange + imageChangeParams: + automatic: true + containerNames: + - gwells-frontend + from: + kind: ImageStreamTag + namespace: 26e83e-tools + name: 'gwells-application:prod' + lastTriggeredImage: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:6f0e2320c237e434ac7d4e36be0ae261ac6036d92fe307ac352976220b36b834' + - type: ConfigChange + replicas: 1 + revisionHistoryLimit: 10 + test: false + selector: + app: gwells-frontend + template: + metadata: + creationTimestamp: null + labels: + app: gwells-frontend + spec: + containers: + - name: gwells-frontend + image: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:6f0e2320c237e434ac7d4e36be0ae261ac6036d92fe307ac352976220b36b834' + ports: + - containerPort: 8080 + protocol: TCP + env: + - name: VITE_AXIOS_BASE_URL + value: 'https://gwells-backend-26e83e-test.apps.silver.devops.gov.bc.ca' + - name: BACKEND_URL + value: 'https://gwells-backend-26e83e-test.apps.silver.devops.gov.bc.ca' + - name: VITE_BACKEND_URL + value: 'https://gwells-backend-26e83e-test.apps.silver.devops.gov.bc.ca' + resources: + limits: + cpu: 50m + memory: 256Mi + requests: + cpu: 10m + memory: 128Mi + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: Always + restartPolicy: Always + terminationGracePeriodSeconds: 30 + dnsPolicy: ClusterFirst + securityContext: {} + schedulerName: default-scheduler +status: + observedGeneration: 9 + details: + message: image change + causes: + - type: ImageChange + imageTrigger: + from: + kind: DockerImage + name: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:6f0e2320c237e434ac7d4e36be0ae261ac6036d92fe307ac352976220b36b834' + availableReplicas: 1 + unavailableReplicas: 0 + latestVersion: 8 + updatedReplicas: 1 + conditions: + - type: Available + status: 'True' + lastUpdateTime: '2025-04-17T21:07:54Z' + lastTransitionTime: '2025-04-17T21:07:54Z' + message: Deployment config has minimum availability. + - type: Progressing + status: 'True' + lastUpdateTime: '2025-04-17T21:07:55Z' + lastTransitionTime: '2025-04-17T21:07:49Z' + reason: NewReplicationControllerAvailable + message: replication controller "gwells-frontend-8" successfully rolled out + replicas: 1 + readyReplicas: 1 diff --git a/openshift/frontendDeployConfigTest.yaml b/openshift/frontendDeployConfigTest.yaml index 788318baa..d4ae45f75 100644 --- a/openshift/frontendDeployConfigTest.yaml +++ b/openshift/frontendDeployConfigTest.yaml @@ -2,7 +2,6 @@ kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: gwells-frontend - generation: 5 namespace: 26e83e-test labels: app: gwells-frontend @@ -25,8 +24,8 @@ spec: from: kind: ImageStreamTag namespace: 26e83e-tools - name: 'gwells-application:latest' - lastTriggeredImage: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:eebf7876ed63cd28d2ffc54b7805f0a6e60135153bebd282657fd123d91ef421' + name: 'gwells-application:test' + lastTriggeredImage: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:6f0e2320c237e434ac7d4e36be0ae261ac6036d92fe307ac352976220b36b834' - type: ConfigChange replicas: 1 revisionHistoryLimit: 10 @@ -41,17 +40,17 @@ spec: spec: containers: - name: gwells-frontend - image: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:eebf7876ed63cd28d2ffc54b7805f0a6e60135153bebd282657fd123d91ef421' + image: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:6f0e2320c237e434ac7d4e36be0ae261ac6036d92fe307ac352976220b36b834' ports: - containerPort: 8080 protocol: TCP env: - name: VITE_AXIOS_BASE_URL - value: 'https://gwells-backend-26e83e-dev.apps.silver.devops.gov.bc.ca' + value: 'https://gwells-backend-26e83e-test.apps.silver.devops.gov.bc.ca' - name: BACKEND_URL - value: 'https://gwells-backend-26e83e-dev.apps.silver.devops.gov.bc.ca' + value: 'https://gwells-backend-26e83e-test.apps.silver.devops.gov.bc.ca' - name: VITE_BACKEND_URL - value: 'https://gwells-backend-26e83e-dev.apps.silver.devops.gov.bc.ca' + value: 'https://gwells-backend-26e83e-test.apps.silver.devops.gov.bc.ca' resources: limits: cpu: 50m @@ -68,26 +67,30 @@ spec: securityContext: {} schedulerName: default-scheduler status: - observedGeneration: 5 + observedGeneration: 9 details: - message: config change + message: image change causes: - - type: ConfigChange + - type: ImageChange + imageTrigger: + from: + kind: DockerImage + name: 'image-registry.openshift-image-registry.svc:5000/26e83e-tools/gwells-application@sha256:6f0e2320c237e434ac7d4e36be0ae261ac6036d92fe307ac352976220b36b834' availableReplicas: 1 unavailableReplicas: 0 - latestVersion: 4 + latestVersion: 8 updatedReplicas: 1 conditions: - type: Available status: 'True' - lastUpdateTime: '2025-04-09T22:17:58Z' - lastTransitionTime: '2025-04-09T22:17:58Z' + lastUpdateTime: '2025-04-17T21:07:54Z' + lastTransitionTime: '2025-04-17T21:07:54Z' message: Deployment config has minimum availability. - type: Progressing status: 'True' - lastUpdateTime: '2025-04-09T22:18:00Z' - lastTransitionTime: '2025-04-09T22:17:52Z' + lastUpdateTime: '2025-04-17T21:07:55Z' + lastTransitionTime: '2025-04-17T21:07:49Z' reason: NewReplicationControllerAvailable - message: replication controller "gwells-frontend-4" successfully rolled out + message: replication controller "gwells-frontend-8" successfully rolled out replicas: 1 readyReplicas: 1