Search docs.molo17.com
    A newer version of this documentation is available.
    View Latest (v2.3)

    Migrating to Conductor

    This guide helps you migrate an existing Gluesync Docker Compose deployment to include the Conductor module. Conductor provides container orchestration capabilities, allowing you to manage agent lifecycles directly from the Gluesync web UI without manual docker-compose commands.

    Prerequisites

    Before migrating, ensure your current deployment:

    • Is running Gluesync v2.1 or later

    • Has a valid docker-compose.yml file

    • Includes the core hub and any agents you want to manage

    • Has access to the Docker socket for container management

    Migration overview

    The migration involves:

    1. Adding Conductor service configuration to your docker-compose.yml

    2. Creating shared configuration folder (recommended) or mounting individual files

    3. Adding container labels for proper recognition by Conductor

    4. Updating agent volume configurations for better log and data management

    5. Testing the deployment

    Adding Conductor service

    To add Conductor to your existing deployment, insert the following service configuration into your docker-compose.yml file. Place it immediately after the services: section to avoid indentation issues.

    If you’re creating a new deployment or can reorganize your configuration files, use this approach with a shared folder:

    gluesync-conductor:
      image: molo17/gluesync-conductor:latest
      container_name: gluesync-conductor
      restart: unless-stopped
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.conductor.rule=PathPrefix(`/conductor/api/`)"
        - "traefik.http.routers.conductor.entrypoints=websecure"
        - "traefik.http.routers.conductor.tls=true"
        - "traefik.http.services.conductor.loadbalancer.server.port=1717"
        - "traefik.http.services.conductor.loadbalancer.server.scheme=https"
        - "traefik.http.routers.conductor.middlewares=conductor@docker"
        - "traefik.http.routers.conductor.service=conductor"
        - "traefik.http.middlewares.conductor.replacepathregex.regex=^/conductor/api/(.*)"
        - "traefik.http.middlewares.conductor.replacepathregex.replacement=/$$1"
        - "traefik.http.services.conductor.loadbalancer.passhostheader=true"
        - com.molo17.conductor.type=module
      environment:
        - BASE_PATH=$PWD
        - SSL_ENABLED=true
        - SSL_SKIP_VERIFY=true
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./docker-compose.yml:/opt/gluesync-conductor/docker-compose.yml
        - ./shared/:/opt/gluesync/data:ro
        - ./logs:/opt/gluesync-conductor/logs

    Creating the shared folder

    Since files needed by core hub and Conductor are the same and must be shared, create a new folder named shared in the same directory as your docker-compose.yml. Copy the following files into it:

    • gluesync-cert.pem

    • gluesync-key.pem

    • gluesync.com.jks

    • gs-license.dat

    • logback.xml

    • security-config.json

    Update the Core Hub volumes to use the shared folder:
    volumes:
      - ./shared/:/opt/gluesync/shared
      - ./bootstrap-core-hub.json:/opt/gluesync/data/bootstrap-core-hub.json:ro

    Option 2: Legacy configuration (individual file mounts)

    If you have an older deployment and prefer not to reorganize files, use this configuration with individual file mounts:

    gluesync-conductor:
      image: molo17/gluesync-conductor:latest
      container_name: gluesync-conductor
      restart: unless-stopped
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.conductor.rule=PathPrefix(`/conductor/api/`)"
        - "traefik.http.routers.conductor.entrypoints=websecure"
        - "traefik.http.routers.conductor.tls=true"
        - "traefik.http.services.conductor.loadbalancer.server.port=1717"
        - "traefik.http.services.conductor.loadbalancer.server.scheme=https"
        - "traefik.http.routers.conductor.middlewares=conductor@docker"
        - "traefik.http.routers.conductor.service=conductor"
        - "traefik.http.middlewares.conductor.replacepathregex.regex=^/conductor/api/(.*)"
        - "traefik.http.middlewares.conductor.replacepathregex.replacement=/$$1"
        - "traefik.http.services.conductor.loadbalancer.passhostheader=true"
        - com.molo17.conductor.type=module
      environment:
        - BASE_PATH=$PWD
        - SSL_ENABLED=true
        - SSL_SKIP_VERIFY=true
        - MOUNT_LEGACY_FILE_CONFIG=true
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./docker-compose.yml:/opt/gluesync-conductor/docker-compose.yml
        - ./gs-license.dat:/opt/gluesync/data/gs-license.dat:ro
        - ./security-config.json:/opt/gluesync/data/security-config.json:ro
        - ./gluesync-cert.pem:/opt/gluesync/data/cert.pem:ro
        - ./gluesync-key.pem:/opt/gluesync/data/key.pem:ro
        - ./logs/:/opt/gluesync-conductor/logs
    If your Docker Compose file has a different name, update the volume mount accordingly: ./your-dockerfile.yml:/opt/gluesync-conductor/docker-compose.yml

    Adding container labels

    For Conductor to properly manage Chronos and core hub, add these labels to your existing services:

    Chronos service:

    labels:
      # ... existing labels ...
      - com.molo17.conductor.type=module

    Core hub service:

    labels:
      # ... existing labels ...
      - com.molo17.conductor.type=core-hub

    Agents already configured:

    labels:
      # ... existing labels ...
      - com.molo17.conductor.type=agent
    Maintain the same indentation as your other labels.

    Updating agent configurations

    Option 1: New shared configuration folder

    Update your agent volumes to use the shared configuration:

    volumes:
      - ./shared:/opt/gluesync/shared:ro
      - ./logs/<agent-name>:/opt/gluesync/logs
      - ./data/<agent-name>:/opt/gluesync/data # <---- that requires you to move the content of the data folder of each agent into the new data folder making sure it matches this folder structure

    Replace <agent-name> with the actual name of each agent (e.g., gluesync-mssql-source).

    Ensure /data and /logs folders are included in your Conductor volumes for automated log collection.

    Option 2: Legacy configuration

    For existing agents, update the volume paths to organize data and logs properly:

    volumes:
      - ./gs-license.dat:/opt/gluesync/data/gs-license.dat
      - ./logback.xml:/opt/gluesync/data/logback.xml
      - ./security-config.json:/opt/gluesync/data/security-config.json
      - ./gluesync.com.jks:/opt/gluesync/data/gluesync.com.jks
      - ./<agent-name>:/opt/gluesync/data
      - ./<agent-name>-logs:/opt/gluesync/logs

    You can either create new folders or move existing agent folders into the appropriate data/ and logs/ subdirectories. If you don’t create the new structure, logs won’t be collected automatically by the log collection scripts.

    Testing the migration

    After making these changes:

    1. Stop your deployment: [source,bash] ---- docker compose down ----

    2. Start the updated deployment: [source,bash] ---- docker compose up -d ----

    3. Verify Conductor is running: [source,bash] ---- docker compose ps gluesync-conductor ----

    4. Access the web UI via your browser at localhost (HTTPS) and verify Conductor appears in the interface

    5. Check agent management - you should now be able to start/stop agents from the UI

    Troubleshooting

    Common issues

    Conductor cannot connect to core hub:

    • Verify the core hub has the correct com.molo17.conductor.type=core-hub label

    • Check that SSL settings match between services

    Agents not recognized:

    • Ensure agents have proper volume mounts

    • Verify Docker socket access: /var/run/docker.sock

    Configuration file not found:

    • Check file paths in volume mounts

    • Ensure files exist in the expected locations

    Configuration notes

    • Spaces in labels: Labels like com.molo17.conductor.type=core-hub are different from com.molo17.conductor.type: core-hub (note the space after the colon). Always use the equals sign format.

    • Docker file names: If your docker-compose file has a different name, update the Conductor volume mount accordingly.

    Next steps

    With Conductor successfully migrated:

    • Manage agents from the web UI instead of command line

    • Monitor container status and logs through the interface

    • Automate deployments using Conductor’s orchestration features

    • Collect logs automatically with the improved folder structure

    For additional help, consult our Docker Compose guide or contact support.