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/conductor:/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/conductor:/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 at https://localhost 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.