A modular, decoupled Bashâbased orchestrator that accelerates provisioning of complex CloudâNative tooling stacks via Git submodules. Each module is a selfâcontained provisioner that runs entirely over SSH on a remote target, performing hardware validation, port collision resolution, DockerâCompose generation, deployment, and automatic rollback on failure.
| Layer | Responsibility |
|---|---|
Core (main.sh) |
Discovers modules/*/execute.sh, presents an interactive ANSI arrowâkey menu, and hands off execution to the selected module. |
| Modules | Independent Git submodules under modules/<name>/. Each exposes a single execute.sh that implements a complete provisioning lifecycle (SSH connectivity â resource checks â compose generation â remote docker compose up -d â SIGINT cleanup). |
| Submodule Design | Users clone the entire project recursively so every module is fetched automatically: git clone --recurse-submodules <SSH_GIT_URL>. |
| Module | Description | Key Features |
|---|---|---|
01-gitlab-setup |
Remote GitLab CE provisioner | Hardware checks (â„4âŻCPU / 4âŻGiB / 25âŻGiB), portâcollision loop (80/443/5050/22), enterprise docker-compose.yml with healthchecks & log rotation, SIGINT remote cleanup. |
02-repository-manager |
Dualâtool: Sonatype Nexus 3 or VMware Harbor | Tool selection menu, perâtool RAM minimums (Nexus 8âŻGiB / Harbor 4âŻGiB), disk â„25âŻGiB, port resolution (Nexus 8081/8082, Harbor 80/443/4443), tuned compose with resource limits, SIGINT remote cleanup. |
# 1. Clone recursively (fetches all submodules)
git clone --recurse-submodules git@github.com:DavoudTeimouri/StratoShell.git
# 2. Enter the project
cd StratoShell
# 3. Launch the interactive menu
./main.shThe menu renders all discovered modules. Use â / â to navigate, Enter to run a module, q to quit. After a module finishes (or is interrupted), control returns cleanly to the menu.
You must use the recursive flag to pull the complete nested architecture:
git clone --recurse-submodules git@github.com:DavoudTeimouri/StratoShell.gitWithout --recurse-submodules, the modules/ directory will be empty and no provisioners will be available.
-
Adding a new module
cd modules git submodule add git@github.com:<owner>/<module-repo>.git <module-name> # ensure <module-name>/execute.sh exists and is executable git add .gitmodules <module-name> git commit -m "feat: add <module-name> submodule" git push
-
Updating a submodule to latest upstream
cd modules/<module-name> git pull origin main cd ../.. git add modules/<module-name> git commit -m "chore: update <module-name> submodule" git push
- Local: Bash â„ 4.0,
ssh,scp,sshpass(for password auth),git. - Remote target: Docker Engine + Docker Compose, root/sudo SSH access, resources per module matrix.
MIT â © DavoudâŻTeimouri â StratoShell project