From 42f94659f6025355ea3d8040d5de72e88694fcb6 Mon Sep 17 00:00:00 2001 From: evanpelle Date: Thu, 29 May 2025 17:14:49 -0700 Subject: [PATCH] generate unique env file for each deployment to prevent conflicts --- deploy.sh | 10 +++++++--- update.sh | 28 +++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/deploy.sh b/deploy.sh index 48c9cc5f5..dd8210778 100755 --- a/deploy.sh +++ b/deploy.sh @@ -171,8 +171,12 @@ if [ $? -ne 0 ]; then exit 1 fi +# Generate a random filename for the environment file to prevent conflicts +# when multiple deployments are happening at the same time. +ENV_FILE="${REMOTE_UPDATE_PATH}/${SUBDOMAIN}-${RANDOM}.env" + ssh -i $SSH_KEY $REMOTE_USER@$SERVER_HOST "chmod +x $REMOTE_UPDATE_SCRIPT && \ -cat > $REMOTE_UPDATE_PATH/.env << 'EOL' +cat > $ENV_FILE << 'EOL' GAME_ENV=$ENV ENV=$ENV HOST=$HOST @@ -192,8 +196,8 @@ OTEL_ENDPOINT=$OTEL_ENDPOINT BASIC_AUTH_USER=$BASIC_AUTH_USER BASIC_AUTH_PASS=$BASIC_AUTH_PASS EOL -chmod 600 $REMOTE_UPDATE_PATH/.env && \ -$REMOTE_UPDATE_SCRIPT" +chmod 600 $ENV_FILE && \ +$REMOTE_UPDATE_SCRIPT $ENV_FILE" if [ $? -ne 0 ]; then echo "❌ Failed to execute update script on server." diff --git a/update.sh b/update.sh index 91c516346..761c353f9 100755 --- a/update.sh +++ b/update.sh @@ -2,12 +2,25 @@ # update.sh - Script to update Docker container on Hetzner server # Called by deploy.sh after uploading Docker image to Docker Hub -# Load environment variables if .env exists -if [ -f /home/openfront/.env ]; then - echo "Loading environment variables from .env file..." - export $(grep -v '^#' /home/openfront/.env | xargs) +# Check if environment file is provided +if [ $# -ne 1 ]; then + echo "Error: Environment file path is required" + echo "Usage: $0 " + exit 1 fi +ENV_FILE="$1" + +# Check if environment file exists +if [ ! -f "$ENV_FILE" ]; then + echo "Error: Environment file '$ENV_FILE' not found" + exit 1 +fi + +# Load environment variables from the provided file +echo "Loading environment variables from $ENV_FILE..." +export $(grep -v '^#' "$ENV_FILE" | xargs) + echo "======================================================" echo "🔄 UPDATING SERVER: ${HOST} ENVIRONMENT" echo "======================================================" @@ -47,7 +60,7 @@ fi echo "Starting new container for ${HOST} environment..." docker run -d \ --restart="${RESTART}" \ - --env-file /home/openfront/.env \ + --env-file "$ENV_FILE" \ --name "${CONTAINER_NAME}" \ "${DOCKER_IMAGE}" @@ -60,6 +73,11 @@ if [ $? -eq 0 ]; then docker image prune -a -f docker container prune -f echo "Cleanup complete." + + # Remove the environment file + echo "Removing environment file ${ENV_FILE}..." + rm -f "$ENV_FILE" + echo "Environment file removed." else echo "Failed to start container" exit 1