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.ymlfile -
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:
-
Adding Conductor service configuration to your docker-compose.yml
-
Creating shared configuration folder (recommended) or mounting individual files
-
Adding container labels for proper recognition by Conductor
-
Updating agent volume configurations for better log and data management
-
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.
Option 1: New shared configuration folder (recommended)
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:
-
Stop your deployment: [source,bash] ---- docker compose down ----
-
Start the updated deployment: [source,bash] ---- docker compose up -d ----
-
Verify Conductor is running: [source,bash] ---- docker compose ps gluesync-conductor ----
-
Access the web UI at https://localhost and verify Conductor appears in the interface
-
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-hublabel -
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-hubare different fromcom.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.