| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A fast command-line tool for managing multi-service development stacks with Docker, MongoDB, SSH tunnels, and port-based service health checks.
This CLI provides professional tooling for complex development environments:
This is my DevOps command center for stevengregory.io. A tool managing my full-stack application: Angular frontend, Go service layer, and MongoDB database. Built for speedy local development and deployment of decoupled, multi-service stacks.
brew tap stevengregory/musing
brew install musingTap repository: stevengregory/homebrew-musing
Upgrading:
brew update && brew upgrade musingLive dashboard with real-time health checks.
musing monitorFeatures:
Manage the development stack.
musing dev # Start all services
musing dev start # Start all services (explicit)
musing dev stop # Stop all services
musing dev rebuild # Rebuild images and start
musing dev logs # Follow logsFeatures:
Manage SSH tunnel to production database.
musing tunnel # Start tunnel (or show status if running)
musing tunnel start # Start tunnel explicitly
musing tunnel stop # Stop tunnel
musing tunnel status # Check tunnel statusFeatures:
Open an interactive SSH session to your production server.
musing sshFeatures:
Deploy MongoDB collections to dev or production.
musing deploy # All collections to dev
musing deploy news # Deploy collection or alias to dev
musing deploy news prod # Deploy collection or alias to prodHow it works:
Directory collections are useful when each document deserves isolated source history:
data/
├── news.json
└── blog-posts/
├── first-post.json
└── second-post.json
Each file under blog-posts/ must contain exactly one JSON object. Like file-backed collections, the directory is a complete snapshot: deployment uses --drop, so removing a source file removes that document on the next deployment.
Production safety:
Check the installed version.
musing version
musing --versionCreate a .musing.yaml file alongside compose.yaml in your project root to define your stack. Commands search upward from the current directory until they find that project root.
# Optional: directory containing API repos.
# Empty defaults to the project root's parent directory.
# Relative values resolve from the project root's parent; absolute and ~/ paths are supported.
apiReposDir: services
services:
# Frontend
- name: Angular
port: 3000
type: frontend
# API Services
- name: my-news-api
port: 8080
type: api
alias: news # Optional: short key for `musing deploy news`
collection: news-items # Optional: data file or directory key; defaults to alias when omitted
# Database configuration
database:
type: MongoDB
name: mydb
devPort: 27018
prodPort: 27019
dataDir: data
# Optional: Production deployment settings
production:
server: root@your-server.com # SSH server for production access
remoteDBPort: 27017 # Remote database port (typically 27017 for MongoDB)
sshKeyPath: ~/.ssh/your-key # Optional: specific SSH key to use (supports ~ expansion)Project-agnostic design means you can adapt it for any stack:
Key benefits:
# Run without installing
go run ./cmd/musing monitor
go run ./cmd/musing dev
# Test and build
go test ./...
make build
# Manage dependencies
go mod tidy
# Final whitespace check before committing
git diff --checkmusing-cli/ ├── cmd/ │ ├── musing/ │ │ └── main.go # Entry point │ ├── dev.go # Dev command │ ├── deploy.go # Deploy command │ ├── monitor.go # Monitor command │ ├── ssh.go # SSH command │ ├── tunnel.go # Tunnel command │ ├── project.go # Shared project/config loading helpers │ └── root.go # Root command setup ├── internal/ │ ├── config/ # Service configs & ports │ ├── docker/ # Docker operations │ ├── health/ # Health checks │ ├── mongo/ # MongoDB deployment │ └── ui/ # Styled output & prompts
Tech Stack:
See AGENTS.md for Codex guidance and CLAUDE.md for additional project background.
Help Command (click to expand) Monitor Command (click to expand)MIT
| Back | FazBrowse Home | New Git URL |