A Docker Compose setup for running OpenLegacy development tools locally.
This setup includes:
- Homepage (port 80) - Landing page with links to all tools
- OL Terminal (port 8081) - Web-based terminal for mainframe and AS/400 systems
- OL Code (port 8082) - Web-based IDE for legacy code development
- SQOL (port 8083) - Universal SQL console for databases
- Hub Integration (port 8080) - Enterprise platform for API management and legacy system integration
- Hub Planner (port 8080) - Strategic modernization planning tool (accessible via
/mpt/baselines) - AppIQ (port 8084) - No-code application builder that converts terminal screens into modern applications
- OL TermIQ (port 8085) - Terminal Intelligence for mainframe session recording, analysis, and automation
- PostgreSQL (port 5432) - Database for Hub Enterprise, AppIQ, and TermIQ data persistence
- Docker installed and running
- Docker Compose installed
Before starting the services, you must configure your OpenLegacy licenses:
- Go to the OpenLegacy Community Site
- Log in to your account
- Navigate to your User Profile
- Copy your community license token
- Open
config.envin this directory - Set
OL_TOOL_LICENSEwith your actual license token:
OL_TOOL_LICENSE=your-actual-community-license-token-goes-here
OL_ADMIN=openlegacy
OL_PASSWORD=olpassword
OLCODE_ADMIN=openlegacy
OLCODE_PASSWORD=olpasswordWhen starting with --all or --all-ai, you'll also need to configure:
OL_LICENSE- Your OpenLegacy Enterprise license (required for Hub Integration)OL_HUB_API_KEY- Hub API key (can be obtained from Hub UI at http://localhost:8080 after first start)
When using --all-ai, configure AI settings:
OL_AI_ENABLED_KEY=true
OL_AI_VENDOR=openai
OL_AI_MODEL_NAME=gpt-4.1
OL_AI_API_KEY=your-openai-api-keyπ‘ Tip: The
apps.shscript will prompt you for missing licenses and API keys when starting services. You can also customize admin usernames and passwords inconfig.env.
Once you've configured your license, you can start services in three ways:
Start the core free tools without Hub Enterprise:
./apps.sh startOr using docker-compose directly:
docker-compose up -dStart all services including Hub Integration, AppIQ, TermIQ, and PostgreSQL:
./apps.sh start --allOr using docker-compose directly:
docker-compose --profile all up -dStart all services including Hub Enterprise with AI capabilities:
./apps.sh start --all-aiOr using docker-compose directly:
docker-compose --profile all-ai up -dπ‘ Note: Hub Enterprise requires additional resources. Use
--allor--all-aionly if you need enterprise features. The--all-aioption enables AI-powered features in Hub Integration.
Open your browser and visit:
- π Homepage: http://localhost (or http://localhost:80)
- π» OL Terminal: http://localhost:8081
- β‘ OL Code: http://localhost:8082
- ποΈ SQOL: http://localhost:8083
If you started with --all or --all-ai:
- π’ Hub Integration: http://localhost:8080
- π Hub Planner: http://localhost:8080/mpt/baselines
- π± AppIQ: http://localhost:8084
- π― OL TermIQ: http://localhost:8085
- ποΈ PostgreSQL: localhost:5432 (user: postgres, password: olhubpassword)
- π€ Python AI Service (with
--all-ai): http://localhost:8090 (internal debugging)
The apps.sh script provides convenient commands:
./apps.sh start # Start community apps only
./apps.sh start --all # Start all apps including Hub Enterprise
./apps.sh start --all-ai # Start all apps including Hub Enterprise with AI
./apps.sh stop # Stop all running services
./apps.sh stop --all # Stop all services including Hub
./apps.sh stop --all-ai # Stop all services including Hub with AI
./apps.sh restart # Restart services
./apps.sh restart --all # Restart all services including Hub
./apps.sh restart --all-ai # Restart all services including Hub with AI
./apps.sh logs # View logs (follow mode)
./apps.sh logs --all # View logs including Hub
./apps.sh logs --all-ai # View logs including Hub with AI
./apps.sh status # Show service status
./apps.sh status --all # Show all services including Hub
./apps.sh status --all-ai # Show all services including Hub with AI
./apps.sh pull # Pull latest images
./apps.sh pull --all # Pull all images including Hub
./apps.sh pull --all-ai # Pull all images including Hub with AIπ‘ Tip: Add
--allor--all-aito any command to include Hub Enterprise and PostgreSQL services.
# Community apps only
docker-compose up -d # Start services in background
docker-compose down # Stop and remove containers
docker-compose ps # List running services
docker-compose logs -f # View logs
docker-compose restart # Restart services
# All apps including Hub Enterprise
docker-compose --profile all up -d # Start all services
docker-compose --profile all down # Stop all services
docker-compose --profile all ps # List all services
docker-compose --profile all logs -f # View all logs
# All apps including Hub Enterprise with AI
docker-compose --profile all-ai up -d # Start all services with AI
docker-compose --profile all-ai down # Stop all services with AI
docker-compose --profile all-ai ps # List all services with AI
docker-compose --profile all-ai logs -f # View all logs with AIApplication data is stored in two ways:
Configuration files are stored in local directories that you can edit directly:
./.ol-terminal/- OL Terminal configurations and data./.olcode/- OL Code projects and settings./.sqol/- SQOL connections and queries
./.termiq/- TermIQ session recordings, configurations, and analysis data./.appiq/- AppIQ application configurations and project data
These directories are bind-mounted from your project folder, allowing you to:
- Edit configuration files directly in your IDE
- Version control your app configurations
- Share configurations across team members
- Backup configurations easily
apps_hub-postgres-data- PostgreSQL database for Hub Enterprise
Your data persists across container restarts and system reboots.
To reset configuration:
# Stop services
./apps.sh stop
# Remove configuration directories
rm -rf .ol-terminal .olcode .sqol
# Restart - apps will create fresh configurations
./apps.sh startTo delete all data including Hub, AppIQ, and TermIQ:
docker-compose --profile all down -v # β οΈ This deletes PostgreSQL data!
rm -rf .ol-terminal .olcode .sqol .termiq .appiq # Remove local configurationsTo reset PostgreSQL database data:
# Stop the containers
docker-compose down
# Remove the specific volume
docker volume rm apps-manager_hub-postgres-data
# Start again (volume will be recreated automatically)
docker-compose up -dπ‘ Note: The volume name will be prefixed with your project directory name (e.g.,
apps-manager_hub-postgres-data). To see all volumes, usedocker volume ls. To see the exact volume name for your project, usedocker-compose config --volumes.
If you see license-related errors, make sure you:
- Copied the correct license from your Community Profile
- Updated
config.envwith your license - Restarted the services after updating the license
All services run as root (user 0:0) to avoid permission issues with volumes. The configuration directories are automatically created with proper permissions when you first start the services.
If you still encounter permission errors:
./apps.sh stop
rm -rf .ol-terminal .olcode .sqol
./apps.sh startIf ports 80, 8080-8085, or 5432 are already in use, you can modify the ports in docker-compose.yml:
ports:
- "NEW_PORT:80" # Change NEW_PORT to your desired port for homepage
- "NEW_PORT:8080" # Change NEW_PORT to your desired port for HubCommon port mappings:
- Port 80: Homepage
- Port 8080: Hub Integration
- Port 8081: OL Terminal
- Port 8082: OL Code
- Port 8083: SQOL
- Port 8084: AppIQ
- Port 8085: OL TermIQ
- Port 5432: PostgreSQL
If you previously ran the services with docker run, remove the old containers:
docker rm -f ol-terminal ol-code sqol ol-homepage ol-hub ol-termiq appiq hub-postgresThen start with docker-compose:
./apps.sh start --allIf Hub Enterprise or TermIQ fail to start or connect to the database:
- Check if PostgreSQL is running:
docker ps | grep hub-postgres- Check the database initialization:
docker logs hub-postgres- Verify databases were created:
docker exec -it hub-postgres psql -U postgres -c "\l"
# Should show: olhub and termiq databases- Check Hub logs for errors:
docker logs ol-hub- Check TermIQ logs for errors:
docker logs ol-termiq- Restart Hub and TermIQ services:
./apps.sh restart --alldocker-compose.yml- Service definitions and configurationconfig.env- Environment variables (license, credentials)apps.sh- Helper script for managing servicesindex.html- Homepage templateinit-db.sql- PostgreSQL initialization script (creates olhub and termiq databases).ol-terminal/- OL Terminal configuration directory (created on first run).olcode/- OL Code configuration directory (created on first run).sqol/- SQOL configuration directory (created on first run).termiq/- TermIQ configuration directory (created on first run with--allor--all-ai).appiq/- AppIQ configuration directory (created on first run with--allor--all-ai)
You can pre-configure apps by creating these directories before first run. For example, to pre-configure SQOL with database connections:
- Create
.sqoldirectory - Add
connections.jsonwith your database connections - Add
application.yamlwith your settings - Start the services with
./apps.sh start
SQOL will use your pre-configured connections immediately!
The apps.sh script automatically replaces Hub API keys in configuration files:
${OL_HUB_API_KEY:}placeholders inapplication.yamlfiles are replaced with your actual API keyhubApiKeyorhub-api-keyvalues in YAML files are updatedapiKeyvalues in JSON configuration files are updated
This happens automatically when you start services with --all or --all-ai. The script searches for configuration files in subdirectories (e.g., .sqol/application.yaml, .olcode/application.yaml) and updates them with your Hub API key from config.env.
For DB2 database connections in SQOL, ensure the DB2 JDBC driver license file is available:
# Place db2jcc_license_cisuz.jar in .sqol/jars directory
mkdir -p .sqol/jars
# Copy your db2jcc_license_cisuz.jar file to .sqol/jars/When running with --all or --all-ai, PostgreSQL is available for direct connections:
Connection Details:
- Host:
localhost(from host machine) orhub-postgres(from containers) - Port:
5432 - Username:
postgres - Password:
olhubpassword - Databases:
olhub,termiq
Example connection strings:
# Using psql from host machine
psql -h localhost -p 5432 -U postgres -d olhub
# From within containers
psql -h hub-postgres -p 5432 -U postgres -d termiq
# JDBC URL
jdbc:postgresql://localhost:5432/olhub?user=postgres&password=olhubpasswordContainers in Docker Compose can communicate with each other using service names as hostnames. This is important when apps need to connect to each other.
Important: When referencing other containers from within a container, use:
- Service name: Use the exact name from
docker-compose.yml(e.g.,ol-hub) - Internal port:
8080(not the host-exposed ports like 8084, 8085)
For example, in .sqol/application.yaml:
generalSettings:
hubUrl: http://ol-hub:8080 # β
Correct - uses service name and internal port
# NOT: http://localhost:8084 # β Wrong - localhost refers to the container itselfPort Mapping Summary:
| From | To | URL |
|---|---|---|
| Your browser | Homepage | http://localhost or http://localhost:80 |
| Your browser | Hub Integration | http://localhost:8080 |
| Your browser | OL Terminal | http://localhost:8081 |
| Your browser | OL Code | http://localhost:8082 |
| Your browser | SQOL | http://localhost:8083 |
| Your browser | AppIQ | http://localhost:8084 |
| Your browser | OL TermIQ | http://localhost:8085 |
| Your browser | PostgreSQL | postgresql://localhost:5432 |
| SQOL container | Hub container | http://ol-hub:8080 |
| OL Code container | Hub container | http://ol-hub:8080 |
| OL Terminal container | Hub container | http://ol-hub:8080 |
| AppIQ container | Hub container | http://ol-hub:8080 |
| TermIQ container | Hub container | http://ol-hub:8080 |
| Hub container | PostgreSQL | postgresql://hub-postgres:5432/olhub |
| AppIQ container | PostgreSQL | postgresql://hub-postgres:5432/olhub |
| TermIQ container | PostgreSQL | postgresql://hub-postgres:5432/termiq |
Other service names you can use:
ol-terminalorhttp://ol-terminal:8080ol-codeorhttp://ol-code:8080sqolorhttp://sqol:8080ol-huborhttp://ol-hub:8080appiqorhttp://appiq:8080ol-termiqorhttp://ol-termiq:8080hub-postgresorpostgresql://hub-postgres:5432
Troubleshooting DNS issues: If you get "UnknownHostException" or DNS resolution errors:
- Verify all containers are running:
docker ps - Check they're on the same network:
docker network inspect apps_app-network - Restart the container having issues:
docker restart <container-name> - If still failing, restart all services:
./apps.sh restart --all
To pull the latest versions of the OpenLegacy tools:
# Update community apps only
./apps.sh pull
docker-compose up -d
# Update all apps including Hub
./apps.sh pull --all
docker-compose --profile all up -d
# Update all apps including Hub with AI
./apps.sh pull --all-ai
docker-compose --profile all-ai up -d- The
config.envfile contains sensitive information (license and passwords) - Configuration directories (
.ol-terminal/,.olcode/,.sqol/) may contain connection strings and credentials - Do not commit
config.envto version control - Consider adding configuration directories to
.gitignoreif they contain sensitive data - Change default passwords for production use
- Review configuration files before committing to ensure no secrets are exposed
When running with --all or --all-ai, you get access to enterprise features:
- Automatic API Generation - Transform legacy systems into modern REST APIs
- Legacy System Analysis - Analyze and optimize mainframe processes
- Modernization Planning - Create strategic modernization roadmaps with Hub Planner
- Centralized Security - Enterprise-grade security and access control
- ETL & CDC - Extract, Transform, Load and Change Data Capture workflows
- AI-Powered Features (with
--all-ai) - AI-assisted API generation, code analysis, and modernization planning
- Strategic Planning - Analyze dependencies and create phased modernization plans
- Risk Assessment - De-risk your legacy transformation journey
- Dependency Mapping - Visualize system dependencies and relationships
- Roadmap Creation - Build comprehensive modernization roadmaps
- No-Code Application Builder - Convert terminal screens into modern applications
- Screen Capture Integration - Use screens captured by OL Terminal
- API Integration - Consume backend APIs from Hub Integration
- Domain Model Support - Build apps from domain models and other sources
- Session Recording - Capture and replay mainframe terminal sessions
- Transaction Analysis - Analyze terminal workflows and identify optimization opportunities
- Automated Testing - Create test scenarios from recorded sessions
- Process Mining - Extract business process insights from terminal interactions
- Integration Testing - Test API integrations against real terminal workflows
- olhub database - Stores Hub Enterprise configuration, projects, AppIQ apps, and metadata
- termiq database - Stores TermIQ session recordings, analysis data, and test scenarios
- External Access - Available on port 5432 for direct database connections and backup/restore
Learn more at: https://community.openlegacy.com/hub
If you encounter issues:
- Check the logs:
./apps.sh logs - Verify your license is correctly configured in
config.env - Ensure Docker is running and up to date
- Visit the OpenLegacy Community for support