diff --git a/.github/workflows/check-compose-sync.yml b/.github/workflows/check-compose-sync.yml index c23aa3f..5a343ec 100644 --- a/.github/workflows/check-compose-sync.yml +++ b/.github/workflows/check-compose-sync.yml @@ -5,6 +5,7 @@ on: paths: - 'on-prem/templates/**' - 'on-prem/scripts/generate-compose.sh' + - 'on-prem/scripts/sync-templates.sh' - 'on-prem/docker-compose.full.yml' - 'on-prem/docker-compose.database.yml' - 'on-prem/docker-compose.cache.yml' @@ -12,6 +13,7 @@ on: paths: - 'on-prem/templates/**' - 'on-prem/scripts/generate-compose.sh' + - 'on-prem/scripts/sync-templates.sh' - 'on-prem/docker-compose.full.yml' - 'on-prem/docker-compose.database.yml' - 'on-prem/docker-compose.cache.yml' @@ -23,12 +25,12 @@ jobs: - name: Checkout uses: actions/checkout@v4 + - name: Install yq + uses: mikefarah/yq@v4 + - name: Generate compose files working-directory: on-prem - run: | - ./scripts/generate-compose.sh full - ./scripts/generate-compose.sh database - ./scripts/generate-compose.sh cache + run: ./scripts/sync-templates.sh - name: Check for differences working-directory: on-prem @@ -37,12 +39,8 @@ jobs: echo "" echo "❌ Generated compose files are out of sync with committed files!" echo "" - echo "To fix this, run the following commands and commit the changes:" - echo " cd on-prem" - echo " ./scripts/generate-compose.sh full" - echo " ./scripts/generate-compose.sh database" - echo " ./scripts/generate-compose.sh cache" + echo "To fix this, run and commit the changes:" + echo " cd on-prem && ./scripts/sync-templates.sh" exit 1 fi echo "✅ All compose files are in sync" - diff --git a/on-prem/.env.example b/on-prem/.env.example index a58e5f8..8e3898d 100644 --- a/on-prem/.env.example +++ b/on-prem/.env.example @@ -1,9 +1,17 @@ -CURRENTS_ENV=onprem # IMAGE_REPOSITORY=513558712013.dkr.ecr.us-east-1.amazonaws.com/currents/on-prem/ # IMAGE_TAG=staging GITLAB_REDIRECT_URL=http://localhost:4000/integrations/gitlab/callback + +# ============================================================================= +# Redis Configuration +# ============================================================================= +# Default points to redis service in the compose network +# Change these if using an external Redis instance +REDIS_URI=redis://redis:6379 +REDIS_URI_SLAVE=redis://redis:6379 + # Remote Object Storage # For minio when using the full data environment MINIO_SERVER_ACCESS_KEY=minio-access-key @@ -41,4 +49,34 @@ AUTOMATED_REPORTS_EMAIL_BCC= # Coralogix support CORALOGIX_API_ENDPOINT= CORALOGIX_API_KEY= -CORALOGIX_APP_NAME="customer-name" \ No newline at end of file +CORALOGIX_APP_NAME="customer-name" + +# ============================================================================= +# Data Volume Configuration +# ============================================================================= +# By default, data is stored in ./data/ (auto-created) +# Set to a custom path or a pre-created Docker volume name +# +# Examples: +# REDIS_VOLUME=./data/redis # Local path (default) +# REDIS_VOLUME=/mnt/ssd/redis # Custom path +# REDIS_VOLUME=my_redis_volume # Pre-created Docker volume +# +# REDIS_VOLUME=./data/redis +# MONGODB_VOLUME=./data/mongodb +# CLICKHOUSE_VOLUME=./data/clickhouse +# MINIO_VOLUME=./data/minio +# SCHEDULER_STARTUP_VOLUME=./data/startup + +# ============================================================================= +# ClickHouse Configuration +# ============================================================================= +# Connection settings (uses service name for internal Docker network) +CLICKHOUSE_URL=http://clickhouse:8123 +CLICKHOUSE_USERNAME=currents + +# Passwords for ClickHouse users (generated by setup.sh) +# Default PASSWORD only used if using the included clickhouse +CLICKHOUSE_DEFAULT_PASSWORD= +# The CURRENTS USER PASSWORD is how all services connect +CLICKHOUSE_CURRENTS_PASSWORD= diff --git a/on-prem/.gitignore b/on-prem/.gitignore index 6a12c0a..eecc04e 100644 --- a/on-prem/.gitignore +++ b/on-prem/.gitignore @@ -1,3 +1,4 @@ .startup /.env -/.gitlab-key.pem \ No newline at end of file +/.gitlab-key.pem +/data/ \ No newline at end of file diff --git a/on-prem/docker-compose.cache.yml b/on-prem/docker-compose.cache.yml index 61802ec..72bf9bb 100644 --- a/on-prem/docker-compose.cache.yml +++ b/on-prem/docker-compose.cache.yml @@ -2,170 +2,130 @@ # Profile: cache - Cache (redis) name: currents_cache -networks: - default: - name: currents_cache_default + +# This core Currents application services + +# Redis service configuration +# Almost always included - provides caching and pub/sub messaging services: - api: - container_name: currentsapi + # Currents services depend on redis + director: + hostname: director + image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} + expose: + - 1234 + ports: + - 1234:1234 + restart: unless-stopped + env_file: + - .env + networks: + - default + environment: + - CURRENTS_ENV=onprem + - API_URL="http://localhost:4000/v1" + - APP_BASE_URL=http://localhost:4000 + - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false depends_on: redis: condition: service_started required: false + api: + hostname: api + image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} + expose: + - 4000 + ports: + - 4000:4000 + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - INCLUDE_DASHBOARD=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - CURRENTS_RECORD_API_URL=http://localhost:1234 - expose: - - 4000 - hostname: api - image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "4000" - target: 4000 - restart: unless-stopped - changestreams-worker: - container_name: currrents-changestreams-worker depends_on: redis: condition: service_started required: false + changestreams-worker: + image: ${IMAGE_REPOSITORY:-currents-}change-streams:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 - image: ${IMAGE_REPOSITORY:-currents-}change-streams:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped - director: - container_name: currentsdirector + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} depends_on: redis: condition: service_started required: false + write-worker: + image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: - - API_URL="http://localhost:4000/v1" - - APP_BASE_URL=http://localhost:4000 - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - expose: - - 1234 - hostname: director - image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "1234" - target: 1234 - restart: unless-stopped - redis: - expose: - - 6379 - - 8001 - hostname: redis - image: redis/redis-stack - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "6379" - target: 6379 - - mode: ingress - protocol: tcp - published: "8001" - target: 8001 - restart: unless-stopped - volumes: - - source: redisdata - target: /data - type: volume - volume: {} - scheduler: - container_name: currents-scheduler + - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} depends_on: redis: condition: service_started required: false + scheduler: + image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - RUN_STARTUP_TASKS=true - image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped volumes: - - bind: - create_host_path: true - read_only: true - source: ./.startup - target: /app/packages/scheduler/dist/.startup - type: bind - webhooks: - container_name: currents-webhooks + - ${SCHEDULER_STARTUP_VOLUME:-./data/startup}:/app/packages/scheduler/dist/.startup depends_on: redis: condition: service_started required: false + webhooks: + image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - DASHBOARD_URL=http://localhost:4000 - image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped - write-worker: - container_name: currents-write-worker depends_on: redis: condition: service_started required: false - env_file: - - path: .env - required: true - environment: - - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - - CLICKHOUSE_URL=http://host.docker.internal:8123 - image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} - networks: - default: null + redis: + hostname: redis + image: redis/redis-stack-server:7.4.0-v8 + ports: + - 6379:6379 restart: unless-stopped -volumes: - redisdata: - name: currents_cache_redisdata + networks: + - default + volumes: + - ${REDIS_VOLUME:-./data/redis}:/data +networks: + default: null diff --git a/on-prem/docker-compose.database.yml b/on-prem/docker-compose.database.yml index 17cf214..1ab2aad 100644 --- a/on-prem/docker-compose.database.yml +++ b/on-prem/docker-compose.database.yml @@ -2,12 +2,30 @@ # Profile: database - Database services (redis, mongodb, clickhouse) name: currents_database -networks: - default: - name: currents_database_default + +# This core Currents application services + +# Redis service configuration +# Almost always included - provides caching and pub/sub messaging services: - api: - container_name: currentsapi + # Currents services depend on redis + director: + hostname: director + image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} + expose: + - 1234 + ports: + - 1234:1234 + restart: unless-stopped + env_file: + - .env + networks: + - default + environment: + - CURRENTS_ENV=onprem + - API_URL="http://localhost:4000/v1" + - APP_BASE_URL=http://localhost:4000 + - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false depends_on: clickhouse: condition: service_healthy @@ -18,31 +36,25 @@ services: redis: condition: service_started required: false + api: + hostname: api + image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} + expose: + - 4000 + ports: + - 4000:4000 + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - INCLUDE_DASHBOARD=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - CURRENTS_RECORD_API_URL=http://localhost:1234 - expose: - - 4000 - hostname: api - image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "4000" - target: 4000 - restart: unless-stopped - changestreams-worker: - container_name: currrents-changestreams-worker depends_on: clickhouse: condition: service_healthy @@ -53,52 +65,17 @@ services: redis: condition: service_started required: false - env_file: - - path: .env - required: true - environment: - - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + changestreams-worker: image: ${IMAGE_REPOSITORY:-currents-}change-streams:${IMAGE_TAG:-dev} - networks: - default: null restart: unless-stopped - clickhouse: + networks: + - default env_file: - - path: .env - required: true + - .env environment: - CLICKHOUSE_SKIP_USER_SETUP: "1" - healthcheck: - interval: 2s - retries: 10 - test: - - CMD-SHELL - - wget --spider -q clickhouse:8123/ping - timeout: 5s - hostname: clickhouse - image: clickhouse/clickhouse-server:25.8 - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "8123" - target: 8123 - - mode: ingress - protocol: tcp - published: "9123" - target: 9000 - restart: unless-stopped - volumes: - - source: clickhousedata - target: /var/lib/clickhouse - type: volume - volume: {} - director: - container_name: currentsdirector + - CURRENTS_ENV=onprem + - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} depends_on: clickhouse: condition: service_healthy @@ -109,82 +86,18 @@ services: redis: condition: service_started required: false + write-worker: + image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: - - API_URL="http://localhost:4000/v1" - - APP_BASE_URL=http://localhost:4000 - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - expose: - - 1234 - hostname: director - image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "1234" - target: 1234 - restart: unless-stopped - mongodb: - entrypoint: - - /usr/bin/mongod - - --bind_ip_all - - --replSet - - rs0 - expose: - - 27017 - healthcheck: - interval: 2s - retries: 10 - test: - - CMD-SHELL - - (echo "try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'mongodb:27017'}]}) }" | mongosh localhost:27017 --quiet) && mongosh --eval 'db.runCommand("ping").ok' localhost:27017 --quiet - timeout: 5s - hostname: mongodb - image: mongo:7.0.0 - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "27017" - target: 27017 - restart: unless-stopped - volumes: - - source: mongodata - target: /data/db - type: volume - volume: {} - redis: - expose: - - 6379 - - 8001 - hostname: redis - image: redis/redis-stack - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "6379" - target: 6379 - - mode: ingress - protocol: tcp - published: "8001" - target: 8001 - restart: unless-stopped - volumes: - - source: redisdata - target: /data - type: volume - volume: {} - scheduler: - container_name: currents-scheduler + - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} depends_on: clickhouse: condition: service_healthy @@ -195,28 +108,20 @@ services: redis: condition: service_started required: false + scheduler: + image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - RUN_STARTUP_TASKS=true - image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped volumes: - - bind: - create_host_path: true - read_only: true - source: ./.startup - target: /app/packages/scheduler/dist/.startup - type: bind - webhooks: - container_name: currents-webhooks + - ${SCHEDULER_STARTUP_VOLUME:-./data/startup}:/app/packages/scheduler/dist/.startup depends_on: clickhouse: condition: service_healthy @@ -227,20 +132,17 @@ services: redis: condition: service_started required: false + webhooks: + image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - DASHBOARD_URL=http://localhost:4000 - image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped - write-worker: - container_name: currents-write-worker depends_on: clickhouse: condition: service_healthy @@ -251,23 +153,88 @@ services: redis: condition: service_started required: false - env_file: - - path: .env - required: true + clickhouse: + hostname: clickhouse + image: clickhouse/clickhouse-server:25.8 + restart: unless-stopped environment: - - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - - CLICKHOUSE_URL=http://host.docker.internal:8123 - image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} + CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: '1' + healthcheck: + test: + - 'CMD-SHELL' + - 'wget --spider -q clickhouse:8123/ping' + interval: 2s + timeout: 5s + retries: 10 + env_file: + - .env + ports: + - 8123:8123 # HTTP Interface + - 9123:9000 # TCP Interface networks: - default: null + - default + configs: + - source: clickhouse_users + target: /etc/clickhouse-server/users.d/users.xml + volumes: + - ${CLICKHOUSE_VOLUME:-./data/clickhouse}:/var/lib/clickhouse + mongodb: + hostname: mongodb + image: mongo:7.0.0 + expose: + - 27017 + ports: + - 27017:27017 restart: unless-stopped -volumes: - clickhousedata: - name: currents_database_clickhousedata - mongodata: - name: currents_database_mongodata - redisdata: - name: currents_database_redisdata + entrypoint: ['/usr/bin/mongod', '--bind_ip_all', '--replSet', 'rs0'] + networks: + - default + healthcheck: + test: + - 'CMD-SHELL' + - (echo "try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'mongodb:27017'}]}) }" | mongosh localhost:27017 --quiet) && mongosh --eval 'db.runCommand("ping").ok' localhost:27017 --quiet + interval: 2s + timeout: 5s + retries: 10 + volumes: + - ${MONGODB_VOLUME:-./data/mongodb}:/data/db + redis: + hostname: redis + image: redis/redis-stack-server:7.4.0-v8 + ports: + - 6379:6379 + restart: unless-stopped + networks: + - default + volumes: + - ${REDIS_VOLUME:-./data/redis}:/data +networks: + default: null +configs: + clickhouse_users: + content: | + + + + + + ${CLICKHOUSE_DEFAULT_PASSWORD} + + ::1 + 127.0.0.1 + + default + default + 1 + + + + ${CLICKHOUSE_CURRENTS_PASSWORD} + + ::/0 + + default + default + + + diff --git a/on-prem/docker-compose.full.yml b/on-prem/docker-compose.full.yml index 2c24876..7a521b2 100644 --- a/on-prem/docker-compose.full.yml +++ b/on-prem/docker-compose.full.yml @@ -2,12 +2,30 @@ # Profile: full - All services (redis, mongodb, clickhouse, minio) name: currents_full -networks: - default: - name: currents_full_default + +# This core Currents application services + +# Redis service configuration +# Almost always included - provides caching and pub/sub messaging services: - api: - container_name: currentsapi + # Currents services depend on redis + director: + hostname: director + image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} + expose: + - 1234 + ports: + - 1234:1234 + restart: unless-stopped + env_file: + - .env + networks: + - default + environment: + - CURRENTS_ENV=onprem + - API_URL="http://localhost:4000/v1" + - APP_BASE_URL=http://localhost:4000 + - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false depends_on: clickhouse: condition: service_healthy @@ -18,31 +36,25 @@ services: redis: condition: service_started required: false + api: + hostname: api + image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} + expose: + - 4000 + ports: + - 4000:4000 + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - INCLUDE_DASHBOARD=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - CURRENTS_RECORD_API_URL=http://localhost:1234 - expose: - - 4000 - hostname: api - image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "4000" - target: 4000 - restart: unless-stopped - changestreams-worker: - container_name: currrents-changestreams-worker depends_on: clickhouse: condition: service_healthy @@ -53,52 +65,17 @@ services: redis: condition: service_started required: false - env_file: - - path: .env - required: true - environment: - - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + changestreams-worker: image: ${IMAGE_REPOSITORY:-currents-}change-streams:${IMAGE_TAG:-dev} - networks: - default: null restart: unless-stopped - clickhouse: + networks: + - default env_file: - - path: .env - required: true + - .env environment: - CLICKHOUSE_SKIP_USER_SETUP: "1" - healthcheck: - interval: 2s - retries: 10 - test: - - CMD-SHELL - - wget --spider -q clickhouse:8123/ping - timeout: 5s - hostname: clickhouse - image: clickhouse/clickhouse-server:25.8 - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "8123" - target: 8123 - - mode: ingress - protocol: tcp - published: "9123" - target: 9000 - restart: unless-stopped - volumes: - - source: clickhousedata - target: /var/lib/clickhouse - type: volume - volume: {} - director: - container_name: currentsdirector + - CURRENTS_ENV=onprem + - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} depends_on: clickhouse: condition: service_healthy @@ -109,107 +86,18 @@ services: redis: condition: service_started required: false - env_file: - - path: .env - required: true - environment: - - API_URL="http://localhost:4000/v1" - - APP_BASE_URL=http://localhost:4000 - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - expose: - - 1234 - hostname: director - image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "1234" - target: 1234 + write-worker: + image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} restart: unless-stopped - minio: + networks: + - default env_file: - - path: .env - required: true + - .env environment: - MINIO_DEFAULT_BUCKETS: currents - MINIO_ROOT_PASSWORD: ${MINIO_SERVER_SECRET_KEY} - MINIO_ROOT_USER: ${MINIO_SERVER_ACCESS_KEY} - image: bitnamilegacy/minio:2025.2.28 - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "9000" - target: 9000 - - mode: ingress - protocol: tcp - published: "9001" - target: 9001 - volumes: - - source: miniodata - target: /bitnami/minio/data - type: volume - volume: {} - mongodb: - entrypoint: - - /usr/bin/mongod - - --bind_ip_all - - --replSet - - rs0 - expose: - - 27017 - healthcheck: - interval: 2s - retries: 10 - test: - - CMD-SHELL - - (echo "try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'mongodb:27017'}]}) }" | mongosh localhost:27017 --quiet) && mongosh --eval 'db.runCommand("ping").ok' localhost:27017 --quiet - timeout: 5s - hostname: mongodb - image: mongo:7.0.0 - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "27017" - target: 27017 - restart: unless-stopped - volumes: - - source: mongodata - target: /data/db - type: volume - volume: {} - redis: - expose: - - 6379 - - 8001 - hostname: redis - image: redis/redis-stack - networks: - default: null - ports: - - mode: ingress - protocol: tcp - published: "6379" - target: 6379 - - mode: ingress - protocol: tcp - published: "8001" - target: 8001 - restart: unless-stopped - volumes: - - source: redisdata - target: /data - type: volume - volume: {} - scheduler: - container_name: currents-scheduler + - CURRENTS_ENV=onprem + - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false + - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} depends_on: clickhouse: condition: service_healthy @@ -220,28 +108,20 @@ services: redis: condition: service_started required: false + scheduler: + image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - RUN_STARTUP_TASKS=true - image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped volumes: - - bind: - create_host_path: true - read_only: true - source: ./.startup - target: /app/packages/scheduler/dist/.startup - type: bind - webhooks: - container_name: currents-webhooks + - ${SCHEDULER_STARTUP_VOLUME:-./data/startup}:/app/packages/scheduler/dist/.startup depends_on: clickhouse: condition: service_healthy @@ -252,20 +132,17 @@ services: redis: condition: service_started required: false + webhooks: + image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} + restart: unless-stopped + networks: + - default env_file: - - path: .env - required: true + - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - DASHBOARD_URL=http://localhost:4000 - image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} - networks: - default: null - restart: unless-stopped - write-worker: - container_name: currents-write-worker depends_on: clickhouse: condition: service_healthy @@ -276,25 +153,101 @@ services: redis: condition: service_started required: false + clickhouse: + hostname: clickhouse + image: clickhouse/clickhouse-server:25.8 + restart: unless-stopped + environment: + CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: '1' + healthcheck: + test: + - 'CMD-SHELL' + - 'wget --spider -q clickhouse:8123/ping' + interval: 2s + timeout: 5s + retries: 10 + env_file: + - .env + ports: + - 8123:8123 # HTTP Interface + - 9123:9000 # TCP Interface + networks: + - default + configs: + - source: clickhouse_users + target: /etc/clickhouse-server/users.d/users.xml + volumes: + - ${CLICKHOUSE_VOLUME:-./data/clickhouse}:/var/lib/clickhouse + minio: + image: bitnamilegacy/minio:2025.2.28 + volumes: + - ${MINIO_VOLUME:-./data/minio}:/bitnami/minio/data + ports: + - 9000:9000 + - 9001:9001 env_file: - - path: .env - required: true + - .env environment: - - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - - CLICKHOUSE_URL=http://host.docker.internal:8123 - image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} + MINIO_DEFAULT_BUCKETS: currents + MINIO_ROOT_USER: ${MINIO_SERVER_ACCESS_KEY} + MINIO_ROOT_PASSWORD: ${MINIO_SERVER_SECRET_KEY} + mongodb: + hostname: mongodb + image: mongo:7.0.0 + expose: + - 27017 + ports: + - 27017:27017 + restart: unless-stopped + entrypoint: ['/usr/bin/mongod', '--bind_ip_all', '--replSet', 'rs0'] networks: - default: null + - default + healthcheck: + test: + - 'CMD-SHELL' + - (echo "try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'mongodb:27017'}]}) }" | mongosh localhost:27017 --quiet) && mongosh --eval 'db.runCommand("ping").ok' localhost:27017 --quiet + interval: 2s + timeout: 5s + retries: 10 + volumes: + - ${MONGODB_VOLUME:-./data/mongodb}:/data/db + redis: + hostname: redis + image: redis/redis-stack-server:7.4.0-v8 + ports: + - 6379:6379 restart: unless-stopped -volumes: - clickhousedata: - name: currents_full_clickhousedata - miniodata: - name: currents_full_miniodata - mongodata: - name: currents_full_mongodata - redisdata: - name: currents_full_redisdata + networks: + - default + volumes: + - ${REDIS_VOLUME:-./data/redis}:/data +networks: + default: null +configs: + clickhouse_users: + content: | + + + + + + ${CLICKHOUSE_DEFAULT_PASSWORD} + + ::1 + 127.0.0.1 + + default + default + 1 + + + + ${CLICKHOUSE_CURRENTS_PASSWORD} + + ::/0 + + default + default + + + diff --git a/on-prem/scripts/generate-compose.sh b/on-prem/scripts/generate-compose.sh index b1ecfdd..79e61bd 100755 --- a/on-prem/scripts/generate-compose.sh +++ b/on-prem/scripts/generate-compose.sh @@ -10,6 +10,9 @@ # ./generate-compose.sh database # redis, mongodb, clickhouse # ./generate-compose.sh cache # redis only # ./generate-compose.sh database storage # All data services including minio +# +# Requirements: +# - yq (https://github.com/mikefarah/yq) set -e @@ -17,6 +20,13 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TEMPLATES_DIR="$SCRIPT_DIR/../templates" OUTPUT_DIR="$SCRIPT_DIR/.." +# Check for yq +if ! command -v yq &> /dev/null; then + echo "Error: yq is required but not installed." + echo "Install with: brew install yq (macOS) or see https://github.com/mikefarah/yq" + exit 1 +fi + # Profile descriptions get_profile_desc() { case "$1" in @@ -97,26 +107,31 @@ SERVICES=$(echo "$SERVICES" | tr ' ' '\n' | sort -u | tr '\n' ' ') # Output filename based on profiles OUTPUT_FILE="$OUTPUT_DIR/docker-compose.${PROFILE_NAME}.yml" -# Build the compose file arguments +# Build the list of compose files to merge # Always start with currents base -COMPOSE_FILES="-f $TEMPLATES_DIR/compose.currents.yml" +COMPOSE_FILES="$TEMPLATES_DIR/compose.currents.yml" # Add service-specific files based on collected services for service in $SERVICES; do - COMPOSE_FILES="$COMPOSE_FILES -f $TEMPLATES_DIR/compose.${service}.yml" + COMPOSE_FILES="$COMPOSE_FILES $TEMPLATES_DIR/compose.${service}.yml" done echo "Generating docker-compose file for profile(s): $@" echo "Services: $SERVICES" echo "Output: $OUTPUT_FILE" -# Generate header comment -HEADER="# Generated by: ./scripts/generate-compose.sh +# Generate header with name field +cat > "$OUTPUT_FILE" << EOF +# Generated by: ./scripts/generate-compose.sh # Profile: $PROFILE_NAME - $PROFILE_DESC -" -# Generate the merged compose file with header -echo "$HEADER" > "$OUTPUT_FILE" -COMPOSE_PROJECT_NAME="currents_${PROFILE_NAME}" docker compose $COMPOSE_FILES config --no-path-resolution --no-interpolate --no-env-resolution >> "$OUTPUT_FILE" +name: currents_${PROFILE_NAME} + +EOF + +# Merge all compose files using yq +# Use eval-all with ireduce to deep merge all files +# --string-interpolation=false prevents yq from expanding ${VAR} variables +yq eval-all --string-interpolation=false '. as $item ireduce ({}; . * $item)' $COMPOSE_FILES >> "$OUTPUT_FILE" echo "Generated: $OUTPUT_FILE" diff --git a/on-prem/scripts/setup.sh b/on-prem/scripts/setup.sh index 7c12eb2..b155c0a 100755 --- a/on-prem/scripts/setup.sh +++ b/on-prem/scripts/setup.sh @@ -59,6 +59,18 @@ setup_env_file() { sed -i.bak "s|^MINIO_SERVER_SECRET_KEY=.*|MINIO_SERVER_SECRET_KEY=$MINIO_SECRET|" "$ENV_FILE" fi + # Generate CLICKHOUSE_DEFAULT_PASSWORD + CLICKHOUSE_DEFAULT=$("$SCRIPT_DIR/generate-secrets.sh" token 32) + if grep -q "^CLICKHOUSE_DEFAULT_PASSWORD=" "$ENV_FILE"; then + sed -i.bak "s|^CLICKHOUSE_DEFAULT_PASSWORD=.*|CLICKHOUSE_DEFAULT_PASSWORD=$CLICKHOUSE_DEFAULT|" "$ENV_FILE" + fi + + # Generate CLICKHOUSE_CURRENTS_PASSWORD + CLICKHOUSE_CURRENTS=$("$SCRIPT_DIR/generate-secrets.sh" token 32) + if grep -q "^CLICKHOUSE_CURRENTS_PASSWORD=" "$ENV_FILE"; then + sed -i.bak "s|^CLICKHOUSE_CURRENTS_PASSWORD=.*|CLICKHOUSE_CURRENTS_PASSWORD=$CLICKHOUSE_CURRENTS|" "$ENV_FILE" + fi + # Generate GITLAB_STATE_SECRET (RSA private key, base64 encoded) GITLAB_KEY_FILE="$ON_PREM_DIR/.gitlab-key.pem" if [ ! -f "$GITLAB_KEY_FILE" ]; then diff --git a/on-prem/scripts/sync-templates.sh b/on-prem/scripts/sync-templates.sh new file mode 100755 index 0000000..ea7e37a --- /dev/null +++ b/on-prem/scripts/sync-templates.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# +# Regenerate the committed docker-compose files from templates +# Run this after modifying any template files +# +# Usage: +# ./scripts/sync-templates.sh + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +echo "Regenerating docker-compose files from templates..." + +"$SCRIPT_DIR/generate-compose.sh" full +"$SCRIPT_DIR/generate-compose.sh" database +"$SCRIPT_DIR/generate-compose.sh" cache + +echo "" +echo "Done! The following files have been updated:" +echo " - docker-compose.full.yml" +echo " - docker-compose.database.yml" +echo " - docker-compose.cache.yml" + diff --git a/on-prem/templates/compose.clickhouse.yml b/on-prem/templates/compose.clickhouse.yml index 34fbe1d..afe5af1 100644 --- a/on-prem/templates/compose.clickhouse.yml +++ b/on-prem/templates/compose.clickhouse.yml @@ -1,13 +1,42 @@ # ClickHouse service configuration # Analytics database for test results and metrics +configs: + clickhouse_users: + content: | + + + + + + ${CLICKHOUSE_DEFAULT_PASSWORD} + + ::1 + 127.0.0.1 + + default + default + 1 + + + + ${CLICKHOUSE_CURRENTS_PASSWORD} + + ::/0 + + default + default + + + + services: clickhouse: hostname: clickhouse image: clickhouse/clickhouse-server:25.8 restart: unless-stopped environment: - CLICKHOUSE_SKIP_USER_SETUP: '1' + CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: '1' healthcheck: test: - 'CMD-SHELL' @@ -22,8 +51,11 @@ services: - 9123:9000 # TCP Interface networks: - default + configs: + - source: clickhouse_users + target: /etc/clickhouse-server/users.d/users.xml volumes: - - clickhousedata:/var/lib/clickhouse + - ${CLICKHOUSE_VOLUME:-./data/clickhouse}:/var/lib/clickhouse # Currents services depend on clickhouse director: @@ -61,6 +93,3 @@ services: clickhouse: condition: service_healthy required: false - -volumes: - clickhousedata: null diff --git a/on-prem/templates/compose.currents.yml b/on-prem/templates/compose.currents.yml index 0ef7698..b227671 100644 --- a/on-prem/templates/compose.currents.yml +++ b/on-prem/templates/compose.currents.yml @@ -1,10 +1,8 @@ -# Base configuration of on-premise services -# This file defines the core Currents application services +# This core Currents application services services: director: hostname: director - container_name: currentsdirector image: ${IMAGE_REPOSITORY:-currents-}director:${IMAGE_TAG:-dev} expose: - 1234 @@ -16,15 +14,13 @@ services: networks: - default environment: + - CURRENTS_ENV=onprem - API_URL="http://localhost:4000/v1" - APP_BASE_URL=http://localhost:4000 - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false api: hostname: api - container_name: currentsapi image: ${IMAGE_REPOSITORY:-currents-}api:${IMAGE_TAG:-dev} expose: - 4000 @@ -36,16 +32,14 @@ services: env_file: - .env environment: + - CURRENTS_ENV=onprem - INCLUDE_DASHBOARD=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - CURRENTS_RECORD_API_URL=http://localhost:1234 changestreams-worker: - container_name: currrents-changestreams-worker image: ${IMAGE_REPOSITORY:-currents-}change-streams:${IMAGE_TAG:-dev} restart: unless-stopped networks: @@ -53,13 +47,11 @@ services: env_file: - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} write-worker: - container_name: currents-write-worker image: ${IMAGE_REPOSITORY:-currents-}writer:${IMAGE_TAG:-dev} restart: unless-stopped networks: @@ -67,14 +59,12 @@ services: env_file: - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - AUTOMATED_REPORTS_CURRENTS_DASHBOARD_HOSTNAME=http://host.docker.internal:4000 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} scheduler: - container_name: currents-scheduler image: ${IMAGE_REPOSITORY:-currents-}scheduler:${IMAGE_TAG:-dev} restart: unless-stopped networks: @@ -82,16 +72,14 @@ services: env_file: - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - - CLICKHOUSE_URL=http://host.docker.internal:8123 + - CLICKHOUSE_PASSWORD=${CLICKHOUSE_CURRENTS_PASSWORD} - RUN_STARTUP_TASKS=true volumes: - - ./.startup:/app/packages/scheduler/dist/.startup:ro + - ${SCHEDULER_STARTUP_VOLUME:-./data/startup}:/app/packages/scheduler/dist/.startup webhooks: - container_name: currents-webhooks image: ${IMAGE_REPOSITORY:-currents-}webhooks:${IMAGE_TAG:-dev} restart: unless-stopped networks: @@ -99,9 +87,8 @@ services: env_file: - .env environment: + - CURRENTS_ENV=onprem - MONGODB_URI=mongodb://host.docker.internal:27017/?readPreference=primary&directConnection=true&ssl=false - - REDIS_URI=redis://host.docker.internal:6379 - - REDIS_URI_SLAVE=redis://host.docker.internal:6379 - DASHBOARD_URL=http://localhost:4000 networks: diff --git a/on-prem/templates/compose.minio.yml b/on-prem/templates/compose.minio.yml index 642a6ad..e342a10 100644 --- a/on-prem/templates/compose.minio.yml +++ b/on-prem/templates/compose.minio.yml @@ -5,7 +5,7 @@ services: minio: image: bitnamilegacy/minio:2025.2.28 volumes: - - miniodata:/bitnami/minio/data + - ${MINIO_VOLUME:-./data/minio}:/bitnami/minio/data ports: - 9000:9000 - 9001:9001 @@ -15,7 +15,3 @@ services: MINIO_DEFAULT_BUCKETS: currents MINIO_ROOT_USER: ${MINIO_SERVER_ACCESS_KEY} MINIO_ROOT_PASSWORD: ${MINIO_SERVER_SECRET_KEY} - -volumes: - miniodata: null - diff --git a/on-prem/templates/compose.mongodb.yml b/on-prem/templates/compose.mongodb.yml index 3d320e7..e7970aa 100644 --- a/on-prem/templates/compose.mongodb.yml +++ b/on-prem/templates/compose.mongodb.yml @@ -21,7 +21,7 @@ services: timeout: 5s retries: 10 volumes: - - mongodata:/data/db + - ${MONGODB_VOLUME:-./data/mongodb}:/data/db # Currents services depend on mongodb director: @@ -59,6 +59,3 @@ services: mongodb: condition: service_healthy required: false - -volumes: - mongodata: null diff --git a/on-prem/templates/compose.redis.yml b/on-prem/templates/compose.redis.yml index b633a2d..838e37a 100644 --- a/on-prem/templates/compose.redis.yml +++ b/on-prem/templates/compose.redis.yml @@ -4,18 +4,14 @@ services: redis: hostname: redis - image: redis/redis-stack - expose: - - 6379 - - 8001 + image: redis/redis-stack-server:7.4.0-v8 ports: - 6379:6379 - - 8001:8001 restart: unless-stopped networks: - default volumes: - - redisdata:/data + - ${REDIS_VOLUME:-./data/redis}:/data # Currents services depend on redis director: @@ -53,6 +49,3 @@ services: redis: condition: service_started required: false - -volumes: - redisdata: null