Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: automate ballerine deployment #2871

Open
wants to merge 6 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 146 additions & 31 deletions ballerine_install.sh
Original file line number Diff line number Diff line change
@@ -1,55 +1,170 @@
#!/usr/bin/env bash
#!/bin/bash

set -e

# Example Usage:
# ./ballerine_install.sh <VITE_API_URL_DOMAIN_NAME>

echo "Running as: $(id)"
# Function to display help message
show_help() {
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -h, --help Display this help message."
echo " -d, --domain vite_domain Vite Domain URL."
echo " -v, --verbose Enable verbose output."
echo ""
echo "Examples:"
echo " $0 --domain example.com"
echo " $0 -v"
}


check_http_https() {
local input=$1
echo "checking domain if suitable $input"
if [[ $input == *http://* && $input != *https://* ]]; then
echo "The string contains 'http' but not 'https'."
elif [[ $input == *https://* && $input != *http://* ]]; then
echo "The string contains 'https' but not 'http'."
elif [[ $input == *http://* && $input == *https://* ]]; then
echo "The string contains both 'http' and 'https'."
exit 1;
else
echo "The string contains neither 'http' nor 'https'."
exit 1;
fi
}

Comment on lines +21 to +35
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Eliminate code duplication in HTTP/HTTPS validation

The HTTP/HTTPS validation logic is duplicated between check_http_https and deploy_ballerine functions. This violates the DRY principle and makes maintenance harder.

Refactor to reuse the validation logic:

 check_http_https() {
     local input=$1
     echo "checking domain if suitable $input"
+    local protocol=""
     if [[ $input == *http://* && $input != *https://* ]]; then
         echo "The string contains 'http' but not 'https'."
+        protocol="http"
     elif [[ $input == *https://* && $input != *http://* ]]; then
         echo "The string contains 'https' but not 'http'."
+        protocol="https"
     elif [[ $input == *http://* && $input == *https://* ]]; then
         echo "The string contains both 'http' and 'https'."
         exit 1;
     else
         echo "The string contains neither 'http' nor 'https'."
         exit 1;
     fi
+    echo "$protocol"
 }

 deploy_ballerine() {
     local input=$1
-    echo "checking domain if suitable $input"
-    if [[ $input == *http://* && $input != *https://* ]]; then
+    local protocol
+    protocol=$(check_http_https "$input")
+    if [[ "$protocol" == "http" ]]; then
       if [[ "$OSTYPE" == "darwin"* ]]; then
         cd deploy; sudo docker-compose -f docker-compose-build.yml up -d
       else
          cd deploy; sudo docker compose -f docker-compose-build.yml up -d
       fi
-    elif [[ $input == *https://* && $input != *http://* ]]; then
+    elif [[ "$protocol" == "https" ]]; then
        if [[ "$OSTYPE" == "darwin"* ]]; then
         cd deploy; sudo docker-compose -f docker-compose-build-https.yml up -d
        else
         cd deploy; sudo docker compose -f docker-compose-build-https.yml up -d
        fi
-    elif [[ $input == *http://* && $input == *https://* ]]; then
-        echo "The string contains both 'http' and 'https'."
-        exit 1;
     else
-        echo "The string contains neither 'http' nor 'https'."
         cd deploy; sudo docker-compose -f docker-compose-build.yml up -d
     fi
 }

Also applies to: 37-59


# Check if no arguments are provided
if [ $# -eq 0 ]; then
echo "No arguments provided. Defaulting everything to localhost."
fi


install_docker_ubuntu(){
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
}

install_docker_macos(){
echo "Install docker using the following docs"
echo "https://docs.docker.com/desktop/setup/install/mac-install/"
}

check_os() {
# Get the operating system name
uname_out="$(uname -s)"

case "${uname_out}" in
Linux*)
# Check if the Linux distro is Ubuntu
if [ -f /etc/os-release ]; then
. /etc/os-release
if [[ $ID == "ubuntu" ]]; then
echo "The host is running Ubuntu."
install_docker_ubuntu
else
echo "The host is running a Linux distribution but not Ubuntu."
echo "We do not support this Linux distribution"
fi
else
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Script does not exit on unsupported Linux distributions.

After detecting an unsupported Linux distribution, the script continues execution. This may lead to errors later on. It's essential to exit the script when the OS is unsupported.

Apply this diff to exit the script for unsupported Linux distributions:

 echo "We do not support this Linux distribution"
+exit 1
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
echo "The host is running a Linux distribution but not Ubuntu."
echo "We do not support this Linux distribution"
fi
echo "The host is running a Linux distribution but not Ubuntu."
echo "We do not support this Linux distribution"
exit 1
fi

echo "The host is running Linux but /etc/os-release is not available."
fi
;;
Darwin*)
echo "The host is running macOS."
install_docker_macos
;;
*)
echo "The operating system is not recognized."
;;
esac
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Script continues after failing to recognize the operating system.

When the operating system is not recognized, the script should exit to prevent unintended behavior.

Apply this diff to exit the script when the OS is unrecognized:

 echo "The operating system is not recognized."
+exit 1
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
echo "The operating system is not recognized."
;;
esac
echo "The operating system is not recognized."
exit 1
;;
esac


WORKFLOW_SERVICE_DOMAIN_NAME=$1

function update_frontend_build_variables() {
update_frontend_build_variables() {
VITE_DOMAIN_NAME="$1"
## Get frontend application env files
echo "Updating frontend Build Variables"
echo "Updating vite domain with $VITE_DOMAIN_NAME"
env_files=$(find ./apps -name "*.env.example")
echo $env_files
for i in $env_files;
do
echo "Updating env variables of $i"
sed -i "s/localhost/${WORKFLOW_SERVICE_DOMAIN_NAME}/g" $i
sed -i '' "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
done

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Incompatible sed -i usage across different operating systems.

The sed -i '' command is specific to macOS. On Linux systems like Ubuntu, the syntax should be sed -i without the empty quotes. This difference can cause the script to fail on Ubuntu.

Apply this diff to make sed command compatible across macOS and Linux:

 for i in $env_files;
     do
         echo "Updating env variables of $i"
-        sed -i '' "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
+        if [[ "$OSTYPE" == "darwin"* ]]; then
+            sed -i '' "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
+        else
+            sed -i "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
+        fi
     done
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
sed -i '' "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
done
for i in $env_files;
do
echo "Updating env variables of $i"
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
else
sed -i "s|http://localhost:3000|$VITE_DOMAIN_NAME|g" $i
fi
done

}

function update_env_docker_compose(){
## update env variables for docker-compose yaml

update_docker_compose(){
read -p "Enter the backoffice domain: " BACKOFFICE_DOMAIN
check_http_https $BACKOFFICE_DOMAIN
read -p "Enter the workflow dashboard domain: " WORKFLOW_DASHBOARD_DOMAIN
check_http_https $WORKFLOW_DASHBOARD_DOMAIN
read -p "Enter the kyb domain: " KYB_DOMAIN
check_http_https $KYB_DOMAIN
echo "Updating docker-compose env variables"
env_files=$(find ./deploy -name "*.env")
env_files=$(find ./deploy -name "docker-compose-build.yml")
for i in $env_files;
do
echo "Updating env variables of $i"
sed -i "s/DOMAIN_NAME=\"\"/DOMAIN_NAME=\"${WORKFLOW_SERVICE_DOMAIN_NAME}\"/g" $i;
done
}

function install_docker(){
sudo apt update;
sudo apt install -y docker.io
mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.3.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
sudo mv ~/.docker/cli-plugins/docker-compose /usr/bin/docker-compose
}
echo "Updating env variables for KYB in $i"
sed -i '' "s|http://localhost:5201|$KYB_DOMAIN|g" $i

echo "Updating env variables for Workflow Dashboard in $i"
sed -i '' "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i

install_docker
echo "Updating env variables for Backoffice in $i"
sed -i '' "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
done
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

sed -i command may fail due to platform differences.

The use of sed -i '' in updating Docker Compose files is platform-specific to macOS. This will cause errors on Linux systems. Adjust the script to handle both macOS and Linux.

Apply this diff to update the sed commands:

 for i in $env_files;
     do
         echo "Updating env variables for KYB in $i"
-        sed -i '' "s|http://localhost:5201|$KYB_DOMAIN|g" $i
+        if [[ "$OSTYPE" == "darwin"* ]]; then
+            sed -i '' "s|http://localhost:5201|$KYB_DOMAIN|g" $i
+        else
+            sed -i "s|http://localhost:5201|$KYB_DOMAIN|g" $i
+        fi

         echo "Updating env variables for Workflow Dashboard in $i"
-        sed -i '' "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i
+        if [[ "$OSTYPE" == "darwin"* ]]; then
+            sed -i '' "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i
+        else
+            sed -i "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i
+        fi

         echo "Updating env variables for Backoffice in $i"
-        sed -i '' "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
+        if [[ "$OSTYPE" == "darwin"* ]]; then
+            sed -i '' "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
+        else
+            sed -i "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
+        fi
     done
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
echo "Updating env variables for KYB in $i"
sed -i '' "s|http://localhost:5201|$KYB_DOMAIN|g" $i
echo "Updating env variables for Workflow Dashboard in $i"
sed -i '' "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i
install_docker
echo "Updating env variables for Backoffice in $i"
sed -i '' "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
echo "Updating env variables for KYB in $i"
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s|http://localhost:5201|$KYB_DOMAIN|g" $i
else
sed -i "s|http://localhost:5201|$KYB_DOMAIN|g" $i
fi
echo "Updating env variables for Workflow Dashboard in $i"
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i
else
sed -i "s|http://localhost:5200|$WORKFLOW_DASHBOARD_DOMAIN|g" $i
fi
echo "Updating env variables for Backoffice in $i"
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
else
sed -i "s|http://localhost:5137|$BACKOFFICE_DOMAIN|g" $i
fi

}

if [[ ! -z "${WORKFLOW_SERVICE_DOMAIN_NAME}" ]]; then
### Update frontend build variables only if domain_name is given
update_frontend_build_variables
update_env_docker_compose
fi
# Parse arguments
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
show_help
exit 0
;;
-d|--domain)
if [ -n "$2" ]; then
VITE_DOMAIN_NAME="$2"
echo "VITE DOMAIN: $VITE_DOMAIN_NAME"
check_http_https $VITE_DOMAIN_NAME
update_frontend_build_variables $VITE_DOMAIN_NAME
update_docker_compose
shift 2
else
echo "Error: --domain requires a domain name."
exit 1
fi
;;
-v|--verbose)
VERBOSE=true
echo "Verbose mode enabled."
shift
;;
*)
echo "Unknown option: $1"
echo "Use -h or --help for usage information."
exit 1
;;
esac
done

## Bring docker-container up
cd deploy; sudo docker-compose -f docker-compose-build.yml up -d
check_os
# ## Bring docker-container up
# cd deploy; sudo docker-compose -f docker-compose-build.yml up -d
13 changes: 8 additions & 5 deletions deploy/docker-compose-build-https.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ services:
- ballerine-workflow-service
restart: on-failure
environment:
VITE_API_URL: 'http://${DOMAIN_NAME:-localhost:3000}/api/v1/'
VITE_API_URL: 'http://localhost:3000/api/v1/'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Avoid hardcoding localhost URLs in Docker configurations

Hardcoding localhost:3000 reduces deployment flexibility. Consider keeping the parameterized version using environment variables to support different deployment environments.

-      VITE_API_URL: 'http://localhost:3000/api/v1/'
+      VITE_API_URL: 'http://${DOMAIN_NAME:-localhost:3000}/api/v1/'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
VITE_API_URL: 'http://localhost:3000/api/v1/'
VITE_API_URL: 'http://${DOMAIN_NAME:-localhost:3000}/api/v1/'

VITE_KYB_DEFINITION_ID: 'kyb_parent_kyc_session_example'
ballerine-workflow-service:
container_name: workflow-service
platform: linux/amd64
image: ghcr.io/ballerine-io/workflows-service:latest
build:
context: ../services/workflows-service/
command:
- /bin/sh
- -c
Expand All @@ -49,10 +50,10 @@ services:
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
SESSION_SECRET: ${SESSION_SECRET}
BACKOFFICE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${BACKOFFICE_PORT}
WORKFLOW_DASHBOARD_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${WORKFLOW_DASHBOARD_PORT}
BACKOFFICE_CORS_ORIGIN: http://localhost:5137
WORKFLOW_DASHBOARD_CORS_ORIGIN: http://localhost:5200
PORT: ${WORKFLOW_SVC_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${KYB_APP_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://localhost:5201
Comment on lines +53 to +56
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Revise CORS configuration for security and flexibility

  1. Hardcoding CORS origins to localhost limits deployment flexibility
  2. Consider security implications of CORS configuration in production
-      BACKOFFICE_CORS_ORIGIN: http://localhost:5137
-      WORKFLOW_DASHBOARD_CORS_ORIGIN: http://localhost:5200
-      KYB_EXAMPLE_CORS_ORIGIN: http://localhost:5201
+      BACKOFFICE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${BACKOFFICE_PORT:-5137}
+      WORKFLOW_DASHBOARD_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${WORKFLOW_DASHBOARD_PORT:-5200}
+      KYB_EXAMPLE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${KYB_APP_PORT:-5201}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
BACKOFFICE_CORS_ORIGIN: http://localhost:5137
WORKFLOW_DASHBOARD_CORS_ORIGIN: http://localhost:5200
PORT: ${WORKFLOW_SVC_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${KYB_APP_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://localhost:5201
BACKOFFICE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${BACKOFFICE_PORT:-5137}
WORKFLOW_DASHBOARD_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${WORKFLOW_DASHBOARD_PORT:-5200}
PORT: ${WORKFLOW_SVC_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${KYB_APP_PORT:-5201}

APP_API_URL: https://alon.ballerine.dev
EMAIL_API_TOKEN: ''
EMAIL_API_URL: https://api.sendgrid.com/v3/mail/send
Expand Down Expand Up @@ -97,6 +98,7 @@ services:
timeout: 45s
interval: 10s
retries: 10
restart: on-failure
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix duplicate restart policy in caddy service

The caddy service has conflicting restart policies:

  1. restart: unless-stopped (line 103)
  2. restart: on-failure (line 114)

Remove the duplicate restart policy and decide on a single strategy:

  caddy:
    image: caddy:latest
    restart: unless-stopped
    container_name: caddy
    ports:
      - 80:80
      - 443:443
    volumes:
      - "../deploy/caddy/Caddyfile:/etc/caddy/Caddyfile"
      - "../deploy/./caddy/site:/srv"
      - "../deploy/caddy/caddy_data:/data"
      - "../deploy/caddy/caddy_config:/config"
-    restart: on-failure

Also applies to: 114-114

caddy:
image: caddy:latest
restart: unless-stopped
Expand All @@ -109,5 +111,6 @@ services:
- "../deploy/./caddy/site:/srv"
- "../deploy/caddy/caddy_data:/data"
- "../deploy/caddy/caddy_config:/config"
restart: on-failure
volumes:
postgres15: ~
9 changes: 5 additions & 4 deletions deploy/docker-compose-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ services:
- ballerine-workflow-service
restart: on-failure
environment:
VITE_API_URL: 'http://${DOMAIN_NAME:-localhost:3000}/api/v1/'
VITE_API_URL: 'http://localhost:3000/api/v1/'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Hardcoding VITE_API_URL to localhost may limit flexibility.

Setting VITE_API_URL to 'http://localhost:3000/api/v1/' restricts the application to only work with a local API server. In production environments, the API might be hosted on a different domain. Consider making this URL configurable.

Apply this diff to restore configurability:

 VITE_API_URL: 'http://localhost:3000/api/v1/'
+# Consider using an environment variable or a Docker argument to set VITE_API_URL dynamically.

Committable suggestion skipped: line range outside the PR's diff.

VITE_KYB_DEFINITION_ID: 'kyb_parent_kyc_session_example'
ballerine-workflow-service:
container_name: workflow-service
Expand All @@ -50,10 +50,10 @@ services:
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
SESSION_SECRET: ${SESSION_SECRET}
BACKOFFICE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${BACKOFFICE_PORT}
WORKFLOW_DASHBOARD_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${WORKFLOW_DASHBOARD_PORT}
BACKOFFICE_CORS_ORIGIN: http://localhost:5137
WORKFLOW_DASHBOARD_CORS_ORIGIN: http://localhost:5200
PORT: ${WORKFLOW_SVC_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://${DOMAIN_NAME:-localhost}:${KYB_APP_PORT}
KYB_EXAMPLE_CORS_ORIGIN: http://localhost:5201
Comment on lines +53 to +56
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Hardcoding CORS origins may cause cross-origin issues.

By hardcoding the CORS origins to localhost, services running on other domains won't be able to communicate with the API. This can cause issues in staging or production environments.

Apply this diff to make the CORS origins configurable:

 BACKOFFICE_CORS_ORIGIN: http://localhost:5137
 WORKFLOW_DASHBOARD_CORS_ORIGIN: http://localhost:5200
 KYB_EXAMPLE_CORS_ORIGIN: http://localhost:5201
+# Consider using environment variables to set these origins dynamically based on deployment.

Committable suggestion skipped: line range outside the PR's diff.

APP_API_URL: https://alon.ballerine.dev
EMAIL_API_TOKEN: ''
EMAIL_API_URL: https://api.sendgrid.com/v3/mail/send
Expand Down Expand Up @@ -98,5 +98,6 @@ services:
timeout: 45s
interval: 10s
retries: 10
restart: on-failure
volumes:
postgres15: ~
Loading