From dd063d5ac5870fefcc662aecfe1a15936e942e1f Mon Sep 17 00:00:00 2001 From: Oussama Douhou Date: Tue, 13 Jan 2026 13:12:06 +0100 Subject: [PATCH] fix: escape dollar signs in Dokploy project-level variables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker Compose interprets $ as variable substitution, so we need to escape Dokploy's project-level variable syntax by doubling the dollar sign. Changes: - docker-compose.*.yml: ${{project.VAR}} β†’ $${{project.VAR}} - Updated DOKPLOY_DEPLOYMENT.md with correct syntax and explanation - Updated SHARED_PROJECT_DEPLOYMENT.md with correct syntax and explanation This fixes the 'You may need to escape any $ with another $' error when deploying via Dokploy. Evidence: Tested in Dokploy deployment - error resolved with $$ escaping. --- docker-compose.dev.yml | 4 ++-- docker-compose.prod.yml | 4 ++-- docker-compose.staging.yml | 4 ++-- docs/DOKPLOY_DEPLOYMENT.md | 14 ++++++++------ docs/SHARED_PROJECT_DEPLOYMENT.md | 8 +++++--- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 86a6c60..6a903b0 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -15,8 +15,8 @@ services: - STACK_DOMAIN_SUFFIX=${STACK_DOMAIN_SUFFIX:-ai.flexinit.nl} - STACK_IMAGE=${STACK_IMAGE:-git.app.flexinit.nl/flexinit/agent-stack:latest} - RESERVED_NAMES=${RESERVED_NAMES:-admin,api,www,root,system,test,demo,portal} - - SHARED_PROJECT_ID=${{project.SHARED_PROJECT_ID}} - - SHARED_ENVIRONMENT_ID=${{project.SHARED_ENVIRONMENT_ID}} + - SHARED_PROJECT_ID=$${{project.SHARED_PROJECT_ID}} + - SHARED_ENVIRONMENT_ID=$${{project.SHARED_ENVIRONMENT_ID}} env_file: - .env restart: unless-stopped diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 765bf6e..5413e28 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -15,8 +15,8 @@ services: - STACK_DOMAIN_SUFFIX=${STACK_DOMAIN_SUFFIX:-ai.flexinit.nl} - STACK_IMAGE=${STACK_IMAGE:-git.app.flexinit.nl/flexinit/agent-stack:latest} - RESERVED_NAMES=${RESERVED_NAMES:-admin,api,www,root,system,test,demo,portal} - - SHARED_PROJECT_ID=${{project.SHARED_PROJECT_ID}} - - SHARED_ENVIRONMENT_ID=${{project.SHARED_ENVIRONMENT_ID}} + - SHARED_PROJECT_ID=$${{project.SHARED_PROJECT_ID}} + - SHARED_ENVIRONMENT_ID=$${{project.SHARED_ENVIRONMENT_ID}} env_file: - .env restart: unless-stopped diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index 7db9ccd..d719578 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -15,8 +15,8 @@ services: - STACK_DOMAIN_SUFFIX=${STACK_DOMAIN_SUFFIX:-ai.flexinit.nl} - STACK_IMAGE=${STACK_IMAGE:-git.app.flexinit.nl/flexinit/agent-stack:latest} - RESERVED_NAMES=${RESERVED_NAMES:-admin,api,www,root,system,test,demo,portal} - - SHARED_PROJECT_ID=${{project.SHARED_PROJECT_ID}} - - SHARED_ENVIRONMENT_ID=${{project.SHARED_ENVIRONMENT_ID}} + - SHARED_PROJECT_ID=$${{project.SHARED_PROJECT_ID}} + - SHARED_ENVIRONMENT_ID=$${{project.SHARED_ENVIRONMENT_ID}} env_file: - .env restart: unless-stopped diff --git a/docs/DOKPLOY_DEPLOYMENT.md b/docs/DOKPLOY_DEPLOYMENT.md index 4029713..142d485 100644 --- a/docs/DOKPLOY_DEPLOYMENT.md +++ b/docs/DOKPLOY_DEPLOYMENT.md @@ -143,13 +143,15 @@ In the shared project (`ai-stack-portal`), add these **project-level environment The portal's docker-compose files use Dokploy's variable syntax to reference these: -```yaml -environment: - - SHARED_PROJECT_ID=${{project.SHARED_PROJECT_ID}} - - SHARED_ENVIRONMENT_ID=${{project.SHARED_ENVIRONMENT_ID}} -``` + ```yaml + environment: + - SHARED_PROJECT_ID=$${{project.SHARED_PROJECT_ID}} + - SHARED_ENVIRONMENT_ID=$${{project.SHARED_ENVIRONMENT_ID}} + ``` -**This syntax `${{project.VARIABLE}}` tells Dokploy**: "Get this value from the project-level environment variables" +**This syntax `$${{project.VARIABLE}}` tells Dokploy**: "Get this value from the project-level environment variables" + +**Note**: The double `$$` is required to escape the dollar sign in Docker Compose files. ### Important Notes diff --git a/docs/SHARED_PROJECT_DEPLOYMENT.md b/docs/SHARED_PROJECT_DEPLOYMENT.md index 8a88192..d17a83a 100644 --- a/docs/SHARED_PROJECT_DEPLOYMENT.md +++ b/docs/SHARED_PROJECT_DEPLOYMENT.md @@ -17,7 +17,7 @@ The AI Stack Deployer portal deploys **all user AI stacks to a single shared Dok β”‚ πŸ“¦ Portal Application: ai-stack-deployer-prod β”‚ β”‚ β”œβ”€ Domain: portal.ai.flexinit.nl β”‚ β”‚ β”œβ”€ Image: git.app.flexinit.nl/.../ai-stack-deployer:latestβ”‚ -β”‚ └─ Env: SHARED_PROJECT_ID=${{project.SHARED_PROJECT_ID}} β”‚ +β”‚ └─ Env: SHARED_PROJECT_ID=$${{project.SHARED_PROJECT_ID}} β”‚ β”‚ β”‚ β”‚ ───────────────────────────────────────────────────────────── β”‚ β”‚ β”‚ @@ -56,9 +56,11 @@ When a user submits a stack name (e.g., "john-dev"), the portal: 2. **These are set via Dokploy's project-level variables**: ```yaml environment: - - SHARED_PROJECT_ID=${{project.SHARED_PROJECT_ID}} - - SHARED_ENVIRONMENT_ID=${{project.SHARED_ENVIRONMENT_ID}} + - SHARED_PROJECT_ID=$${{project.SHARED_PROJECT_ID}} + - SHARED_ENVIRONMENT_ID=$${{project.SHARED_ENVIRONMENT_ID}} ``` + + **Note**: The double `$$` is required to escape the dollar sign in Docker Compose. ### Step 2: Portal Deploys to Shared Project