From 219f18503e9a60784017768f6c9109e68ceeb74f Mon Sep 17 00:00:00 2001 From: wslulciuc Date: Tue, 14 May 2024 10:54:59 -0700 Subject: [PATCH 1/3] Add cors support for docker compose Signed-off-by: wslulciuc --- docker-compose.yml | 15 +++++++++++++++ docker/nginx/entrypoint.sh | 12 ++++++++++++ docker/nginx/nginx.template | 33 +++++++++++++++++++++++++++++++++ docker/volumes.sh | 10 +++++++++- 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100755 docker/nginx/entrypoint.sh create mode 100644 docker/nginx/nginx.template diff --git a/docker-compose.yml b/docker-compose.yml index bf275001be..7b8cc29c72 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,19 @@ version: "3.7" services: + nginx: + image: nginx:latest + container_name: nginx + ports: + - "80:80" + volumes: + - nginx-conf:/etc/nginx + environment: + - MARQUEZ_HOST=api + - MARQUEZ_PORT=${API_PORT} + depends_on: + - api + entrypoint: ["./etc/nginx/entrypoint.sh"] + api: image: "marquezproject/marquez:${TAG}" container_name: marquez-api @@ -37,6 +51,7 @@ services: # command: ["postgres", "-c", "log_statement=all"] volumes: + nginx-conf: data: db-conf: db-init: diff --git a/docker/nginx/entrypoint.sh b/docker/nginx/entrypoint.sh new file mode 100755 index 0000000000..89dcabd9e5 --- /dev/null +++ b/docker/nginx/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# +# Copyright 2018-2024 contributors to the Marquez project +# SPDX-License-Identifier: Apache-2.0 +# +# Usage: $ ./entrypoint.sh + +# Replace environment variables in the Nginx template +envsubst '$MARQUEZ_HOST,$MARQUEZ_PORT' < /etc/nginx/nginx.template > /etc/nginx/nginx.conf + +# Start Nginx +nginx -g 'daemon off;' diff --git a/docker/nginx/nginx.template b/docker/nginx/nginx.template new file mode 100644 index 0000000000..eb15f41368 --- /dev/null +++ b/docker/nginx/nginx.template @@ -0,0 +1,33 @@ +events {} + +http { + server { + listen 80; + + location / { + proxy_pass http://${MARQUEZ_HOST}:${MARQUEZ_PORT}; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Allow access from any origin: + add_header 'Access-Control-Allow-Origin' '*'; + # Or, configure access to a specific origin: + # Access-Control-Allow-Origin: https://example.com + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT'; + add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; + + # Handle preflight requests + if ($request_method = OPTIONS ) { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT'; + add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain charset=UTF-8'; + add_header 'Content-Length' 0; + return 204; + } + } + } +} diff --git a/docker/volumes.sh b/docker/volumes.sh index 7eb8662d73..a8ecfae349 100755 --- a/docker/volumes.sh +++ b/docker/volumes.sh @@ -37,14 +37,16 @@ if [[ -z "${volume_prefix}" ]]; then fi # Volumes with prefix +nginx_conf_volume="${volume_prefix}_nginx-conf" data_volume="${volume_prefix}_data" db_conf_volume="${volume_prefix}_db-conf" db_init_volume="${volume_prefix}_db-init" db_backup_volume="${volume_prefix}_db-backup" -echo "...creating volumes: ${data_volume}, ${db_conf_volume}, ${db_init_volume}, ${db_backup_volume}" +echo "...creating volumes: ${nginx_conf_volume}, ${data_volume}, ${db_conf_volume}, ${db_init_volume}, ${db_backup_volume}" # Create persistent volumes for Marquez +docker volume create "${nginx_conf_volume}" > /dev/null docker volume create "${data_volume}" > /dev/null docker volume create "${db_conf_volume}" > /dev/null docker volume create "${db_init_volume}" > /dev/null @@ -52,11 +54,17 @@ docker volume create "${db_backup_volume}" > /dev/null # Provision persistent volumes for Marquez docker create --name volumes-provisioner \ + -v "${nginx_conf_volume}:/nginx-conf" \ -v "${data_volume}:/data" \ -v "${db_conf_volume}:/db-conf" \ -v "${db_init_volume}:/db-init" \ busybox > /dev/null 2>&1 +# Add startup configuration for nginx +docker cp ./docker/nginx/entrypoint.sh volumes-provisioner:/nginx-conf/ +docker cp ./docker/nginx/nginx.template volumes-provisioner:/nginx-conf/ +echo "Added files to volume ${nginx_conf_volume}: $(ls "${nginx_conf_volume}")" + # Add startup configuration for Marquez docker cp ./docker/wait-for-it.sh volumes-provisioner:/data/wait-for-it.sh echo "Added files to volume ${data_volume}: $(ls "${data_volume}")" From 6dfdaca6d80477ef94825542178f4a9c79fd8fbd Mon Sep 17 00:00:00 2001 From: wslulciuc Date: Tue, 14 May 2024 11:24:29 -0700 Subject: [PATCH 2/3] continued: Add cors support for docker compose Signed-off-by: wslulciuc --- docker/nginx/nginx.template | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/docker/nginx/nginx.template b/docker/nginx/nginx.template index eb15f41368..541adcd548 100644 --- a/docker/nginx/nginx.template +++ b/docker/nginx/nginx.template @@ -13,21 +13,10 @@ http { # Allow access from any origin: add_header 'Access-Control-Allow-Origin' '*'; - # Or, configure access to a specific origin: - # Access-Control-Allow-Origin: https://example.com + # Or, configure access from a specific origin: + # add_header 'Access-Control-Allow-Origin' 'https://example.com'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT'; add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; - - # Handle preflight requests - if ($request_method = OPTIONS ) { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT'; - add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain charset=UTF-8'; - add_header 'Content-Length' 0; - return 204; - } } } } From d0e7c4d124b09a93eacdb5c56b2db15a724bfb03 Mon Sep 17 00:00:00 2001 From: wslulciuc Date: Tue, 14 May 2024 11:26:34 -0700 Subject: [PATCH 3/3] continued: Add cors support for docker compose Signed-off-by: wslulciuc --- docker/nginx/entrypoint.sh | 1 - docker/nginx/nginx.template | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/nginx/entrypoint.sh b/docker/nginx/entrypoint.sh index 89dcabd9e5..037e3c16d7 100755 --- a/docker/nginx/entrypoint.sh +++ b/docker/nginx/entrypoint.sh @@ -5,7 +5,6 @@ # # Usage: $ ./entrypoint.sh -# Replace environment variables in the Nginx template envsubst '$MARQUEZ_HOST,$MARQUEZ_PORT' < /etc/nginx/nginx.template > /etc/nginx/nginx.conf # Start Nginx diff --git a/docker/nginx/nginx.template b/docker/nginx/nginx.template index 541adcd548..be55868c73 100644 --- a/docker/nginx/nginx.template +++ b/docker/nginx/nginx.template @@ -15,7 +15,7 @@ http { add_header 'Access-Control-Allow-Origin' '*'; # Or, configure access from a specific origin: # add_header 'Access-Control-Allow-Origin' 'https://example.com'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, DELETE, PUT'; add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization'; } }