A Docker Compose setup for running OpenLegacy development tools locally.
This setup includes:
- Homepage (port 8080) - 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 8084) - Enterprise platform for API management and legacy system integration
- OL TermIQ (port 8085) - Terminal Intelligence for mainframe session recording, analysis, and automation
- PostgreSQL (port 5432) - Database for Hub Enterprise and TermIQ data persistence
- Docker installed and running
- Docker Compose installed
Before starting the services, you must configure your OpenLegacy license:
- Go to the OpenLegacy Community Site
- Log in to your account
- Navigate to your User Profile
- Copy your license token
- Open
config.envin this directory - Replace
your-license-token-herewith your actual license token:
OL_TOOL_LICENSE=your-actual-license-token-goes-here
OL_ADMIN=openlegacy
OL_PASSWORD=olpassword
OLCODE_ADMIN=openlegacy
OLCODE_PASSWORD=olpasswordπ‘ Tip: You can also customize the admin username and password in the same file.
Once you've configured your license, you can start services in two 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 and PostgreSQL:
./apps.sh start --allOr using docker-compose directly:
docker-compose --profile all up -dπ‘ Note: Hub Enterprise requires additional resources. Use
--allonly if you need enterprise features.
Open your browser and visit:
- π Homepage: http://localhost:8080
- π» OL Terminal: http://localhost:8081
- β‘ OL Code: http://localhost:8082
- ποΈ SQOL: http://localhost:8083
If you started with --all:
- π’ Hub Integration: http://localhost:8084
- π― OL TermIQ: http://localhost:8085
- ποΈ PostgreSQL: localhost:5432 (user: postgres, password: olhubpassword)
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 stop # Stop all running services
./apps.sh stop --all # Stop all services including Hub
./apps.sh restart # Restart services
./apps.sh restart --all # Restart all services including Hub
./apps.sh logs # View logs (follow mode)
./apps.sh logs --all # View logs including Hub
./apps.sh status # Show service status
./apps.sh status --all # Show all services including Hub
./apps.sh pull # Pull latest images
./apps.sh pull --all # Pull all images including Hubπ‘ Tip: Add
--allto 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 logsApplication 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
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 and TermIQ:
docker-compose --profile all down -v # β οΈ This deletes PostgreSQL data!
rm -rf .ol-terminal .olcode .sqol .termiq # Remove local configurationsIf 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 8080-8085 or 5432 are already in use, you can modify the ports in docker-compose.yml:
ports:
- "NEW_PORT:8080" # Change NEW_PORT to your desired portIf 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 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--all)
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!
When running with --all, 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 | OL Terminal | http://localhost:8081 |
| Your browser | OL Code | http://localhost:8082 |
| Your browser | SQOL | http://localhost:8083 |
| Your browser | Hub Integration | 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 |
| TermIQ container | Hub container | http://ol-hub:8080 |
| Hub 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: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- 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, 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
- 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, 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